
    f3                     b   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dS )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dS )PickleSerializerzd
    Simple wrapper around pickle to be used in signing.dumps()/loads() and
    cache backends.
    Nc                 d    t          j        dt                     |t          j        n|| _        d S )NzTPickleSerializer is deprecated due to its security risk. Use JSONSerializer instead.)warningswarnr   pickleHIGHEST_PROTOCOLprotocol)selfr   s     R/var/www/equiseq/venv/lib/python3.11/site-packages/django/core/serializers/base.py__init__zPickleSerializer.__init__   s8    &$	
 	
 	

 4<3C//    c                 6    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      sT         
R R R R0 0 0" " " " "r   r   c                       e Zd ZdZdS )SerializerDoesNotExistz'The requested serializer was not found.Nr   r   r   r   r   r   r   r!   r!   $   s        11Dr   r!   c                       e Zd ZdZdS )SerializationErrorz,Something bad happened during serialization.Nr"   r   r   r   r$   r$   *   s        66Dr   r$   c                   (    e Zd ZdZed             ZdS )DeserializationErrorz.Something bad happened during deserialization.c           
      0     | |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   s6     s||UUUBBB5
 
 	
r   N)r   r   r   r   classmethodr.   r   r   r   r&   r&   0   s3        88
 
 [
 
 
r   r&   c                       e Zd ZdZd ZdS )M2MDeserializationErrorzCSomething bad happened during deserialization of a ManyToManyField.c                 "    || _         || _        d S 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M    r   r1   c                       e Zd ZdZd Zd ZdS )ProgressBarK   c                 0    || _         || _        d| _        d S )Nr   )outputtotal_count	prev_done)r   r8   r9   s      r   r   zProgressBar.__init__J   s    &r   c                 v   | j         sd S |dz  | j        z  }|| j        z  dz  }| j        |k    rd S || _        | j        dk    rdnd}| j                             |dz   d|z  z   d| j        |z
  z  z   dz              || j        k    r| j                             d	           | j                                          d S )
Nd       [. ]
)r8   r9   progress_widthr:   writeflush)r   countpercdonecrs        r   updatezProgressBar.updateO   s    { 	Fs{d..d))S0>T!!F#q((RRdHsTz!C4+>+E$FFL	
 	
 	
 4&&&Kd###r   N)r   r   r   rE   r   rL   r   r   r   r5   r5   G   s7        N  
    r   r5   c                   d    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dS )
Serializerz)
    Abstract serializer base class.
    FNr   )streamfieldsuse_natural_foreign_keysuse_natural_primary_keysprogress_outputobject_countc                   || _         ||n|                                 | _        || _        || _        || _        |                     ||          }	|                                  d| _        t          |d          D ]M\  }
}| 
                    |           |j        j        }| j        r$|j        j        }|j        r|j        j        r|nd}nd}|j        j        D ]s}|j        s||u rf|j        ,| j        |j        | j        v r|                     ||           @| j        |j        dd         | j        v r|                     ||           t|j        j        D ]4}|j        r+| j        |j        | j        v r|                     ||           5|                     |           |	                    |
           | j        od| _        O|                                  |                                 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-     & 2ff8I8I8K8K%(@%(@%**?LII  """
#HA666 &	. &	.JE3c""" !Y5N , !#),/Sbo.ISBBt 	 !	'-: = =? =ey&8&8)1 08$}0DDD --c5999 !08$}SbS1T5III 00e<<<'-@ : :? :,4 =D,@@@--c5999OOC   &&&-DJJ   }}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                     dS )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                     dS )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                 ~    t          t          | j        dd                    r| j                                        S dS )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   s@    
 GDK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 A A A AF
 
 
  
 
 
  
 
 

 
 

 
 
* * * * *r   rN   c                   $    e Zd ZdZd Zd Zd ZdS )Deserializerz+
    Abstract base deserializer class.
    c                 x    || _         t          |t                    rt          |          | _        dS || _        dS )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4DKKK*DKKKr   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      sK         + + +  
 
 
 
 
r   r   c                   0    e Zd ZdZddZd Zd	dZd
dZdS )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                 0    || _         || _        || _        d S 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__  s8     N###K###KNNN
 	
r   Tc                     t          j        j        | j        f|dd| | j        rI|rG| j                                        D ]-\  }}t          | j        |                              |           .d | _        d S )NT)usingraw)r   Model	save_baser   r   itemsr   set)r   save_m2mr   kwargsaccessor_nameobject_lists         r   savezDeserializedObject.save  s     	t{L%TLLVLLL= 	EX 	E.2m.A.A.C.C E E*{]3377DDDD r   c                    i | _         | j                                        D ]3\  }}| j        j        }|j        dz   |j        z   }t          |j        t          j
                  rh	 t          |||d          }nC# t          $ r6}t                              |j        || j        j        |j                  d }~ww xY w|| j         |j        <   t          |j        t          j                  ri	 t'          |||d          }n9# t(          $ r,}t                              ||| j        j        |          d }~ww xY wt+          | j        |j        |           5|                                  d S )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)  s   "&"6"<"<">"> 	; 	;E;;$DNS(4?:E%,f.BCC ;3{EU  FF /   .77t{~qt   -3ej))E.0CDD 	;0{EU  EE !   .775$+.+   U]E:::		s0   %A99
B91B44B9,D  
D6
'D11D6)NN)TNr   )r   r   r   r   r   r   r   r   r   r   r   r   r     si        	 	/ / / /

 
 
        r   r   c                    | j         j        }|                    | j         j        j                  }|t          |d          rt          | d          r | di |}||j        _        |                                }	 | j         j        	                     |
                    |          j        | j                  || j         j        j        <   n# | j        $ r Y nw xY w | di |S )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.
    N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1O	%+.(	)	)B

O%9:: 	E=)) 	 emmdmm
oo''	+0;>+C+CA**2..A;OR, ,D'(( ! 	 	 	D	5==4==s   <AC 
CCc                   	 | j         j        	t          	j        d          r	fd}n	fd}	 t	          |          }n"# t
          $ r}t          ||          d }~ww xY w	 g }|D ] }|                     ||                     !|S # t          $ r8}t          |t                    r|rt          cY d }~S t          ||          d }~ww xY w)Nr   c                     t          | d          r<t          | t                    s' j                                      j        |  j        S 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  sj    uj)) 7*UC2H2H 7(E*55e<<'0 {~//666r   c                 B    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 	7 	7 	7 	7 	7 	7	/ 	/ 	/ 	/ 	/6$$ 6 6 6%a5556	1 	+ 	+BMM++b//**** 1 1 1a+,, 	11J 	1)!R000	1s;   A 
A AA $&B 
CC2C8CCc                    |d S | j         j        }|j        }| j         j        }t	          |d          rt	          |d          rxt          |t                    sc	  |                    |          j        | }n# t          $ r |r	t          cY S  w xY wt          ||          }|j        j        j         r|j        }|S |j                            |                              |          S )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   t$E,O#.J!566K,, ;,,
	F/,,U33FTCC! 	 	 	( """"		
 Z(( ;>& 	HE;  ,,66{CCCs   A8 8BB)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 5 5 5 5 5       = = = = = =fhh" " " " " " " "*	 	 	 	 	X 	 	 		 	 	 	 	 	 	 	
 
 
 
 
9 
 
 
    i          2H* H* H* H* H* H* H* H*V
 
 
 
 
 
 
 
2> > > > > > > >B  4 1  1  1FD D D D Dr   