
    hW1                         S r SSKJr  SSKJr  SSKJr  \" 5       r " S S\	5      r
 " S S\5      r " S	 S
\5      r " S S\5      r " S S5      r " S S5      r " S S5      r " S S5      rS rS rS rg)z;
Module for abstract serializer/unserializer base classes.
    )StringIO)ObjectDoesNotExist)modelsc                       \ rS rSrSrSrg)SerializerDoesNotExist   z'The requested serializer was not found. N__name__
__module____qualname____firstlineno____doc____static_attributes__r	       N/var/www/html/env/lib/python3.13/site-packages/django/core/serializers/base.pyr   r      s    1r   r   c                       \ rS rSrSrSrg)SerializationError   z,Something bad happened during serialization.r	   Nr
   r	   r   r   r   r      s    6r   r   c                   (    \ rS rSrSr\S 5       rSrg)DeserializationError   z.Something bad happened during deserialization.c           
      2    U " U< SU< SU< SU< S35      $ )z[
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   WithDataDeserializationError.WithData   s     UB5
 	
r   r	   N)r   r   r   r   r   classmethodr    r   r	   r   r   r   r      s    8
 
r   r   c                       \ rS rSrSrS rSrg)M2MDeserializationError(   zCSomething bad happened during deserialization of a ManyToManyField.c                     Xl         X l        g Nr   pk)selfr   r)   s      r   __init__ M2MDeserializationError.__init__+   s    (r   r(   N)r   r   r   r   r   r+   r   r	   r   r   r$   r$   (   s
    Mr   r$   c                   $    \ rS rSrSrS rS rSrg)ProgressBar0   K   c                 *    Xl         X l        SU l        g )Nr   )outputtotal_count	prev_done)r*   r2   r3   s      r   r+   ProgressBar.__init__3   s    &r   c                    U R                   (       d  g US-  U R                  -  nX R                  -  S-  nU R                  U:  a  g X0l        U R                  S:X  a  SOSnU R                   R	                  US-   SU-  -   SU R                  U-
  -  -   S-   5        X0R                  :X  a  U R                   R	                  S	5        U R                   R                  5         g )
Nd       [. ]
)r2   r3   progress_widthr4   writeflush)r*   countpercdonecrs        r   updateProgressBar.update8   s    {{s{d...)))S0>>T!##q(RdHsTz!C4+>+>+E$FFL	
 &&&KKd#r   )r2   r4   r3   N)r   r   r   r   r@   r+   rG   r   r	   r   r   r.   r.   0   s    N
r   r.   c                   l    \ rS rSrSrSr\r\r	SSSSSSS.S jr
S rS	 rS
 rS rS rS rS rS rSrg)
SerializerI   z!
Abstract serializer base class.
FNr   )streamfieldsuse_natural_foreign_keysuse_natural_primary_keysprogress_outputobject_countc                   Xl         Ub  UOU R                  5       U l        X0l        X@l        XPl        U R                  Xg5      n	U R                  5         SU l        [        USS9 GH  u  pU R                  U5        UR                  R                  nU R
                  (       aG  UR                  R                  nUR                  (       a  UR                  R                  (       a  UOSnOSnUR                  R                    H  nUR"                  (       d  XL d  M  UR                  c<  U R                  b  UR$                  U R                  ;   a  U R'                  X5        Ma  Mc  U R                  b  UR$                  SS U R                  ;   d  M  U R)                  X5        M     UR                  R*                   HP  nUR"                  (       d  M  U R                  b  UR$                  U R                  ;   d  M?  U R-                  X5        MR     U R/                  U5        U	R1                  U
5        U R                  =(       a    SU l        GM     U R3                  5         U R5                  5       $ )z
Serialize a queryset.
NTr8   )startF)optionsstream_classrL   selected_fieldsrN   rO   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_objectrG   end_serializationgetvalue)r*   querysetrL   rM   rN   rO   rP   rQ   rU   progress_barrC   objr^   r)   	pk_parentfields                   r   rb   Serializer.serializeT   s     & 2f8I8I8K%(@%(@%**?I  "
#HA6JEc" !YY55N ,,#)),,//boo.I.IBt  !	'--::??e&8))1 008$}}0D0DD --c9  E
 !008$}}Sb1T5I5II 00< ; (--@@???,,4 ==D,@,@@--c9 A OOC &-DJM 7N 	 }}r   c                     [        S5      e)z1
