
    _}dg                         d dl Z d dlZd dlmZmZ d dlmZ d dlmZ  G d de	          Z
 G d de          Z G d	 d
          Z G d de          Z G d de          Z G d de          ZdS )    N)MappingMutableMapping)	force_str)jsonc                   ^     e Zd ZdZ fdZd Zd Zd Zej	        dk    r
d Z
d Z xZS  xZS )	
ReturnDictz
    Return object from `serializer.data` for the `Serializer` class.
    Includes a backlink to the serializer instance for renderers
    to use if they need richer field information.
    c                 n    |                     d          | _         t                      j        |i | d S N
serializerpopr   super__init__selfargskwargs	__class__s      f/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/rest_framework/utils/serializer_helpers.pyr   zReturnDict.__init__   8     **\22$)&)))))    c                 .    t          | | j                  S N)r   )r   r   r   s    r   copyzReturnDict.copy   s    $4?;;;;r   c                 6    t                               |           S N)dict__repr__r   s    r   r   zReturnDict.__repr__       }}T"""r   c                 0    t           t          |           ffS r   )r   r   s    r   
__reduce__zReturnDict.__reduce__        tDzzm$$r   )   	   c                     t          |t                    st          S |                     | | j                  }|                    |           |S r   
isinstancer   NotImplementedr   r   updater   othernews      r   __or__zReturnDict.__or__"   sH    eT** &%%..$/.BBCJJuJr   c                     t          |t                    st          S |                     || j                  }|                    |            |S r   r'   r+   s      r   __ror__zReturnDict.__ror__)   sH    eT** &%%..4?.CCCJJtJr   )__name__
__module____qualname____doc__r   r   r   r"   sysversion_infor.   r0   __classcell__r   s   @r   r   r   
   s         * * * * *< < <# # #% % %
 6!!	 	 		 	 	 	 	 	 	 "!!!r   r   c                   .     e Zd ZdZ fdZd Zd Z xZS )
ReturnListz
    Return object from `serializer.data` for the `SerializerList` class.
    Includes a backlink to the serializer instance for renderers
    to use if they need richer field information.
    c                 n    |                     d          | _         t                      j        |i | d S r
   r   r   s      r   r   zReturnList.__init__8   r   r   c                 6    t                               |           S r   )listr   r   s    r   r   zReturnList.__repr__<   r    r   c                 0    t           t          |           ffS r   )r=   r   s    r   r"   zReturnList.__reduce__?   r#   r   )r1   r2   r3   r4   r   r   r"   r7   r8   s   @r   r:   r:   1   s`         * * * * *# # #% % % % % % %r   r:   c                   B    e Zd ZdZd	dZd Zed             Zd Zd Z	dS )

BoundFieldz
    A field object that also includes `.value` and `.error` properties.
    Returned when iterating over a serializer instance,
    providing an API similar to Django forms and form fields.
     c                 \    || _         || _        || _        || _        || j        z   | _        d S r   )_field_prefixvalueerrors
field_namename)r   fieldrE   rF   prefixs        r   r   zBoundField.__init__L   s0    
T_,			r   c                 ,    t          | j        |          S r   )getattrrC   )r   	attr_names     r   __getattr__zBoundField.__getattr__S   s    t{I...r   c                     | j         j        S r   )rC   r   r   s    r   _proxy_classzBoundField._proxy_classV   s    {$$r   c                 B    d| j         j        d| j        d| j        dS )N<z value=z errors=>)r   r1   rE   rF   r   s    r   r   zBoundField.__repr__Z   s,     N###TZZZ
 	
r   c                     | j         	| j         du rdn| j         }|                     | j        || j        | j                  S NFrA   )rE   r   rC   rF   rD   r   rE   s     r   as_form_fieldzBoundField.as_form_field_   s>    z)TZ5-@-@tz~~dk5$+t|LLLr   NrA   )
r1   r2   r3   r4   r   rN   propertyrP   r   rW    r   r   r@   r@   E   s         - - - -/ / / % % X%
 
 

M M M M Mr   r@   c                       e Zd Zd ZdS )JSONBoundFieldc                 (   | j         }t          |dd          sTt          j        t          t
                    5  t          j        | j         ddd          }d d d            n# 1 swxY w Y   |                     | j	        || j
        | j                  S )Nis_json_stringFT   ),z: )	sort_keysindent
separators)rE   rL   
contextlibsuppress	TypeError
ValueErrorr   dumpsr   rC   rF   rD   rV   s     r   rW   zJSONBoundField.as_form_fielde   s    
 u.66 	$Y
;;  
J"*	                 ~~dk5$+t|LLLs   A""A&)A&N)r1   r2   r3   rW   rZ   r   r   r\   r\   d   s(        M M M M Mr   r\   c                   6     e Zd ZdZd fd	Zd Zd Zd Z xZS )NestedBoundFieldz
    This `BoundField` additionally implements __iter__ and __getitem__
    in order to support nested bound fields. This class is the type of
    `BoundField` that is used for serializer fields.
    rA   c                     ||dk    st          |t                    si }t                                          ||||           d S )NrA   )r(   r   r   r   )r   rI   rE   rF   rJ   r   s        r   r   zNestedBoundField.__init__{   sG    =ERKKz%/I/IKEvv66666r   c              #   `   K   | j                                         D ]}| |j                 V  d S r   )fieldsvaluesrG   )r   rI   s     r   __iter__zNestedBoundField.__iter__   sD      ['')) 	) 	)Eu'(((((	) 	)r   c                    | j         |         }| j        r| j                            |          nd }t          | j        t
                    r| j                            |          nd }t          |d          rt          |||| j        dz             S t          |dd          rt          |||| j        dz             S t          |||| j        dz             S )Nrm   .)rJ   _is_jsonfieldF)rm   rE   getr(   rF   r   hasattrrj   rH   rL   r\   r@   )r   keyrI   rE   errors        r   __getitem__zNestedBoundField.__getitem__   s    C '+z;
s###t(24;(E(EO$$$45(## 	O#E5%	CPPPPUOU33 	O!%di#oNNNN%di#oFFFFr   c                 
   i }| j                                         D ]A\  }}t          |t          t          f          r|||<   '||du rdnt          |          ||<   B|                     | j        || j        | j	                  S rU   )
rE   itemsr(   r=   r   r   r   rC   rF   rD   )r   rn   ru   rE   s       r   rW   zNestedBoundField.as_form_field   s    ***,, 	\ 	\JC%$.. \#s%*]eunnbb9UZK[K[s~~dk64;MMMr   rX   )	r1   r2   r3   r4   r   ro   rw   rW   r7   r8   s   @r   rj   rj   t   s~         7 7 7 7 7 7
) ) )G G GN N N N N N Nr   rj   c                   <    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	S )
BindingDictz
    This dict-like object is used to store fields on a serializer.

    This ensures that whenever fields are added to the serializer we call
    `field.bind()` so that the `field_name` and `parent` attributes
    can be set correctly.
    c                 "    || _         i | _        d S r   )r   rm   )r   r   s     r   r   zBindingDict.__init__   s    $r   c                 R    || j         |<   |                    || j                   d S )N)rG   parent)rm   bindr   )r   ru   rI   s      r   __setitem__zBindingDict.__setitem__   s,     C

c$/
:::::r   c                     | j         |         S r   rm   r   ru   s     r   rw   zBindingDict.__getitem__   s    {3r   c                     | j         |= d S r   r   r   s     r   __delitem__zBindingDict.__delitem__   s    Kr   c                 *    t          | j                  S r   )iterrm   r   s    r   ro   zBindingDict.__iter__   s    DK   r   c                 *    t          | j                  S r   )lenrm   r   s    r   __len__zBindingDict.__len__   s    4;r   c                 @    t                               | j                  S r   )r   r   rm   r   s    r   r   zBindingDict.__repr__   s    }}T[)))r   N)r1   r2   r3   r4   r   r   rw   r   ro   r   r   rZ   r   r   r{   r{      s           ; ; ;       ! ! !     * * * * *r   r{   )rd   r5   collections.abcr   r   django.utils.encodingr   rest_framework.utilsr   r   r   r=   r:   r@   r\   rj   r{   rZ   r   r   <module>r      st       



 3 3 3 3 3 3 3 3 + + + + + + % % % % % %$ $ $ $ $ $ $ $N% % % % % % % %(M M M M M M M M>M M M M MZ M M M !N !N !N !N !Nz !N !N !NH* * * * *. * * * * *r   