Ë
    bõhiø3  ã                   ó$  — d Z ddlZddlZddlmZ ddlmZ ddlmZ ddl	m
Z
  e«       Z G d„ d«      Z G d	„ d
e«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ d«      Z G d„ d«      Z G d„ d«      Z G d„ d«      Zd„ Zd„ Zd„ Zy)z;
Module for abstract serializer/unserializer base classes.
é    N)ÚStringIO)ÚObjectDoesNotExist)Úmodels)ÚRemovedInDjango50Warningc                   ó$   — e Zd ZdZdd„Zd„ Zd„ Zy)ÚPickleSerializerzd
    Simple wrapper around pickle to be used in signing.dumps()/loads() and
    cache backends.
    Nc                 óv   — t        j                  dt        «       |€t        j                  | _        y || _        y )NzTPickleSerializer is deprecated due to its security risk. Use JSONSerializer instead.)ÚwarningsÚwarnr   ÚpickleÚHIGHEST_PROTOCOLÚprotocol)Úselfr   s     úR/var/www/alwasay/venv/lib/python3.12/site-packages/django/core/serializers/base.pyÚ__init__zPickleSerializer.__init__   s0   € Ü�‰ð&ä$ô	
ð
 4<Ð3Cœ×/Ñ/ˆ�Èˆ�ó    c                 óB   — t        j                  || j                  «      S ©N)r   Údumpsr   ©r   Úobjs     r   r   zPickleSerializer.dumps   s   € Ü�|‰|˜C §¡Ó/Ð/r   c                 ó,   — t        j                  |«      S r   )r   Úloads)r   Údatas     r   r   zPickleSerializer.loads    s   € Ü�|‰|˜DÓ!Ð!r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   © r   r   r   r      s   „ ñó
Rò0ó"r   r   c                   ó   — e Zd ZdZy)ÚSerializerDoesNotExistz'The requested serializer was not found.N©r   r   r   r   r   r   r   r!   r!   $   s   „ Ù1àr   r!   c                   ó   — e Zd ZdZy)ÚSerializationErrorz,Something bad happened during serialization.Nr"   r   r   r   r$   r$   *   s   „ Ù6àr   r$   c                   ó    — e Zd ZdZed„ «       Zy)ÚDeserializationErrorz.Something bad happened during deserialization.c           
      ó*   —  | |›d|›d|›d|›d�«      S )zs
        Factory method for creating a deserialization error which has a more
        explanatory message.
        z: (z:pk=z) field_value was 'ú'r   )ÚclsÚoriginal_excÚmodelÚfkÚfield_values        r   ÚWithDatazDeserializationError.WithData3   s   € ñ âšU¢Bªð5ó
ð 	
r   N)r   r   r   r   Úclassmethodr.   r   r   r   r&   r&   0   s   „ Ù8àñ
ó ñ
r   r&   c                   ó   — e Zd ZdZd„ Zy)ÚM2MDeserializationErrorzCSomething bad happened during deserialization of a ManyToManyField.c                 ó    — || _         || _        y r   )r*   Úpk)r   r*   r3   s      r   r   z M2MDeserializationError.__init__B   s   € Ø(ˆÔØˆ�r   N)r   r   r   r   r   r   r   r   r1   r1   ?   s
   „ ÙMór   r1   c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚProgressBaréK   c                 ó.   — || _         || _        d| _        y )Nr   )ÚoutputÚtotal_countÚ	prev_done)r   r8   r9   s      r   r   zProgressBar.__init__J   s   € ØˆŒØ&ˆÔØˆ�r   c                 ó¶  — | j                   sy |dz  | j                  z  }|| j                  z  dz  }| j                  |k\  ry || _        | j                  dk(  rdnd}| j                   j	                  |dz   d|z  z   d| j                  |z
  z  z   dz   «       || j                  k(  r| j                   j	                  d	«       | j                   j                  «        y )