Called when serializing of the queryset starts.
zDsubclasses of Serializer must provide a start_serialization() methodNotImplementedErrorr*   s    r   rY   Serializer.start_serialization   s     "R
 	
r   c                     g)z/
Called when serializing of the queryset ends.
Nr	   rt   s    r   ri   Serializer.end_serialization        	r   c                     [        S5      e)z.
Called when serializing of an object starts.
z=subclasses of Serializer must provide a start_object() methodrr   r*   rm   s     r   r\   Serializer.start_object        "K
 	
r   c                     g)z,
Called when serializing of an object ends.
Nr	   rz   s     r   rh   Serializer.end_object   rx   r   c                     [        S5      e)zG
Called to handle each individual (non-relational) field on an object.
z=subclasses of Serializer must provide a handle_field() methodrr   r*   rm   ro   s      r   rd   Serializer.handle_field   r|   r   c                     [        S5      e)z&
Called to handle a ForeignKey field.
z@subclasses of Serializer must provide a handle_fk_field() methodrr   r   s      r   re   Serializer.handle_fk_field   s     "N
 	
r   c                     [        S5      e)z%
Called to handle a ManyToManyField.
zAsubclasses of Serializer must provide a handle_m2m_field() methodrr   r   s      r   rg   Serializer.handle_m2m_field   s     "O
 	
r   c                     [        [        U R                  SS5      5      (       a  U R                  R                  5       $ g)zV
Return the fully serialized queryset (or None if the output stream is
not seekable).
rj   N)callablegetattrrL   rj   rt   s    r   rj   Serializer.getvalue   s4    
 GDKKT:;;;;'')) <r   )rZ   rU   rW   rL   rN   rO   )r   r   r   r   r   internal_use_onlyr.   rX   r   rV   rb   rY   ri   r\   rh   rd   re   rg   rj   r   r	   r   r   rJ   rJ   I   s\      NL !&!&AF




*r   rJ   c                   *    \ rS rSrSrS rS rS rSrg)Deserializer   z#
Abstract base deserializer class.
c                 h    X l         [        U[        5      (       a  [        U5      U l        gXl        g)z1
Init this serializer given a stream or a string
N)rU   
isinstancestrr   rL   )r*   stream_or_stringrU   s      r   r+   Deserializer.__init__   s)     &,,"#34DK*Kr   c                     U $ r'   r	   rt   s    r   __iter__Deserializer.__iter__   s    r   c                     [        S5      e)z9Iteration interface -- return the next item in the streamz;subclasses of Deserializer must provide a __next__() methodrr   rt   s    r   __next__Deserializer.__next__   s    !I
 	
r   )rU   rL   N)	r   r   r   r   r   r+   r   r   r   r	   r   r   r   r      s    +
r   r   c                   <    \ rS rSrSrS	S jrS rS
S jrSS jrSr	g)DeserializedObject   aI  
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                 (    Xl         X l        X0l        g r'   )objectm2m_datadeferred_fields)r*   rm   r   r   s       r   r+   DeserializedObject.__init__   s     .r   c                     SU R                   R                  < SU R                  R                  R                  < SU R                  R
                  < S3$ )N<z: z(pk=z)>)	__class__r   r   r]   labelr)   rt   s    r   __repr__DeserializedObject.__repr__   s7    NN##KK##KKNN
 	
