
    Evg                     x    d Z ddlmZ ddlmZ ddlmZmZ ddlm	Z	  G d dej
                  Z
edd	d
Zd ZdS )z
A Python "serializer". Doesn't do much serializing per se -- just converts to
and from basic Python data types (lists, dicts, strings, etc.). Useful as a basis for
other serializers.
    )apps)base)DEFAULT_DB_ALIASmodels)is_protected_typec                   R    e Zd ZdZdZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd ZdS )
Serializerz7
    Serialize a QuerySet to basic Python objects.
    Tc                 "    d | _         g | _        d S N)_currentobjectsselfs    [/var/www/pixelcanvas.ch/venv/lib/python3.11/site-packages/django/core/serializers/python.pystart_serializationzSerializer.start_serialization   s        c                     d S r    r   s    r   end_serializationzSerializer.end_serialization   s    r   c                     i | _         d S r   )r   r   objs     r   start_objectzSerializer.start_object   s    r   c                 n    | j                             |                     |                     d | _        d S r   )r   appendget_dump_objectr   r   s     r   
end_objectzSerializer.end_object   s1    D0055666r   c                     dt          |j                  i}| j        rt          |d          s#|                     ||j        j                  |d<   | j        |d<   |S )Nmodelnatural_keypkfields)str_metause_natural_primary_keyshasattr_value_from_fieldr!   r   )r   r   datas      r   r   zSerializer.get_dump_object"   s_    SY(, 	CGC4O4O 	C//SY\BBDJXr   c                 x    |                     |          }t          |          r|n|                    |          S r   )value_from_objectr   value_to_string)r   r   fieldvalues       r   r'   zSerializer._value_from_field)   s<    '',, *%00Puue6K6KC6P6PPr   c                 L    |                      ||          | j        |j        <   d S r   )r'   r   name)r   r   r,   s      r   handle_fieldzSerializer.handle_field0   s&    $($:$:3$F$Fej!!!r   c                     | j         rIt          |j        j        d          r/t	          ||j                  }|r|                                }nd }n|                     ||          }|| j        |j        <   d S )Nr    )	use_natural_foreign_keysr&   remote_fieldr   getattrr/   r    r'   r   )r   r   r,   relatedr-   s        r   handle_fk_fieldzSerializer.handle_fk_field3   s    ( 		7W$m.
 .
 		7 c5:..G ++--**366E$)ej!!!r   c                 8    |j         j        j        j        r j        r!t          |j         j        d          rd d }n fdd }t          |di                               |j	         |||                    }fd|D              j
        |j	        <   d S d S )Nr    c                 *    |                                  S r   )r    )r-   s    r   	m2m_valuez.Serializer.handle_m2m_field.<locals>.m2m_valueF   s     ,,...r   c                 P    t          | |j                                                  S r   )r4   r/   iteratorr   r,   s     r   queryset_iteratorz6Serializer.handle_m2m_field.<locals>.queryset_iteratorI   s     "3
33<<>>>r   c                 D                         | | j        j                  S r   )r'   r$   r!   )r-   r   s    r   r9   z.Serializer.handle_m2m_field.<locals>.m2m_valueN   s    11%HHHr   c                     t          | |j                                      d                               d                                          S )Nr!   )r4   r/   select_relatedonlyr;   r<   s     r   r=   z6Serializer.handle_m2m_field.<locals>.queryset_iteratorQ   s7    UZ00'--d!	r   _prefetched_objects_cachec                 &    g | ]} |          S r   r   ).0r5   r9   s     r   
<listcomp>z/Serializer.handle_m2m_field.<locals>.<listcomp>]   s#    (T(T(T7););(T(T(Tr   )r3   throughr$   auto_createdr2   r&   r   r4   getr/   r   )r   r   r,   r=   m2m_iterr9   s   `    @r   handle_m2m_fieldzSerializer.handle_m2m_field@   s    %+8 	U, "(-2 2 / / /? ? ? ?
I I I I I   s$?DDHH
!!#u-- H )U(T(T(T8(T(T(TDM%*%%%9	U 	Ur   c                     | j         S r   )r   r   s    r   getvaluezSerializer.getvalue_   s
    |r   N)__name__