Néd   é   Ú úú[ú.ú ú]ú
)r8   r9   Úprogress_widthr:   ÚwriteÚflush)r   ÚcountÚpercÚdoneÚcrs        r   ÚupdatezProgressBar.updateO   sÍ   € Ø�{Š{ØØ�s‰{˜d×.Ñ.Ñ.ˆØ�d×)Ñ)Ñ)¨SÑ0ˆØ�>‰>˜TÒ!ØØˆŒØ×#Ñ# qÒ(‰R¨dˆØ�‰×ÑØ�‰H�s˜T‘zÑ! C¨4×+>Ñ+>ÀÑ+EÑ$FÑFÈÑLô	
ð �4×&Ñ&Ò&Ø�K‰K×Ñ˜dÔ#Ø�‰×ÑÕr   N)r   r   r   rE   r   rL   r   r   r   r5   r5   G   s   „ Ø€Nòó
r   r5   c                   ób   — e Zd ZdZdZeZeZdddddddœd„Z	d„ Z
d„ Zd	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zy)Ú
Serializerz)
    Abstract serializer base class.
    FNr   )ÚstreamÚfieldsÚuse_natural_foreign_keysÚuse_natural_primary_keysÚprogress_outputÚobject_countc                ó�  — || _         |�|n| j                  «       | _        || _        || _        || _        | j                  ||«      }	| j                  «        d| _        t        |d¬«      D �]¸  \  }
}| j                  |«       |j                  j                  }| j
                  r=|j                  j                  }|j                  r|j                  j                  r|nd}nd}|j                  j                   D ]‘  }|j"                  s||u sŒ|j                  €8| j                  �|j$                  | j                  v sŒE| j'                  ||«       ŒX| j                  �|j$                  dd | j                  v sŒ€| j)                  ||«       Œ“ |j                  j*                  D ]F  }|j"                  sŒ| j                  �|j$                  | j                  v sŒ5| j-                  ||«       ŒH | j/                  |«       |	j1                  |
«       | j                  xr d| _        �Œ» | j3                  «        | j5                  «       S )z'
        Serialize a queryset.
        NTr=   )ÚstartéýÿÿÿF)ÚoptionsÚstream_classrO   Úselected_fieldsrQ   rR   Úprogress_classÚstart_serializationÚfirstÚ	enumerateÚstart_objectÚ_metaÚconcrete_modelr3   Úremote_fieldÚparent_linkÚlocal_fieldsÚ	serializeÚattnameÚhandle_fieldÚhandle_fk_fieldÚlocal_many_to_manyÚhandle_m2m_fieldÚ
end_objectrL   Úend_serializationÚgetvalue)r   ÚquerysetrO   rP   rQ   rR   rS   rT   rX   Úprogress_barrH   r   ra   r3   Ú	pk_parentÚfields                   r   re   zSerializer.serializek   s  € ð ˆŒà &Ð 2‘f¸×8IÑ8IÓ8KˆŒØ%ˆÔØ(@ˆÔ%Ø(@ˆÔ%Ø×*Ñ*¨?¸LÓIˆà× Ñ Ô"ØˆŒ
Ü# H°AÔ6ó &	.‰JˆE�3Ø×Ñ˜cÔ"ð !ŸY™Y×5Ñ5ˆNð ×,Ò,Ø#×)Ñ)×,Ñ,�àŸ/š/¨b¯o©o×.IÒ.I‘BÈtñ ð !�	Ø'×-Ñ-×:Ñ:ò =�Ø—?’? e¨yÒ&8Ø×)Ñ)Ð1à ×0Ñ0Ð8Ø$Ÿ}™}°×0DÑ0DÒDà ×-Ñ-¨c°5Õ9ð !×0Ñ0Ð8Ø$Ÿ}™}¨S¨bÐ1°T×5IÑ5IÒIà ×0Ñ0°°eÕ<ð=ð (×-Ñ-×@Ñ@ò :�Ø—?“?à×,Ñ,Ð4Ø Ÿ=™=¨D×,@Ñ,@Ò@à×-Ñ-¨c°5Õ9ð:ð �O‰O˜CÔ Ø×Ñ Ô&ØŸ™Ò-¨ˆDŽJðM&	.ðN 	×ÑÔ Ø�}‰}‹Ðr   c                 ó   — t        d«      ‚)zA
        Called when serializing of the queryset starts.
        zDsubclasses of Serializer must provide a start_serialization() method©ÚNotImplementedError©r   s    r   r\   zSerializer.start_serialization®   s   € ô "ØRó
ð 	
r   c                  ó   — y)z?
        Called when serializing of the queryset ends.
        Nr   ru   s    r   rl   zSerializer.end_serialization¶   ó   € ð 	r   c                 ó   — t        d«      ‚)z>
        Called when serializing of an object starts.
        z=subclasses of Serializer must provide a start_object() methodrs   r   s     r   r_   zSerializer.start_object¼   ó   € ô "ØKó
