Ë
    ôrªiž  ã                   óœ   — d Z ddlm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j                  «      Z G d	„ d
ej                  «      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)ÚCompositePrimaryKey)Ú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    úQ/var/www/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   € Øœ˜SŸY™Y›Ð(ˆØ×,Ò,´G¸CÀÔ4OØ×/Ñ/°°S·Y±Y·\±\ÓBˆD�‰JØŸ™ˆˆX‰Øˆr   c                 óÊ   — t        |t        «      r |D �cg c]  }| j                  ||«      ‘Œ c}S |j                  |«      }t	        |«      r|S |j                  |«      S c c}w r   )Ú
isinstancer   r(   Úvalue_from_objectr   Úvalue_to_string)r   r   ÚfieldÚfÚvalues        r   r(   zSerializer._value_from_field*   sd   € Ü�eÔ0Ô1Ù<AÓB¹E°q�D×*Ñ*¨3°Õ2¸EÑBÐBØ×'Ñ'¨Ó,ˆô *¨%Ô0ˆuÐP°e×6KÑ6KÈCÓ6PÐPùò Cs   •A c                 óV   — | j                  ||«      | j                  |j                  <   y r   )r(   r   Úname)r   r   r.   s      r   Úhandle_fieldzSerializer.handle_field3   s!   € Ø$(×$:Ñ$:¸3ÀÓ$Fˆ�‰�e—j‘jÒ!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    Úgetattrr2   r!   r(   r   )r   r   r.   Úrelatedr0   s        r   Úhandle_fk_fieldzSerializer.handle_fk_field6   so   € Ø×(Ò(¬WØ×Ñ×$Ñ$ mô.
ô ˜c 5§:¡:Ó.ˆGÙØ×+Ñ+Ó-‘à‘à×*Ñ*¨3°Ó6ˆEØ$)ˆ�‰�e—j‘jÒ!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!   )r0   s    r   Ú	m2m_valuez.Serializer.handle_m2m_field.<locals>.m2m_valueI   s   € Ø ×,Ñ,Ó.Ð.r   c                 ór   — t        | |j                  «      }t        |dd «      rdnd }|j                  |«      S )NÚprefetch_cache_nameéÐ  )r7   r2   Úiterator)r   r.   ÚattrÚ
chunk_sizes       r   Úqueryset_iteratorz6Serializer.handle_m2m_field.<locals>.queryset_iteratorL   s:   € Ü" 3¨¯
©
Ó3�Dä '¨Ð.CÀTÔ J™ÐPTð ð  Ÿ=™=¨Ó4Ð4r   c                 óP   •— ‰j                  | | j                  j                  «      S r   )r(   r%   r"   )r0   r   s    €r   r<   z.Serializer.handle_m2m_field.<locals>.m2m_valueU   s   ø€ Ø×1Ñ1°%¸¿¹¿¹ÓHÐHr   c                 ó®   — t        | |j                  «      j                  d «      j                  d«      }|j                  rdnd }|j                  |¬«      S )Nr"   r?   )rB   )r7   r2   Úselect_relatedÚonlyÚ_prefetch_related_lookupsr@   )r   r.   Ú	query_setrB   s       r   rC   z6Serializer.handle_m2m_field.<locals>.queryset_iteratorX   sM   € Ü '¨¨U¯Z©ZÓ 8× GÑ GÈÓ M× RÑ RÐSWÓ X�IØ)2×)LÒ)L¡ÐRV�JØ$×-Ñ-¸Ð-ÓDÐDr   Ú_prefetched_objects_cache)r6   Úthroughr%   Úauto_createdr5   r'   r    r7   Úgetr2   r   )r   r   r.   r<   rC   Úm2m_iterr8   s   `      r   Úhandle_m2m_fieldzSerializer.handle_m2m_fieldC   s·   ø€ Ø×Ñ×%Ñ%×+Ñ+×8Ò8Ø×,Ò,´Ø×"Ñ"×(Ñ(¨-ô2ò/ó5ôIòEô
 ˜sÐ$?ÀÓD×HÑHØ—
