
    R1i$                         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y)    N)OrderedDict)MappingMutableMapping)	force_str)jsonc                   f     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                 P    |j                  d      | _        t        |   |i | y N
serializerpopr   super__init__selfargskwargs	__class__s      k/home/cursorai/projects/iching/venv/lib/python3.12/site-packages/rest_framework/utils/serializer_helpers.pyr   zReturnDict.__init__   %     **\2$)&)    c                 0    t        | | j                        S N)r   )r	   r   r   s    r   copyzReturnDict.copy   s    $4??;;r   c                 ,    t         j                  |       S N)dict__repr__r   s    r   r    zReturnDict.__repr__       }}T""r   c                 &    t         t        |       ffS r   )r   r   s    r   
__reduce__zReturnDict.__reduce__        tDzm$$r   )   	   c                     t        |t              st        S | j                  | | j                        }|j                  |       |S r   
isinstancer   NotImplementedr   r   updater   othernews      r   __or__zReturnDict.__or__"   s9    eT*%%..$//.BCJJuJr   c                     t        |t              st        S | j                  || j                        }|j                  |        |S r   r(   r,   s      r   __ror__zReturnDict.__ror__)   s9    eT*%%..4??.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                 P    |j                  d      | _        t        |   |i | y r   r   r   s      r   r   zReturnList.__init__8   r   r   c                 ,    t         j                  |       S r   )listr    r   s    r   r    zReturnList.__repr__<   r!   r   c                 &    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                   :    e Zd ZdZddZd Zed        Zd Zd Z	y)	
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                 d    || _         || _        || _        || _        || j                  z   | _        y r   )_field_prefixvalueerrors
field_namename)r   fieldrE   rF   prefixs        r   r   zBoundField.__init__L   s.    
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                 j    d| j                   j                  d| j                  d| j                  dS )N<z value=z errors=>)r   r2   rE   rF   r   s    r   r    zBoundField.__repr__Z   s%    NN##TZZ
 	
r   c                     | j                   | j                   du rdn| j                   }| j                  | j                  || j                  | j                        S NF )rE   r   rC   rF   rD   r   rE   s     r   as_form_fieldzBoundField.as_form_field_   sB    zz)TZZ5-@tzz~~dkk5$++t||LLr   NrV   )
r2   r3   r4   r5   r   rN   propertyrP   r    rX    r   r   rA   rA   E   s0    -/ % %

Mr   rA   c                       e Zd Zd Zy)JSONBoundFieldc                 
   | j                   }t        |dd      s$	 t        j                  | j                   ddd      }| j                  | j                  || j                  | j                        S # t        t
        f$ r Y Cw xY w)Nis_json_stringFT   ),z: )	sort_keysindent
separators)
rE   rL   r   dumps	TypeError
ValueErrorr   rC   rF   rD   rW   s     r   rX   zJSONBoundField.as_form_fielde   sy    

 u.6

JJ"*	 ~~dkk5$++t||LL z* s   #A0 0BBN)r2   r3   r4   rX   r[   r   r   r]   r]   d   s    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.
    c                 \    ||dk(  st        |t              si }t        |   ||||       y )NrV   )r)   r   r   r   )r   rI   rE   rF   rJ   r   s        r   r   zNestedBoundField.__init__}   s/    =ERKz%/IEvv6r   c              #   l   K   | j                   j                         D ]  }| |j                       y wr   )fieldsvaluesrG   )r   rI   s     r   __iter__zNestedBoundField.__iter__   s.     [['')Eu''(( *s   24c                    | j                   |   }| j                  r| j                  j                  |      nd }t        | j                  t
              r| j                  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   .)rJ   _is_jsonfieldF)rl   rE   getr)   rF   r   hasattrri   rH   rL   r]   rA   )r   keyrI   rE   errors        r   __getitem__zNestedBoundField.__getitem__   s    C '+zz

s#t(24;;(E$45(##E5%		CPPUOU3!%dii#oNN%dii#oFFr   c                    i }| j                   j                         D ]7  \  }}t        |t        t        f      r|||<   "||du rdn
t        |      ||<   9 | j                  | j                  || j                  | j                        S rU   )
rE   itemsr)   r>   r   r   r   rC   rF   rD   )r   rm   rt   rE   s       r   rX   zNestedBoundField.as_form_field   sw    ****,JC%$.#s%*]eunb9UZK[s	 -
 ~~dkk64;;MMr   rY   )	r2   r3   r4   r5   r   rn   rv   rX   r8   r9   s   @r   ri   ri   v   s    7
)GNr   ri   c                   :    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
y	)
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                 0    || _         t               | _        y r   )r   r   rl   )r   r   s     r   r   zBindingDict.__init__   s    $!mr   c                 \    || j                   |<   |j                  || j                         y )N)rG   parent)rl   bindr   )r   rt   rI   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                   |= y r   r   r   s     r   __delitem__zBindingDict.__delitem__   s    KKr   c                 ,    t        | j                        S r   )iterrl   r   s    r   rn   zBindingDict.__iter__   s    DKK  r   c                 ,    t        | j                        S r   )lenrl   r   s    r   __len__zBindingDict.__len__   s    4;;r   c                 @    t         j                  | 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      sb    
 # 3 + %$ $N% %(M M>MZ M$!Nz !NH*. *r   