ð 	
r   c                  ó   — y)z<
        Called when serializing of an object ends.
        Nr   r   s     r   rk   zSerializer.end_objectÄ   rw   r   c                 ó   — t        d«      ‚)zW
        Called to handle each individual (non-relational) field on an object.
        z=subclasses of Serializer must provide a handle_field() methodrs   ©r   r   rq   s      r   rg   zSerializer.handle_fieldÊ   ry   r   c                 ó   — t        d«      ‚)z6
        Called to handle a ForeignKey field.
        z@subclasses of Serializer must provide a handle_fk_field() methodrs   r|   s      r   rh   zSerializer.handle_fk_fieldÒ   s   € ô "ØNó
ð 	
r   c                 ó   — t        d«      ‚)z5
        Called to handle a ManyToManyField.
        zAsubclasses of Serializer must provide a handle_m2m_field() methodrs   r|   s      r   rj   zSerializer.handle_m2m_fieldÚ   s   € ô "ØOó
ð 	
r   c                 óx   — t        t        | j                  dd«      «      r| j                  j                  «       S y)zn
        Return the fully serialized queryset (or None if the output stream is
        not seekable).
        rm   N)ÚcallableÚgetattrrO   rm   ru   s    r   rm   zSerializer.getvalueâ   s1   € ô
 ”G˜DŸK™K¨°TÓ:Ô;Ø—;‘;×'Ñ'Ó)Ð)ð <r   )r   r   r   r   Úinternal_use_onlyr5   r[   r   rY   re   r\   rl   r_   rk   rg   rh   rj   rm   r   r   r   rN   rN   `   s\   „ ñð ÐØ €NØ€Lð ØØ!&Ø!&ØØôAòF
òò
òò
ò
ò
ó*r   rN   c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)ÚDeserializerz+
    Abstract base deserializer class.
    c                 ób   — || _         t        |t        «      rt        |«      | _        y|| _        y)zA
        Init this serializer given a stream or a string
        N)rX   Ú
isinstanceÚstrr   rO   )r   Ústream_or_stringrX   s      r   r   zDeserializer.__init__ð   s*   € ð ˆŒÜÐ&¬Ô,Ü"Ð#3Ó4ˆD�Kà*ˆD�Kr   c                 ó   — | S r   r   ru   s    r   Ú__iter__zDeserializer.__iter__ú   s   € Øˆr   c                 ó   — t        d«      ‚)z9Iteration interface -- return the next item in the streamz;subclasses of Deserializer must provide a __next__() methodrs   ru   s    r   Ú__next__zDeserializer.__next__ý   s   € ä!ØIó
ð 	
r   N)r   r   r   r   r   rŠ   rŒ   r   r   r   r„   r„   ë   s   „ ñò+òó
r   r„   c                   ó.   — e Zd ZdZdd„Zd„ Zdd„Zd	d„Zy)
ÚDeserializedObjectae  
    A deserialized model.

    Basically a container for holding the pre-saved deserialized data along
    with the many-to-many data saved with the object.

    Call ``save()`` to save the object (with the many-to-many data) to the
    database; call ``save(save_m2m=False)`` to save just the object fields
    (and not touch the many-to-many stuff.)
    Nc                 ó.   — || _         || _        || _        y r   )ÚobjectÚm2m_dataÚdeferred_fields)r   r   r‘   r’   s       r   r   zDeserializedObject.__init__  s   € ØˆŒØ ˆŒØ.ˆÕr   c                 ó¦   — d| j                   j                  ›d| j                  j                  j                  ›d| j                  j
                  ›d�S )Nú<z: z(pk=z)>)Ú	__class__r   r�   r`   Úlabelr3   ru   s    r   Ú__repr__zDeserializedObject.__repr__  s7   � à�N‰N×#Ó#Ø�K‰K×Ñ×#Ó#Ø�K‰K�N‹Nð
ð 	
r   c                 ó  — t        j                  j                  | j                  f|ddœ|¤Ž | j                  rI|rG| j                  j                  «       D ]*  \  }}t        | j                  |«      j                  |«       Œ, d | _        y )NT)ÚusingÚraw)r   ÚModelÚ	save_baser�   r‘   Úitemsr�   Úset)r   Úsave_m2mr™   ÚkwargsÚaccessor_nameÚobject_lists         r   ÚsavezDeserializedObject.save  st   € ô 	�‰×Ñ˜tŸ{™{ÐL°%¸TÑLÀVÒLØ�=Š=™XØ.2¯m©m×.AÑ.AÓ.Cò EÑ*�˜{Ü˜Ÿ™ ]Ó3×7Ñ7¸ÕDðEð
 ˆ�r   c                 ó>  — i | _         | j                  j                  «       D ]Û  \  }}| j                  j                  }|j
                  dz   |j                  z   }t        |j                  t        j                  «      r*	 t        |||d¬«      }|| j                   |j"                  <   Œ†t        |j                  t        j$                  «      sŒ«	 t'        |||d¬«      }t+        | j                  |j,                  |«       ŒÝ | j/                  «        y # t        $ rE}t        j                  |j                  || j                  j                   |j                   «      ‚d }~ww xY w# t(        $ r1}t        j                  ||| j                  j                   |«      ‚d }~ww xY w)NrA   F)Úhandle_forward_references)r‘   r’   r�   r�   r`   Ú	app_labelÚ
