
    Hwg3                     $   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     S/var/www/horilla/myenv/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     UB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)ProgressBarK   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 )
Nd       [. ]
)r8   r9   progress_widthr:   writeflush)r   countpercdonecrs        r   updatezProgressBar.updateO   s    {{s{d...d)))S0>>T!##q(RdHsTz!C4+>+>+E$FFL	
 4&&&KK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=   )startF)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     & 2f8I8I8K%(@%(@%**?LI  "
#HA6 &	.JE3c" !YY55N ,,#)),,//boo.I.IBt  !	'--:: =??ey&8))1 008$}}0D0DD --c59 !008$}}Sb1T5I5II 00e<= (--@@ :??,,4 ==D,@,@@--c59: OOC &-DJM&	.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    
 GDKK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4DK*DKr   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    NN##KK##KKNN
 	
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LVL==X.2mm.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NNS(4??:E%,,f.B.BC3{EUF -3ejj)E..0C0CD0{EUE U]]E:-	;. 			 / .77t{{~~qtt  ! .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      rt        | 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     kk11O	%++..((	)B

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

oo'	+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`    uj)*UC2H(E**55e<''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MM+b/*	+  6%a556  1a+,1J)!R00	1s;   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TC Z( ;;>>&&HHE;;  ,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 1FDr   