
    j"                         S r SSKJr  SSKJr  SSKJrJr  SSKJ	r	  SSK
Jr   " S S\R                  5      r " S	 S
\R                  5      rg)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)CompositePrimaryKey)is_protected_typec                   X    \ rS rSrSrSrS rS rS rS r	S r
S	 rS
 rS rS rS rSrg)
Serializer   z/
Serialize a QuerySet to basic Python objects.
Tc                      S U l         / U l        g N_currentobjectsselfs    V/var/www/html/KUNJ/venv/lib/python3.13/site-packages/django/core/serializers/python.pystart_serializationSerializer.start_serialization   s        c                     g r    r   s    r   end_serializationSerializer.end_serialization   s    r   c                     0 U l         g r   )r   r   objs     r   start_objectSerializer.start_object   s	    r   c                 f    U R                   R                  U R                  U5      5        S U l        g r   )r   appendget_dump_objectr   r   s     r   
end_objectSerializer.end_object   s&    D0056r   c                     S[        UR                  5      0nU R                  (       a  U R                  U5      (       d(  U R	                  XR                  R
                  5      US'   U R                  US'   U$ Nmodelpkfields)str_metause_natural_primary_keys_resolve_natural_key_value_from_fieldr(   r   )r   r   datas      r   r"   Serializer.get_dump_object#   s[    SYY(,,D4M4Mc4R4R//YY\\BDJXr   c                     [        U[        5      (       a!  U Vs/ s H  o0R                  X5      PM     sn$ UR                  U5      n[	        U5      (       a  U$ UR                  U5      $ s  snf r   )
isinstancer   r.   value_from_objectr   value_to_string)r   r   fieldfvalues        r   r.   Serializer._value_from_field*   sf    e011<ABEq**32EBB'', *%00uPe6K6KC6PP Cs   A+c                 T    U R                  X5      U R                  UR                  '   g r   )r.   r   name)r   r   r5   s      r   handle_fieldSerializer.handle_field3   s    $($:$:3$Fejj!r   c                     U R                   (       a  U R                  X5      =n(       a  UnOU R                  X5      nX@R                  UR                  '   g r   )use_natural_foreign_keys_resolve_fk_natural_keyr.   r   r:   )r   r   r5   natural_key_valuer7   s        r   handle_fk_fieldSerializer.handle_fk_field6   sG    ((!%!=!=c!III%E**36E$)ejj!r   c                   ^  UR                   R                  R                  R                  (       a  T R                  (       a4  T R                  UR                   R                  5      (       a
  U 4S jnS nO	U 4S jnS n[        US0 5      R                  UR                  U" X5      5      nU Vs/ s H
  oc" U5      PM     snT R                  UR                  '   g g s  snf )Nc                    > U R                  5       =n(       a  U$ TR                  X R                  R                  5      $ r   )natural_keyr.   r+   r(   )r7   naturalr   s     r   	m2m_value.Serializer.handle_m2m_field.<locals>.m2m_valueE   s5    "'"3"3"55w5&#55e[[^^LLr   c                 p   [        XR                  5      n[        USS 5      (       a  SOS nUR                  5       nUR                  (       dZ  UR                  R
                  =(       d)    UR                  R                  R                  =(       d    / nUR
                  " / UQSP76 nUR                  U5      $ )Nprefetch_cache_name  r(   )
getattrr:   alltotally_orderedqueryorder_byr'   r+   orderingiterator)r   r5   attr
chunk_size	query_setcurrent_orderings         r   queryset_iterator6Serializer.handle_m2m_field.<locals>.queryset_iteratorK   s    "3

3D '.CT J JPT  !%
I$44%OO44 "(44=="! )
 %.$6$6$O8H$O$$O	$--j99r   c                 N   > TR                  X R                  R                  5      $ r   )r.   r+   r(   )r7   r   s    r   rG   rH   \   s    11%HHr   c                    [        XR                  5      R                  S 5      R                  S5      nUR                  (       dZ  UR
                  R                  =(       d)    UR                  R                  R                  =(       d    / nUR                  " / UQSP76 nUR                  (       a  SOS nUR                  US9$ )Nr(   rK   )rT   )rL   r:   select_relatedonlyrN   rO   rP   r'   r+   rQ   _prefetch_related_lookupsrR   )r   r5   rU   rV   rT   s        r   rW   rX   _   s     'ZZ 8 G G M R RSW XI$44%OO44 "(44=="! )
 %.$6$6$O8H$O$$O	)2)L)LRVJ$---DDr   _prefetched_objects_cache)remote_fieldthroughr+   auto_createdr>   _model_supports_natural_keyr'   rL   getr:   r   )r   r   r5   rG   rW   m2m_iterrelateds   `      r   handle_m2m_fieldSerializer.handle_m2m_field?   s    %%++88,,1Q1Q""((2 2M:"I
E s$?DHH

!#-H LT(T87);8(TDMM%**%_ 9^ )Us   0Cc                     U R                   $ r   )r   r   s    r   getvalueSerializer.getvalueq   s    ||r   r   N)__name__
__module____qualname____firstlineno____doc__internal_use_onlyr   r   r   r#   r"   r.   r;   rA   rf   ri   __static_attributes__r   r   r   r
   r
      sE     QG*0Udr   r
   c                   d   ^  \ rS rSrSr\SS.U 4S jjrS rS rS r	S	 r
S
 r\S 5       rSrU =r$ )Deserializeru   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
F)usingignorenonexistentc                   > [         TU ]  " U40 UD6  UR                  SS5      U l        X l        X0l        0 U l        S U l        g )Nhandle_forward_referencesF)super__init__poprx   ru   rv   field_names_cache	_iterator)r   object_listru   rv   options	__class__s        r   rz   Deserializer.__init__}   sF     	00)05PRW)X&
!2!#r   c              #   h   #    U R                    H  nU R                  U5       S h  vN   M     g  N	7fr   )stream_handle_objectr   s     r   __iter__Deserializer.__iter__   s*     ;;C**3/// /s   $20
2c                 f    U R                   c  [        U 5      U l         [        U R                   5      $ r   )r}   iternextr   s    r   __next__Deserializer.__next__   s&    >>!!$ZDNDNN##r   c           	   #     #    0 n0 n0 n U R                  US   5      nSU;   aU   UR                  R
                  R                  UR                  S5      5      X%R                  R
                  R                  '   XPR                  ;  aA  UR                  R                  5        Vs1 s H  owR                  iM     snU R                  U'   U R                  U   nUS   R                  5        GHE  u  pU R                  (       a  X;  a  M  UR                  R                  U	5      nUR                   (       ae  [#        UR                   [$        R&                  5      (       a<   U R)                  X5      nU[        R*                  :X  a  XU'   M  XUR                  '   M  UR                   (       ag  [#        UR                   [$        R0                  5      (       a>   U R3                  X5      nU[        R*                  :X  a  XU'   GM  XUR                  '   GM'   UR                  U
5      X+R                  '   GMH     [        R4                  " XRU R6                  5      n[        R8                  " XU5      v   g ! [        R                   a    U R                  (       a   g e f = f! [         a8  n[        R                  R                  XaS   UR                  S5      S 5      eS nAff = fs  snf ! [        R,                   aM  n[        R                  R                  UR.                  US   UR                  S5      UR
                  5      eS nAff = f! [         a8  n[        R                  R                  XaS   UR                  S5      U
5      eS nAff = f! [         a8  n[        R                  R                  XaS   UR                  S5      U
5      eS nAff = f7fr&   )_get_model_from_noder   DeserializationErrorrv   r+   r(   	to_pythonrc   attname	ExceptionWithDatar|   
get_fieldsr:   items	get_fieldr_   r2   r   ManyToManyRel_handle_m2m_field_nodeDEFER_FIELDM2MDeserializationErrororiginal_excManyToOneRel_handle_fk_field_nodebuild_instanceru   DeserializedObject)r   r   r/   m2m_datadeferred_fieldsModeler6   field_names
field_namefield_valuer5   valuesr7   model_instances                  r   r   Deserializer._handle_object   s1    	--c'l;E
 3;/4{{~~/G/GPT/V[[^^++, ...=B[[=S=S=U,V=UVV=U,VD""5),,U3 (+8}':':'<#J%%**GKK))*5E !!j""F$8$8' '	!88LF!1!111<./5, ##
""F$7$7) )	 66uJE 0 001<..3U]]+',{'CD$Q (=\ ,,U$**E%%nPPA (( 	%%	  //887|SWWT]D  -W* 33 33<<GcggdmQTT  ! 33<<w<  ! 33<<w< s   OI0 OAJ 9+O$K!9B%O)K&O
K&<O)M
>OM
ON0A O0%JOJO
K&3KKO&M:AMMO

N3NNO
O3OOOc                 Z    [         R                  " XU R                  U R                  5      $ r   )r   deserialize_m2m_valuesru   rx   r   r5   r   s      r   r   #Deserializer._handle_m2m_field_node   s&    **

D,J,J
 	
r   c                 Z    [         R                  " XU R                  U R                  5      $ r   )r   deserialize_fk_valueru   rx   r   s      r   r   "Deserializer._handle_fk_field_node   s&    ((

D,J,J
 	
r   c                      [         R                  " U 5      $ ! [        [        4 a    [        R
                  " SU  35      ef = f)z6Look up a model from an "app_label.model_name" string.zInvalid model identifier: )r   	get_modelLookupError	TypeErrorr   r   )model_identifiers    r   r   !Deserializer._get_model_from_node   sJ    	>>"233Y' 	++,-=,>? 	s	    *A)r}   r|   rx   rv   ru   )rk   rl   rm   rn   ro   r   rz   r   r   r   r   r   staticmethodr   rq   __classcell__)r   s   @r   rs   rs   u   sI     %5 0$
HQT



  r   rs   N)ro   django.appsr   django.core.serializersr   	django.dbr   r   django.db.modelsr   django.utils.encodingr   r
   rs   r   r   r   <module>r      sB     ( . 0 3d dNw4$$ wr   