model_namer†   rb   r   ÚManyToManyRelÚdeserialize_m2m_valuesr1   r&   r.   r*   r3   ÚnameÚManyToOneRelÚdeserialize_fk_valueÚ	ExceptionÚsetattrrf   r£   )	r   r™   rq   r-   Úoptsr–   ÚvaluesÚeÚvalues	            r   Úsave_deferred_fieldsz'DeserializedObject.save_deferred_fields)  sV  € ØˆŒØ"&×"6Ñ"6×"<Ñ"<Ó">ò 	;ÑˆE�;Ø—;‘;×$Ñ$ˆDØ—N‘N SÑ(¨4¯?©?Ñ:ˆEÜ˜%×,Ñ,¬f×.BÑ.BÔCðÜ3Ø˜{¨EÈUô�Fð -3�—‘˜eŸj™jÒ)Ü˜E×.Ñ.´×0CÑ0CÕDðÜ0Ø˜{¨EÈUô�Eô ˜Ÿ™ U§]¡]°EÕ:ð-	;ð. 	�	‰	�øô /ò Ü.×7Ñ7ØŸ™¨¨t¯{©{¯~©~¸q¿t¹tóð ûðûô !ò Ü.×7Ñ7Ø˜5 $§+¡+§.¡.°+óð ûðús1   Á?DÃE"Ä	EÄA EÅEÅ"	FÅ+,FÆF)NN)TNr   )r   r   r   r   r   r—   r£   r³   r   r   r   rŽ   rŽ     s   „ ñ	ó/ò