‘
Ù! # uÓ-óˆHñ LTÓ(TÉ8À©°7Õ);È8Ñ(TˆD�M‰M˜%Ÿ*™*Ò%ð; 9ùò: )Us   ÂCc                 ó   — | j                   S r   )r   r   s    r   ÚgetvaluezSerializer.getvaluec   s   € Ø�|‰|Ðr   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úinternal_use_onlyr   r   r   r   r   r(   r3   r9   rO   rQ   r   r   r   r
   r
      sE   „ ñð ÐòòòòòòQòGò*òUó@r   r
   c                   óX   ‡ — e Zd ZdZeddœˆ fd„
Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
ed
„ «       Zˆ xZS )ÚDeserializerzÃ
    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        ‰| �  |fi |¤Ž |j                  dd«      | _        || _        || _        i | _        d | _        y )NÚhandle_forward_referencesF)ÚsuperÚ__init__Úpopr\   rY   rZ   Úfield_names_cacheÚ	_iterator)r   Úobject_listrY   rZ   ÚoptionsÚ	__class__s        €r   r^   zDeserializer.__init__o   sJ   ø€ ô 	‰Ñ˜Ñ0¨Ò0Ø)0¯©Ð5PÐRWÓ)XˆÔ&ØˆŒ
Ø!2ˆÔØ!#ˆÔØˆ�r   c              #   ód   K  — | j                   D ]  }| j                  |«      E d {  –—†  Œ y 7 Œ­wr   )ÚstreamÚ_handle_objectr   s     r   Ú__iter__zDeserializer.__iter__y   s+   è ø€ Ø—;”;ˆCØ×*Ñ*¨3Ó/×/Ñ/ñ Ø/ús   ‚$0¦.§0c                 ód   — | j                   €t        | «      | _         t        | j                   «      S r   )ra   ÚiterÚnextr   s    r   Ú__next__zDeserializer.__next__}   s&   € Ø�>‰>Ð!Ü! $›ZˆDŒNÜ�D—N‘NÓ#Ð#r   c           	   #   ó^  K  — i }i }i }	 | j                  |d   «      }d|v rV	 |j                  j
                  j                  |j                  d«      «      ||j                  j
                  j                  <   || j                  vr?|j                  j                  «       D �ch c]  }|j                  ’Œ c}| j                  |<   | j                  |   }|d   j                  «       D �]*  \  }	}
