
    ^f$                         d dl Z d dlm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)OrderedDict)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      Y/var/www/html/env/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/   r1   __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   )r2   r3   r4   r5   r   r    r#   r8   r9   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   fieldrF   rG   prefixs        r   r   zBoundField.__init__L   s0    
T_,			r   c                 ,    t          | j        |          S r   )getattrrD   )r   	attr_names     r   __getattr__zBoundField.__getattr__S   s    t{I...r   c                     | j         j        S r   )rD   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   r2   rF   rG   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 NFrB   )rF   r   rD   rG   rE   r   rF   s     r   as_form_fieldzBoundField.as_form_field_   s>    z)TZ5-@-@tz~~dk5$+t|LLLr   NrB   )
r2   r3   r4   r5   r   rO   propertyrQ   r    rX    r   r   rA   rA   E   s         - - - -/ / / % % X%
 
 

M M M M Mr   rA   c                       e Zd Zd ZdS )JSONBoundFieldc                     | j         }t          |dd          s6	 t          j        | j         ddd          }n# t          t
          f$ r Y nw xY w|                     | j        || j        | j	                  S )Nis_json_stringFT   ),z: )	sort_keysindent
separators)
rF   rM   r   dumps	TypeError
ValueErrorr   rD   rG   rE   rW   s     r   rX   zJSONBoundField.as_form_fielde   s    
 u.66 		
J"*	   z*   ~~dk5$+t|LLLs   8 AAN)r2   r3   r4   rX   r[   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.
    rB   c                     ||dk    st          |t                    si }t                                          ||||           d S )NrB   )r)   r   r   r   )r   rJ   rF   rG   rK   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valuesrH   )r   rJ   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 )Nrl   .)rK   _is_jsonfieldF)rl   rF   getr)   rG   r   hasattrri   rI   rM   r]   rA   )r   keyrJ   rF   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 rV   )
rF   itemsr)   r>   r   r   r   rD   rG   rE   )r   rm   rt   rF   s       r   rX   zNestedBoundField.as_form_field   s    ***,, 	\ 	\JC%$.. \#s%*]eunnbb9UZK[K[s~~dk64;MMMr   rY   )	r2   r3   r4   r5   r   rn   rv   rX   r8   r9   s   @r   ri   ri   v   s~         7 7 7 7 7 7
) ) )G G GN N N N N N Nr   ri   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                 :    || _         t                      | _        d S r   )r   r   rl   )r   r   s     r   r   zBindingDict.__init__   s    $!mmr   c                 R    || j         |<   |                    || j                   d S )N)rH   parent)rl   bindr   )r   rt   rJ   s      r   __setitem__zBindingDict.__setitem__   s,     C

c$/
:::::r   c                     | j         |         S r   rl   r   rt   s     r   rv   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   )iterrl   r   s    r   rn   zBindingDict.__iter__   s    DK   r   c                 *    t          | j                  S r   )lenrl   r   s    r   __len__zBindingDict.__len__   s    4;r   c                 @    t                               | j                  S r   )r   r    rl   r   s    r   r    zBindingDict.__repr__   s    }}T[)))r   N)r2   r3   r4   r5   r   r   rv   r   rn   r   r    r[   r   r   rz   rz      s         $ $ $; ; ;       ! ! !     * * * * *r   rz   )r6   collectionsr   collections.abcr   r   django.utils.encodingr   rest_framework.utilsr   r	   r>   r;   rA   r]   ri   rz   r[   r   r   <module>r      sz   



 # # # # # # 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   