óôr   rŽ   c                 ó&  — | j                   j                  }|j                  | j                   j                  j                  «      }|€®t        |d«      r¢t        | d«      r– | di |¤Ž}||j                  _        |j                  «       }	 | j                   j                  j                   |j                  |«      j                  |Ž j                  «      || j                   j                  j                  <    | di |¤ŽS # | j                  $ r Y Œw xY w)z¦
    Build a model instance.

    If the model instance doesn't have a primary key and the model supports
    natural keys, try to retrieve it from the database.
    Úget_by_natural_keyÚnatural_keyr   )r`   Údefault_managerÚgetr3   rf   ÚhasattrÚ_stateÚdbr¶   Ú	to_pythonÚ
db_managerrµ   ÚDoesNotExist)r›   r   r»   r·   r3   r   r¶   s          r   Úbuild_instancer¿   E  sä   € ð —k‘k×1Ñ1€OØ	�‰�%—+‘+—.‘.×(Ñ(Ó	)€Bà
ˆ
Ü�OÐ%9Ô:Ü�E˜=Ô)á‰m�d‰mˆØˆ�
‰
ŒØ—o‘oÓ'ˆð	Ø+0¯;©;¯>©>×+CÑ+CØA�×*Ñ*¨2Ó.×AÑAÀ;ÐO×RÑRó,ˆD�—‘—‘×'Ñ'Ñ(ñ
 ‰=�4‰=Ðøð ×!Ñ!ò 	Ùð	ús   Â
A,C> Ã>DÄDc                 ó‚  ‡‡	— | j                   j                  Š	t        ‰	j                  d«      rˆ	ˆfd„}nˆ	fd„}	 t	        |«      }	 g }|D ]  }|j                   ||«      «       Œ |S # t
        $ r}t        ||«      ‚d }~ww xY w# t        $ r.}t        |t        «      r|rt        cY d }~S t        |«      ‚d }~ww xY w)Nrµ   c                 óê   •— t        | d«      rBt        | t        «      s2 ‰j                  j	                  ‰«      j
                  | Ž j                  S ‰j                  j                  j                  | «      S )NrŠ   )	r¹   r†   r‡   Ú_default_managerr½   rµ   r3   r`   r¼   )r²   r+   r™   s    €€r   Úm2m_convertz+deserialize_m2m_values.<locals>.m2m_convertc  s`   ø€ Ü�u˜jÔ)´*¸UÄCÔ2Hð(�E×*Ñ*×5Ñ5°eÓ<ß'Ñ'¨ð0ç‘Rðð —{‘{—~‘~×/Ñ/°Ó6Ð6r   c                 óN   •— ‰j                   j                  j                  | «      S r   )r`   r3   r¼   )Úvr+   s    €r   rÃ   z+deserialize_m2m_values.<locals>.m2m_converto  s   ø€ Ø—;‘;—>‘>×+Ñ+¨AÓ.Ð.r   )rb   r+   r¹   rÂ   ÚiterÚ	TypeErrorr1   Úappendr­   r†   r   ÚDEFER_FIELD)
rq   r-   r™   r¥   rÃ   Úpks_iterr±   r°   r3   r+   s
     `      @r   r©   r©   _  s½   ù€ Ø×Ñ×$Ñ$€EÜˆu×%Ñ%Ð';Ô<ö	7ô	/ð6Ü˜Ó$ˆð	1ØˆØò 	+ˆBØ�M‰M™+ b›/Õ*ð	+àˆøô ò 6Ü% a¨Ó5Ð5ûð6ûô ò 1Ü�aÔ+Ô,Ñ1JÜÕä)¨!¨RÓ0Ð0ûð	1ús;   ¼A* Á!B Á*	BÁ3A?Á?BÂ	B>ÂB9Â'B>Â-B9Â9B>c                 óþ  — |€y | j                   j                  }|j                  }| j                   j                  }t	        |d«      rut	        |d«      rit        |t        «      sY	  |j                  |«      j                  |Ž }t        ||«      }|j                  j                  j                   r|j                  }|S |j                  j                  |«      j                  |«      S # t        $ r |rt        cY S ‚ w xY w)Nrµ   rŠ   )rb   r+   rÂ   Ú
field_namer¹   r†   r‡   r½   rµ   r   rÉ   r�   r`   r3   Ú	get_fieldr¼   )	rq   r-   r™   r¥   r+   r·   rÌ   r   r²   s	            r   r¬   r¬   ‚  så   € ØÐØØ×Ñ×$Ñ$€EØ×,Ñ,€OØ×#Ñ#×.Ñ.€Jä�Ð!5Ô6Ü�K Ô,Ü˜;¬Ô,ð	ØF�/×,Ñ,¨UÓ3×FÑFÈÐTˆCô ˜˜ZÓ(ˆð �;‰;�>‰>×&Ò&Ø—H‘HˆEØˆØ�;‰;× Ñ  Ó,×6Ñ6°{ÓCÐCøô "ò 	Ù(Ü"Ò"àð		ús   Á%C' Ã'C<Ã:C<)r   r   r
   Úior   Údjango.core.exceptionsr   Ú	django.dbr   Údjango.utils.deprecationr   r�   rÉ   r   ÚKeyErrorr!   r­   r$   r&   r1   r5   rN   r„   rŽ   r¿   r©   r¬   r   r   r   ú<module>rÓ      sœ   ðñó Û Ý å 5Ý Ý =á‹h€÷"ñ "ô*	˜Xô 	ô	˜ô 	ô
˜9ô 
ô˜iô ÷ñ ÷2H*ñ H*÷V
ñ 
÷2>ñ >òBò4 1óFDr   