
    \j 	                     J    d dl mZ d dlmZmZmZ dedefdZdedefdZ	d Z
y)	    )Iterable)EXPAND_PARAMFIELDS_PARAM
OMIT_PARAMfieldreturnc                     | j                   j                  t              }g }|rD|j                  d      D ]0  }|j	                  |j                  d      D cg c]  }| c}       2 d|v xs ||v S c c}w )z\ Examines request object to return boolean of whether
        passed field is expanded.
    ,.z~all)query_paramsgetr   splitextend)requestr   expand_valueexpand_fieldsf_s         @/root/env/lib/python3.12/site-packages/rest_flex_fields/utils.pyis_expandedr      sy     ''++L9LM##C( 	<A  QWWS\!:!!:;	< ]"<e}&<< ";s   	A2
c                     | j                   j                  t              }| j                   j                  t              }g g }}|rD|j	                  d      D ]0  }|j                  |j	                  d      D cg c]  }| c}       2 |rD|j	                  d      D ]0  }|j                  |j	                  d      D cg c]  }| c}       2 t        |      dkD  r||vryt        |      dkD  r||v ryyc c}w c c}w )z Examines request object to return boolean of whether
        passed field has been excluded, either because `fields` is
        set, and it is not among them, or because `omit` is set and
        it is among them.
    r
   r   r   FT)r   r   r   r   r   r   len)r   r   sparse_value
omit_valuesparse_fieldsomit_fieldsr   r   s           r   is_includedr      s     ''++L9L%%))*5J!#R;M##C( 	<A  QWWS\!:!!:;	< !!#& 	:A1773<8a89	: =A%}"<
;! 4 ";  9s   7	C6
=	C;
c                    g }i }| s||fS t        | t              sJ d       t        | t              r=| j                  d      D cg c]#  }|j	                         s|j	                         % } }| D ]_  }d|v rH|j                  dd      \  }}|j                  |       |j                  |g       j                  |       O|j                  |       a t        t        |            }||fS c c}w )z
        Convert dot-notation such as ['a', 'a.b', 'a.d', 'c'] into
        current-level fields ['a', 'c'] and next-level fields
        {'a': ['b', 'd']}.
    z:`fields` must be iterable (e.g. list, tuple, or generator)r
   r      )	
isinstancer   strr   stripappend
setdefaultlistset)fieldsfirst_level_fieldsnext_level_fieldsaefirst_level
next_levels          r   split_levelsr.   /   s     !#444 DCD  &#%+\\#%6D!'')!'')DD )!8&'ggc1o#K%%k2((b9@@L%%a() c"456000 Es   C+C+N)collections.abcr   rest_flex_fieldsr   r   r   r!   boolr   r   r.        r   <module>r4      s9    $ C C= = =  61r3   