
    g                     z    d Z ddlmZ ddlmZ ddlmZmZ ddlm	Z	  G d dej                        Z
edd	d
Zd Zy)z
A Python "serializer". Doesn't do much serializing per se -- just converts to
and from basic Python data types (lists, dicts, strings, etc.). Useful as a basis for
other serializers.
    )apps)base)DEFAULT_DB_ALIASmodels)is_protected_typec                   P    e Zd ZdZdZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zy)
Serializerz7
    Serialize a QuerySet to basic Python objects.
    Tc                      d | _         g | _        y N)_currentobjectsselfs    v/var/www/python.vincentserveurtest.ovh/public_html/venv/lib/python3.12/site-packages/django/core/serializers/python.pystart_serializationzSerializer.start_serialization   s        c                      y r    r   s    r   end_serializationzSerializer.end_serialization   s    r   c                     i | _         y r   )r   r   objs     r   start_objectzSerializer.start_object   s	    r   c                 f    | j                   j                  | j                  |             d | _        y r   )r   appendget_dump_objectr   r   s     r   
end_objectzSerializer.end_object   s&    D0056r   c                     dt        |j                        i}| j                  rt        |d      s)| j	                  ||j                  j
                        |d<   | j                  |d<   |S )Nmodelnatural_keypkfields)str_metause_natural_primary_keyshasattr_value_from_fieldr!   r   )r   r   datas      r   r   zSerializer.get_dump_object"   sV    SYY(,,GC4O//SYY\\BDJXr   c                 `    |j                  |      }t        |      r|S |j                  |      S r   )value_from_objectr   value_to_string)r   r   fieldvalues       r   r'   zSerializer._value_from_field)   s1    '', *%0uPe6K6KC6PPr   c                 V    | j                  ||      | j                  |j                  <   y r   )r'   r   name)r   r   r,   s      r   handle_fieldzSerializer.handle_field0   s!    $($:$:3$Fejj!r   c                 
   | j                   rLt        |j                  j                  d      r,t	        ||j
                        }|r|j                         }nd }n| j                  ||      }|| j                  |j
                  <   y )Nr    )	use_natural_foreign_keysr&   remote_fieldr   getattrr/   r    r'   r   )r   r   r,   relatedr-   s        r   handle_fk_fieldzSerializer.handle_fk_field3   so    ((W$$m.
 c5::.G++-**36E$)ejj!r   c                     |j                   j                  j                  j                  r j                  r't        |j                   j                  d      rd }d }n fd}d }t        |di       j                  |j                   |||            }|D cg c]
  } ||       c} j                  |j                  <   y y c c}w )Nr    c                 "    | j                         S r   )r    )r-   s    r   	m2m_valuez.Serializer.handle_m2m_field.<locals>.m2m_valueF   s     ,,..r   c                 J    t        | |j                        j                         S r   )r4   r/   iteratorr   r,   s     r   queryset_iteratorz6Serializer.handle_m2m_field.<locals>.queryset_iteratorI   s    "3

3<<>>r   c                 P    j                  | | j                  j                        S r   )r'   r$   r!   )r-   r   s    r   r9   z.Serializer.handle_m2m_field.<locals>.m2m_valueN   s    11%HHr   c                     t        | |j                        j                  d       j                  d      j	                         S )Nr!   )r4   r/   select_relatedonlyr;   r<   s     r   r=   z6Serializer.handle_m2m_field.<locals>.queryset_iteratorQ   s/    UZZ0'-d!	r   _prefetched_objects_cache)r3   throughr$   auto_createdr2   r&   r   r4   getr/   r   )r   r   r,   r9   r=   m2m_iterr5   s   `      r   handle_m2m_fieldzSerializer.handle_m2m_field@   s    %%++88,,""((-2/?
I s$?DHH

!#u-H LT(T87);8(TDMM%**%9 98 )Us   Cc                     | j                   S r   )r   r   s    r   getvaluezSerializer.getvalue_   s    ||r   N)__name__
__module____qualname____doc__internal_use_onlyr   r   r   r   r   r'   r0   r6   rG   rI   r   r   r   r	   r	      sD     QG*U>r   r	   F)usingignorenonexistentc          
   +   .  K   |j                  dd      }i }| D ]#  }	 t        |d         }i }d|v rV	 |j                  j
                  j                  |j                  d            ||j                  j
                  j                  <   i }
i }||vr5|j                  j                         D ch c]  }|j                   c}||<   ||   }|d   j                         D ],  \  }}|r||vr|j                  j                  |      }|j                  rft!        |j                  t"        j$                        rB	 t        j&                  ||||      }|t        j,                  k(  r|||<   ||
|j                  <   |j                  rgt!        |j                  t"        j.                        rC	 t        j0                  ||||      }|t        j,                  k(  r|||<   |||j                  <   	 |j                  |      ||j                  <   / t        j2                  |||      }t        j4                  ||
|       & y# t        j                  $ r |rY @ w xY w# t        $ r9}	t        j                  j                  |	|d   |j                  d      d      d}	~	ww xY wc c}w # t        j(                  $ rM}	t        j                  j                  |	j*                  |d   |j                  d      |	j
                        d}	~	ww xY w# t        $ r9}	t        j                  j                  |	|d   |j                  d      |      d}	~	ww xY w# t        $ r9}	t        j                  j                  |	|d   |j                  d      |      d}	~	ww xY ww)z
    Deserialize simple Python objects back into Django ORM instances.

    It's expected that you pass the Python objects themselves (instead of a
    stream or a string) to the constructor
    handle_forward_referencesFr   r!   Nr"   )pop
_get_modelr   DeserializationErrorr$   r!   	to_pythonrE   attname	ExceptionWithData
get_fieldsr/   items	get_fieldr3   
isinstancer   ManyToManyReldeserialize_m2m_valuesM2MDeserializationErrororiginal_excDEFER_FIELDManyToOneReldeserialize_fk_valuebuild_instanceDeserializedObject)object_listrO   rP   optionsrR   field_names_cachedModelr(   em2m_datadeferred_fieldsffield_names
field_namefield_valuer,   valuesr-   r   s                       r   Deserializerrt   c   sY     !(,G O	qz*E 19/4{{~~/G/Gd/TU[[^^++,
 ))8=8N8N8P'Q8P18P'Qe$'. (){'8'8':#J Z{%BKK))*5E !!j""F$8$8'!88{E3LF T----8OE*+1HUZZ(##
""F$7$7) 55{E3LE D,,,-8OE**/D'',{'CD$U (;` !!%u5%%c8_EEU  (( 	 		  //88qz155;  (R& 33 33<<'
AEE$K   ! 33<<1W:quuT{K  ! 33<<1W:quuT{K s   NINAI$N,J#?A7N7J(AN)L*N,M
7NININ	J '4JJ  N(L;ALLN	M4MMN	N4NNNc                     	 t        j                  |       S # t        t        f$ r t	        j
                  d| z        w xY w)z6Look up a model from an "app_label.model_name" string.zInvalid model identifier: '%s')r   	get_modelLookupError	TypeErrorr   rU   )model_identifiers    r   rT   rT      sG    
~~.//# 
'',/??
 	

s    (?N)rM   django.appsr   django.core.serializersr   	django.dbr   r   django.utils.encodingr   r	   rt   rT   r   r   r   <module>r~      s?     ( . 3S Sn +eVFr
r   