__module____qualname____doc__internal_use_onlyr   r   r   r   r   r'   r0   r6   rJ   rL   r   r   r   r	   r	      s                    Q Q QG G G* * *U U U>    r   r	   F)usingignorenonexistentc          
   +     K   |                     dd          }i }| D ]H}	 t          |d                   }n# t          j        $ r |rY - w xY wi }d|v r	 |j        j                            |                    d                    ||j        j        j        <   nM# t          $ r@}	t          j        
                    |	|d         |                    d          d          d}	~	ww xY wi }
i }||vr&d |j                                        D             ||<   ||         }|d                                         D ]\  }}|r||vr|j                            |          }|j        rt          |j        t           j                  r	 t          j        ||||          }n\# t          j        $ rJ}	t          j        
                    |	j        |d         |                    d          |	j                  d}	~	ww xY w|t          j        k    r|||<   ||
|j        <   |j        rt          |j        t           j                  r	 t          j        ||||          }nM# t          $ r@}	t          j        
                    |	|d         |                    d          |          d}	~	ww xY w|t          j        k    r|||<   |||j        <   	 |                    |          ||j        <   # t          $ r@}	t          j        
                    |	|d         |                    d          |          d}	~	ww xY wt          j        |||          }t          j        ||
|          V  JdS )z
    Deserialize simple Python objects back into Django ORM instances.

    It's expected that you pass the Python objects themselves (instead of a
    stream or a string) to the constructor
    handle_forward_referencesFr   r!   Nc                     h | ]	}|j         
S r   )r/   )rD   fs     r   	<setcomp>zDeserializer.<locals>.<setcomp>   s    'Q'Q'Q1'Q'Q'Qr   r"   )pop
_get_modelr   DeserializationErrorr$   r!   	to_pythonrH   attname	ExceptionWithData
get_fieldsitems	get_fieldr3   
isinstancer   ManyToManyReldeserialize_m2m_valuesM2MDeserializationErrororiginal_excDEFER_FIELDr/   ManyToOneReldeserialize_fk_valuebuild_instanceDeserializedObject)object_listrR   rS   optionsrU   field_names_cachedModelr(   em2m_datadeferred_fieldsfield_names
field_namefield_valuer,   valuesr-   r   s                      r   Deserializerry   c   s      !(,G O O JF JF	qz**EE( 	 	 	  		
 199/4{~/G/Gd/T/TU[^+,,   /88qz155;;   )))'Q'Q8N8N8P8P'Q'Q'Qe$'. (){'8'8':': .	 .	#J  Z{%B%BK))*55E ! &j"F$8' ' &!8{E3L FF 3   3<<'
AEE$KK   T----8OE**+1HUZ((# 
"F$7) )  5{E3L EE !   3<<1W:quuT{{K   D,,,-8OE***/D''',{'C'CD$$    3<<1W:quuT{{K  
 !%u55%c8_EEEEEEUJF JFsq   7A
AAB
C%%;C  C%FG7-AG22G7I
J$$;JJ$K**
L44;L//L4c                     	 t          j        |           S # t          t          f$ r t	          j        d| z            w xY w)z6Look up a model from an "app_label.model_name" string.zInvalid model identifier: '%s')r   	get_modelLookupError	TypeErrorr   r[   )model_identifiers    r   rZ   rZ      sV    
~.///# 
 
 
',/??
 
 	

s    )?N)rP   django.appsr   django.core.serializersr   	django.dbr   r   django.utils.encodingr   r	   ry   rZ   r   r   r   <module>r      s           ( ( ( ( ( ( . . . . . . . . 3 3 3 3 3 3S S S S S S S Sn +eVF VF VF VF VFr
 
 
 
 
r   