
    LȂi                         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    OD:\sksbv-state-backend\venv\Lib\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S5      (       d(  U R	                  XR                  R
                  5      US'   U R                  US'   U$ )Nmodelnatural_keypkfields)str_metause_natural_primary_keyshasattr_value_from_fieldr(   r   )r   r   datas      r   r"   Serializer.get_dump_object#   sW    SYY(,,GC4O4O//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                   (       aU  [        UR                  R                  S5      (       a0  [	        XR
                  5      nU(       a  UR                  5       nOS nOU R                  X5      nX@R                  UR
                  '   g )Nr'   )	use_natural_foreign_keysr-   remote_fieldr&   getattrr:   r'   r.   r   )r   r   r5   relatedr7   s        r   handle_fk_fieldSerializer.handle_fk_field6   sn    ((W$$m.
 .
 c::.G++-**36E$)ejj!r   c                   ^  UR                   R                  R                  R                  (       a  T R                  (       a,  [        UR                   R                  S5      (       a  S 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 )Nr'   c                 "    U R                  5       $ r   )r'   )r7   s    r   	m2m_value.Serializer.handle_m2m_field.<locals>.m2m_valueI   s     ,,..r   c                 z    [        XR                  5      n[        USS 5      (       a  SOS nUR                  U5      $ )Nprefetch_cache_name  )r@   r:   iterator)r   r5   attr
chunk_sizes       r   queryset_iterator6Serializer.handle_m2m_field.<locals>.queryset_iteratorL   s;    "3

3D '.CT J JPT   ==44r   c                 N   > TR                  X R                  R                  5      $ r   )r.   r+   r(   )r7   r   s    r   rF   rG   U   s    11%HHr   c                     [        XR                  5      R                  S 5      R                  S5      nUR                  (       a  SOS nUR                  US9$ )Nr(   rJ   )rM   )r@   r:   select_relatedonly_prefetch_related_lookupsrK   )r   r5   	query_setrM   s       r   rN   rO   X   sK     'ZZ 8 G G M R RSW XI)2)L)LRVJ$---DDr   _prefetched_objects_cache)r?   throughr+   auto_createdr>   r-   r&   r@   getr:   r   )r   r   r5   rF   rN   m2m_iterrA   s   `      r   handle_m2m_fieldSerializer.handle_m2m_fieldC   s    %%++88,,""((-2 2/5IE
 s$?DHH

!#-H LT(T87);8(TDMM%**%; 9: )Us   (Cc                     U R                   $ r   )r   r   s    r   getvalueSerializer.getvaluec   s    ||r   r   N)__name__
__module____qualname____firstlineno____doc__internal_use_onlyr   r   r   r#   r"   r.   r;   rB   r[   r^   __static_attributes__r   r   r   r
   r
      sE     QG*U@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$ )Deserializerg   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__poprm   rj   rk   field_names_cache	_iterator)r   object_listrj   rk   options	__class__s        r   ro   Deserializer.__init__o   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__y   s*     ;;C**3/// /s   $20
2c                 f    U R                   c  [        U 5      U l         [        U R                   5      $ r   )rr   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                  ;  a@  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)Nr&   r(   r)   )_get_model_from_noder   DeserializationErrorrk   r+   r(   	to_pythonrY   attname	ExceptionWithDatarq   
get_fieldsr:   items	get_fieldr?   r2   r   ManyToManyRel_handle_m2m_field_nodeDEFER_FIELDM2MDeserializationErrororiginal_excManyToOneRel_handle_fk_field_nodebuild_instancerj   DeserializedObject)r   r   r/   m2m_datadeferred_fieldsModeler6   field_names
field_namefield_valuer5   valuesr7   model_instances                  r   ry   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I/ OAJ 9+O$K 8B%O)K%O	K%<O)M	=O M	ON/A O/%JOJO
K%3KKO%M9AMMO	
N3NNO
O3OOOc                 Z    [         R                  " XU R                  U R                  5      $ r   )r   deserialize_m2m_valuesrj   rm   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_valuerj   rm   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)rr   rq   rm   rk   rj   )r`   ra   rb   rc   rd   r   ro   rz   r   ry   r   r   staticmethodr   rf   __classcell__)ru   s   @r   rh   rh   g   sI     %5 0$
HQT



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