| j                  r|	|vrŒ|j                  j                  |	«      }|j                   r`t#        |j                   t$        j&                  «      r<	 | j)                  ||
«      }|t        j*                  k(  r|
||<   n|||j                  <   ŒŸ|j                   rat#        |j                   t$        j0                  «      r=	 | j3                  ||
«      }|t        j*                  k(  r|
||<   n|||j                  <   �Œ	 |j                  |
«      ||j                  <   �Œ- t        j4                  ||| j6                  «      }t        j8                  |||«      –— y # t        j                  $ r | j                  rY 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)Nr    r"   r#   )Ú_get_model_from_noder   ÚDeserializationErrorrZ   r%   r"   Ú	to_pythonrM   ÚattnameÚ	ExceptionÚWithDatar`   Ú
get_fieldsr2   ÚitemsÚ	get_fieldr6   r+   r   ÚManyToManyRelÚ_handle_m2m_field_nodeÚDEFER_FIELDÚM2MDeserializationErrorÚoriginal_excÚManyToOneRelÚ_handle_fk_field_nodeÚbuild_instancerY   ÚDeserializedObject)r   r   r)   Úm2m_dataÚdeferred_fieldsÚModelÚer/   Úfield_namesÚ
field_nameÚfield_valuer.   Úvaluesr0   Úmodel_instances                  r   rg   zDeserializer._handle_object‚   sL  è ø€ ØˆØˆØˆð	Ø×-Ñ-¨c°'©lÓ;ˆEð
 �3‰;ðØ/4¯{©{¯~©~×/GÑ/GÈÏÉÐPTËÓ/V��U—[‘[—^‘^×+Ñ+Ñ,ð ˜×.Ñ.Ñ.Ø=B¿[¹[×=SÑ=SÔ=UÓ,VÑ=U¸¨Q¯V«VÐ=UÑ,VˆD×"Ñ" 5Ñ)Ø×,Ñ,¨UÑ3ˆð (+¨8¡}×':Ñ':×'<Ñ#ˆJ˜Ø×%Ò%¨*¸KÑ*Gàà—K‘K×)Ñ)¨*Ó5ˆEð ×!Ò!¤jØ×"Ñ"¤F×$8Ñ$8ô'ð	Ø!×8Ñ8¸ÀÓL�FØ¤×!1Ñ!1Ò1Ø1<˜¨Ò.à/5˜ §¡Ñ,øð ×#Ò#¬
Ø×"Ñ"¤F×$7Ñ$7ô)ð	Ø ×6Ñ6°u¸kÓJ�EØ¤× 0Ñ 0Ò0Ø1<˜¨Ò.à.3˜˜UŸ]™]Ñ+ùðØ',§¡°{Ó'C�D˜Ÿ™Ó$ðQ (=ô\ ×,Ñ,¨U°D¸$¿*¹*ÓEˆÜ×%Ñ% n°hÀÓPÓPøôA ×(Ñ(ò 	Ø×%Ò%ÙØð	ûô ò Ü×/Ñ/×8Ñ8Ø�s˜7‘| S§W¡W¨T£]°Dóð ûðüò -Wøô* ×3Ñ3ò Ü×3Ñ3×<Ñ<ØŸ™¨¨G©°c·g±g¸d³mÀQÇTÁTóð ûðûô !ò Ü×3Ñ3×<Ñ<Ø˜3˜w™<¨¯©°«¸óð ûðûô !ò Ü×3Ñ3×<Ñ<Ø˜3˜w™<¨¯©°«¸óð ûðüsÅ   ‚N-ŠI žN-£AI6 Á8*N-Â"J;Â5BN-Å:K Æ1N-Æ7:L#Ç1N-Ç4M(È>N-ÉI3É/N-É1I3É3N-É6	J8É?4J3Ê3J8Ê8N-Ë L ËALÌL Ì N-Ì#	M%Ì,4M Í M%Í%N-Í(	N*Í14N%Î%N*Î*N-c                 óZ   — t        j                  ||| j                  | j                  «      S r   )r   Údeserialize_m2m_valuesrY   r\   ©r   r.   r†   s      r   rx   z#Deserializer._handle_m2m_field_nodeÌ   s(   € Ü×*Ñ*Ø�; §
¡
¨D×,JÑ,Jó
ð 	
r   c                 óZ   — t        j                  ||| j                  | j                  «      S r   )r   Údeserialize_fk_valuerY   r\   r‹   s      r   r}   z"Deserializer._handle_fk_field_nodeÑ   s(   € Ü×(Ñ(Ø�; §
¡
¨D×,JÑ,Jó
ð 	
r   c                 ó„   — 	 t        j                  | «      S # t        t        f$ r t	        j
                  d| › �«      ‚w xY w)z6Look up a model from an "app_label.model_name" string.zInvalid model identifier: )r   Ú	get_modelÚLookupErrorÚ	TypeErrorr   ro   )Úmodel_identifiers    r   rn   z!Deserializer._get_model_from_nodeÖ   sJ   € ð	Ü—>‘>Ð"2Ó3Ð3øÜœYÐ'ò 	Ü×+Ñ+Ø,Ð-=Ð,>Ð?óð ð	ús   ‚ —(?)rR   rS   rT   rU   r   r^   rh   rl   rg   rx   r}   Ústaticmethodrn   Ú__classcell__)rd   s   @r   rX   rX   g   sD   ø„ ñð %5Èöò0ò$ò
HQòT
ò

ð
 ñó ôr   rX   N)rU   Údjango.appsr   Údjango.core.serializersr   Ú	django.dbr   r   Údjango.db.modelsr   Údjango.utils.encodingr   r
   rX   r   r   r   Ú<module>rš      sB   ðñõ Ý (ß .Ý 0Ý 3ôV�—‘ô Vôrw�4×$Ñ$õ wr   