Ë
    ¹ûàgW1  ã                   óô   — d Z ddlmZ ddlmZ ddlmZ  e«       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.
é    )ÚStringIO)ÚObjectDoesNotExist)Úmodelsc                   ó   — e Zd ZdZy)ÚSerializerDoesNotExistz'The requested serializer was not found.N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    úZ/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/django/core/serializers/base.pyr   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.WithData   s   € ñ âšU¢Bªð5ó
ð 	
r   N)r	   r
   r   r   Úclassmethodr   r   r   r   r   r      s   „ Ù8àñ
ó ñ
r   r   c                   ó   — e Zd ZdZd„ Zy)ÚM2MDeserializationErrorzCSomething bad happened during deserialization of a ManyToManyField.c                 ó    — || _         || _        y ©N)r   Úpk)Úselfr   r!   s      r   Ú__init__z M2MDeserializationError.__init__+   s   € Ø(ˆÔØˆ�r   N)r	   r
   r   r   r#   r   r   r   r   r   (   s
   „ ÙMór   r   c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚProgressBaréK   c                 ó.   — || _         || _        d| _        y )Nr   )ÚoutputÚtotal_countÚ	prev_done)r"   r(   r)   s      r   r#   zProgressBar.__init__3   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   é   Ú úú[ú.ú ú]ú
)r(   r)   Úprogress_widthr*   ÚwriteÚflush)r"   ÚcountÚpercÚdoneÚcrs        r   ÚupdatezProgressBar.update8   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   r5   r#   r<   r   r   r   r%   r%   0   s   „ Ø€Nòó
r   r%   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_classr?   Úselected_fieldsrA   rB   Úprogress_classÚstart_serializationÚfirstÚ	enumerateÚstart_objectÚ_metaÚconcrete_modelr!   Úremote_fieldÚparent_linkÚlocal_fieldsÚ	serializeÚattnameÚhandle_fieldÚhandle_fk_fieldÚlocal_many_to_manyÚhandle_m2m_fieldÚ
end_objectr<   Úend_serializationÚgetvalue)r"   Úquerysetr?   r@   rA   rB   rC   rD   rH   Úprogress_barr8   ÚobjrQ   r!   Ú	pk_parentÚfields                   r   rU   zSerializer.serializeT   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   rL   zSerializer.start_serialization—   s   € ô "ØRó
ð 	
r   c                  ó   — y)z?
        Called when serializing of the queryset ends.
        Nr   rf   s    r   r\   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() methodrd   ©r"   r`   s     r   rO   zSerializer.start_object¥   ó   € ô "ØKó
ð 	
r   c                  ó   — y)z<
        Called when serializing of an object ends.
        Nr   rj   s     r   r[   zSerializer.end_object­   rh   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() methodrd   ©r"   r`   rb   s      r   rW   zSerializer.handle_field³   rk   r   c                 ó   — t        d«      ‚)z6
        Called to handle a ForeignKey field.
        z@subclasses of Serializer must provide a handle_fk_field() methodrd   rn   s      r   rX   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() methodrd   rn   s      r   rZ   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).
        r]   N)ÚcallableÚgetattrr?   r]   rf   s    r   r]   zSerializer.getvalueË   s1   € ô
 ”G˜DŸK™K¨°TÓ:Ô;Ø—;‘;×'Ñ'Ó)Ð)ð <r   )r	   r
   r   r   Úinternal_use_onlyr%   rK   r   rI   rU   rL   r\   rO   r[   rW   rX   rZ   r]   r   r   r   r>   r>   I   s\   „ ñð ÐØ €NØ€Lð ØØ!&Ø!&ØØôAòF
òò
òò
ò
ò
ó*r   r>   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)rH   Ú
isinstanceÚstrr   r?   )r"   Ústream_or_stringrH   s      r   r#   zDeserializer.__init__Ù   s*   € ð ˆŒÜÐ&¬Ô,Ü"Ð#3Ó4ˆD�Kà*ˆD�Kr   c                 ó   — | S r    r   rf   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__() methodrd   rf   s    r   Ú__next__zDeserializer.__next__æ   s   € ä!ØIó
ð 	
r   N)r	   r
   r   r   r#   r|   r~   r   r   r   rv   rv   Ô   s   „ ñò+òó
r   rv   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‚   rP   Úlabelr!   rf   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ƒ   Úitemsrs   Ú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)Nr1   F)Úhandle_forward_references)rƒ   r„   r�   r‚   rP   Ú	app_labelÚ
model_namerx   rR   r   ÚManyToManyRelÚdeserialize_m2m_valuesr   r   r   r   r!   ÚnameÚManyToOneRelÚdeserialize_fk_valueÚ	ExceptionÚsetattrrV   r•   )	r"   r‹   rb   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   )rP   Údefault_managerÚgetr!   rV   ÚhasattrÚ_stateÚdbr¨   Ú	to_pythonÚ
db_managerr§   ÚDoesNotExist)r�   Údatar­   r©   r!   r`   r¨   s          r   Úbuild_instancer²   .  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«   rx   ry   Ú_default_managerr¯   r§   r!   rP   r®   )r¤   r   r‹   s    €€r   Úm2m_convertz+deserialize_m2m_values.<locals>.m2m_convertL  s`   ø€ Ü�u˜jÔ)´*¸UÄCÔ2Hð(�E×*Ñ*×5Ñ5°eÓ<ß'Ñ'¨ð0ç‘Rðð —{‘{—~‘~×/Ñ/°Ó6Ð6r   c                 óN   •— ‰j                   j                  j                  | «      S r    )rP   r!   r®   )Úvr   s    €r   r¶   z+deserialize_m2m_values.<locals>.m2m_convertX  s   ø€ Ø—;‘;—>‘>×+Ñ+¨AÓ.Ð.r   )rR   r   r«   rµ   ÚiterÚ	TypeErrorr   ÚappendrŸ   rx   r   ÚDEFER_FIELD)
rb   r   r‹   r—   r¶   Úpks_iterr£   r¢   r!   r   s
     `      @r   r›   r›   H  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|   )rR   r   rµ   Ú
field_namer«   rx   ry   r¯   r§   r   r¼   rs   rP   r!   Ú	get_fieldr®   )	rb   r   r‹   r—   r   r©   r¿   r`   r¤   s	            r   rž   rž   k  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<N)r   Úior   Údjango.core.exceptionsr   Ú	django.dbr   r‚   r¼   ÚKeyErrorr   rŸ   r   r   r   r%   r>   rv   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   