3
g                 @   sf   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 dej
Z
edd	d
dZd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               @   sd   e Zd ZdZdZdd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd Zdd Zdd ZdS )
Serializerz7
    Serialize a QuerySet to basic Python objects.
    Tc             C   s   d | _ g | _d S )N)_currentobjects)self r   \/var/www/tester-filtro-web/env/lib/python3.6/site-packages/django/core/serializers/python.pystart_serialization   s    zSerializer.start_serializationc             C   s   d S )Nr   )r
   r   r   r   end_serialization   s    zSerializer.end_serializationc             C   s
   i | _ d S )N)r   )r
   objr   r   r   start_object   s    zSerializer.start_objectc             C   s   | j j| j| d | _d S )N)r	   appendget_dump_objectr   )r
   r   r   r   r   
end_object   s    zSerializer.end_objectc             C   sD   dt |ji}| j s"t|d r6| j||jj|d< | j|d< |S )Nmodelnatural_keypkfields)str_metaZuse_natural_primary_keyshasattr_value_from_fieldr   r   )r
   r   datar   r   r   r   "   s
    
zSerializer.get_dump_objectc             C   s    |j |}t|r|S |j|S )N)Zvalue_from_objectr   Zvalue_to_string)r
   r   fieldvaluer   r   r   r   )   s    
zSerializer._value_from_fieldc             C   s   | j ||| j|j< d S )N)r   r   name)r
   r   r   r   r   r   handle_field0   s    zSerializer.handle_fieldc             C   sP   | j r4t|jjdr4t||j}|r.|j }q@d }n| j||}|| j|j< d S )Nr   )	use_natural_foreign_keysr   remote_fieldr   getattrr   r   r   r   )r
   r   r   relatedr   r   r   r   handle_fk_field3   s    
zSerializer.handle_fk_fieldc                sv   |j jjjrrjr*t|j jdr*dd  nfdd t|di j|j	t||j	j
 } fdd|D j|j	< d S )Nr   c             S   s   | j  S )N)r   )r   r   r   r   	m2m_valueA   s    z.Serializer.handle_m2m_field.<locals>.m2m_valuec                s    j | | jjS )N)r   r   r   )r   )r
   r   r   r&   D   s    Z_prefetched_objects_cachec                s   g | ]} |qS r   r   ).0r$   )r&   r   r   
<listcomp>J   s    z/Serializer.handle_m2m_field.<locals>.<listcomp>)r"   Zthroughr   Zauto_createdr!   r   r   r#   getr   iteratorr   )r
   r   r   Zm2m_iterr   )r&   r
   r   handle_m2m_field>   s    
zSerializer.handle_m2m_fieldc             C   s   | j S )N)r	   )r
   r   r   r   getvalueL   s    zSerializer.getvalueN)__name__
__module____qualname____doc__Zinternal_use_onlyr   r   r   r   r   r   r    r%   r+   r,   r   r   r   r   r      s   r   F)usingignorenonexistentc         )   k   s  |j dd}i }x| D ]}yt|d }W n  tjk
rN   |rHwn Y nX i }d|kry"|jjj|jd||jjj< W n> t	k
r }	 z"tjj
|	|d |jddW Y dd}	~	X nX i }
i }||krdd |jj D ||< || }x|d j D ]\}}|r||krq|jj|}|jrt|jtjrytj||||}W nF tjk
r }	 z&tjj
|	j|d |jd|	jW Y dd}	~	X nX |tjkr|||< n
||
|j< q|jrLt|jtjrLytj||||}W n@ t	k
r( }	 z"tjj
|	|d |jd|W Y dd}	~	X nX |tjkr@|||< n
|||j< qy|j|||j< W q t	k
r }	 z"tjj
|	|d |jd|W Y dd}	~	X qX qW tj|||}tj||
|V  qW d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             S   s   h | ]
}|j qS r   )r   )r'   fr   r   r   	<setcomp>m   s    zDeserializer.<locals>.<setcomp>r   )pop
_get_modelr   DeserializationErrorr   r   Z	to_pythonr)   Zattname	ExceptionZWithDataZ
get_fieldsitems	get_fieldr"   
isinstancer   ZManyToManyRelZdeserialize_m2m_valuesZM2MDeserializationErrorZoriginal_excZDEFER_FIELDr   ZManyToOneRelZdeserialize_fk_valueZbuild_instanceZDeserializedObject)object_listr1   r2   optionsr3   Zfield_names_cachedZModelr   eZm2m_dataZdeferred_fieldsfield_names
field_nameZfield_valuer   valuesr   r   r   r   r   DeserializerP   s\    ".2
.
2rD   c             C   s6   y
t j| S  ttfk
r0   tjd|  Y nX dS )z6Look up a model from an "app_label.model_name" string.zInvalid model identifier: '%s'N)r   Z	get_modelLookupError	TypeErrorr   r8   )Zmodel_identifierr   r   r   r7      s    
r7   N)r0   Zdjango.appsr   Zdjango.core.serializersr   Z	django.dbr   r   Zdjango.utils.encodingr   r   rD   r7   r   r   r   r   <module>   s   CH