r   c                 .   [         R                  R                  " U R                  4USS.UD6  U R                  (       aO  U(       aH  U R                  R                  5        H*  u  pE[        U R                  U5      R                  U5        M,     S U l        g )NT)usingraw)r   Model	save_baser   r   itemsr   set)r*   save_m2mr   kwargsaccessor_nameobject_lists         r   saveDeserializedObject.save  sl     	t{{L%TLVL==X.2mm.A.A.C*]377D /D
 r   c                 F   0 U l         U R                  R                  5        H  u  p#U R                  R                  nUR
                  S-   UR                  -   n[        UR                  [        R                  5      (       a&   [        X#USS9nX`R                   UR"                  '   M  [        UR                  [        R$                  5      (       d  M   ['        X#USS9n[+        U R                  UR,                  U5        M     U R/                  5         g ! [         aD  n[        R                  UR                  XPR                  R                   UR                   5      eS nAff = f! [(         a0  n[        R                  XuU R                  R                   U5      eS nAff = f)Nr<   F)handle_forward_references)r   r   r   r   r]   	app_label
model_namer   r_   r   ManyToManyReldeserialize_m2m_valuesr$   r   r    r   r)   nameManyToOneReldeserialize_fk_value	Exceptionsetattrrc   r   )	r*   r   ro   r   optsr   valuesevalues	            r   save_deferred_fields'DeserializedObject.save_deferred_fields  sK   "&"6"6"<"<">E;;$$DNNS(4??:E%,,f.B.BCC3EUF -3ejj)E..0C0CDD0EUE U]]E:- #?. 			 / .77{{~~qtt  ! .77$++..+ s0   DE&
E#?EE#&
F 0+FF )r   r   r   )NN)TNr'   )
r   r   r   r   r   r+   r   r   r   r   r	   r   r   r   r      s    	/

r   r   c                 :   U R                   R                  nUR                  U R                   R                  R                  5      nUc  [        US5      (       a  [        U S5      (       a  U " S0 UD6nX%R                  l        UR                  5       n U R                   R                  R                  UR                  U5      R                  " U6 R                  5      XR                   R                  R                  '   U " S0 UD6$ ! U R                   a     Nf = f)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getr)   rc   hasattr_statedbr   	to_python
db_managerr   DoesNotExist)r   datar   r   r)   rm   r   s          r   build_instancer   .  s     kk11O	%++..((	)B

O%9::E=))mdm

oo'	+0;;>>+C+C**2.AA;ORR,D''(
 =4= !! 		s   A+D DDc                   ^^	 U R                   R                  m	[        T	R                  S5      (       a  U	U4S jnOU	4S jn [	        U5      n / nU H  nUR                  U" U5      5        M     U$ ! [
         a  n[        Xa5      eS nAff = f! [         a8  n[        U[        5      (       a  U(       a  [        s S nA$ [        UW5      eS nAff = f)Nr   c                    > [        U S5      (       aG  [        U [        5      (       d2  TR                  R	                  T5      R
                  " U 6 R                  $ TR                  R                  R                  U 5      $ )Nr   )	r   r   r   _default_managerr   r   r)   r]   r   )r   r   r   s    r   m2m_convert+deserialize_m2m_values.<locals>.m2m_convertL  sh    uj))*UC2H2H**55e<''().0R {{~~//66r   c                 N   > TR                   R                  R                  U 5      $ r'   )r]   r)   r   )vr   s    r   r   r   X  s    ;;>>++A..r   )r_   r   r   r   iter	TypeErrorr$   appendr   r   r   DEFER_FIELD)
ro   r   r   r   r   pks_iterr   r   r)   r   s
     `      @r   r   r   H  s    $$Eu%%';<<	7	/6$	1BMM+b/*   6%a556  1a+,,1J)!R00	1s<   A3 #B 3
B=BB
C!C;CCCc                 2   Uc  g U R                   R                  nUR                  nU R                   R                  n[	        US5      (       a  [	        US5      (       ar  [        U[        5      (       d]   UR                  U5      R                  " U6 n[        Xv5      nUR                  R                  R                   (       a  UR                  nU$ UR                  R                  U5      R                  U5      $ ! [         a    U(       a  [        s $ e f = f)Nr   r   )r_   r   r   
field_namer   r   r   r   r   r   r   r   r]   r)   	get_fieldr   )	ro   r   r   r   r   r   r   rm   r   s	            r   r   r   k  s    $$E,,O##..J!566K,,;,,	!,,U3FFTC ( ;;>>&&HHE;;  ,66{CC " 	(""		s   5C; ;DDN)r   ior   django.core.exceptionsr   	django.dbr   r   r   KeyErrorr   r   r   r   r$   r.   rJ   r   r   r   r   r   r	   r   r   <module>r      s     5 h	X 		 	
9 
i  2H* H*V
 
2> >B4 1FDr   