ó
ø¢TQc           @  s¡   d  Z  d d l m Z d d l m Z d d l m Z d d l m Z m	 Z	 d d l
 m Z m Z d d l m Z d e j f d	 „  ƒ  YZ d
 „  Z d „  Z d S(   u¸   
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.
iÿÿÿÿ(   t   unicode_literals(   t   settings(   t   base(   t   modelst   DEFAULT_DB_ALIAS(   t
   smart_textt   is_protected_type(   t   sixt
   Serializerc           B  se   e  Z d  Z e Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z d „  Z d	 „  Z RS(
   u8   
    Serializes a QuerySet to basic Python objects.
    c         C  s   d  |  _ g  |  _ d  S(   N(   t   Nonet   _currentt   objects(   t   self(    (    s7   ../Django//lib/python/django/core/serializers/python.pyt   start_serialization   s    	c         C  s   d  S(   N(    (   R   (    (    s7   ../Django//lib/python/django/core/serializers/python.pyt   end_serialization   s    c         C  s   i  |  _  d  S(   N(   R
   (   R   t   obj(    (    s7   ../Django//lib/python/django/core/serializers/python.pyt   start_object   s    c         C  s&   |  j  j |  j | ƒ ƒ d  |  _ d  S(   N(   R   t   appendt   get_dump_objectR	   R
   (   R   R   (    (    s7   ../Django//lib/python/django/core/serializers/python.pyt
   end_object    s    c         C  s7   i t  | j ƒ  d t ƒd 6t  | j ƒ d 6|  j d 6S(   Nt   strings_onlyu   pku   modelu   fields(   R   t   _get_pk_valt   Truet   _metaR
   (   R   R   (    (    s7   ../Django//lib/python/django/core/serializers/python.pyR   $   s    c         C  sK   | j  | ƒ } t | ƒ r. | |  j | j <n | j | ƒ |  j | j <d  S(   N(   t   _get_val_from_objR   R
   t   namet   value_to_string(   R   R   t   fieldt   value(    (    s7   ../Django//lib/python/django/core/serializers/python.pyt   handle_field+   s    c         C  sw   |  j  rN t | j j d ƒ rN t | | j ƒ } | rE | j ƒ  } qc d  } n t | | j ƒ  ƒ } | |  j	 | j <d  S(   Nu   natural_key(
   t   use_natural_keyst   hasattrt   relt   tot   getattrR   t   natural_keyR	   t   get_attnameR
   (   R   R   R   t   relatedR   (    (    s7   ../Django//lib/python/django/core/serializers/python.pyt   handle_fk_field5   s    	c         C  s‡   | j  j j j rƒ |  j r< t | j  j d ƒ r< d „  } n	 d „  } g  t | | j ƒ j	 ƒ  D] } | | ƒ ^ q^ |  j
 | j <n  d  S(   Nu   natural_keyc         S  s
   |  j  ƒ  S(   N(   R#   (   R   (    (    s7   ../Django//lib/python/django/core/serializers/python.pyt   <lambda>C   s    c         S  s   t  |  j ƒ  d t ƒS(   NR   (   R   R   R   (   R   (    (    s7   ../Django//lib/python/django/core/serializers/python.pyR'   E   s    (   R    t   throughR   t   auto_createdR   R   R!   R"   R   t   iteratorR
   (   R   R   R   t	   m2m_valueR%   (    (    s7   ../Django//lib/python/django/core/serializers/python.pyt   handle_m2m_field@   s    	c         C  s   |  j  S(   N(   R   (   R   (    (    s7   ../Django//lib/python/django/core/serializers/python.pyt   getvalueI   s    (   t   __name__t
   __module__t   __doc__R   t   internal_use_onlyR   R   R   R   R   R   R&   R,   R-   (    (    (    s7   ../Django//lib/python/django/core/serializers/python.pyR      s   						
			c      	   +  sû  | j  d t ƒ ‰ | j  d t ƒ } t j ƒ  xÆ|  D]¾} t | d ƒ } i | j j j | d ƒ | j j j	 6} i  } | j j
 ƒ  } xPt j | d ƒ D];\ } }	 | rÁ | | k rÁ q n  t |	 t ƒ r÷ t |	 | j d t j ƒ d t ƒ}	 n  | j j | ƒ ‰  ˆ  j rŒt ˆ  j t j ƒ rŒt ˆ  j j j d ƒ rT‡ ‡  f d	 †  }
 n ‡  f d
 †  }
 g  |	 D] } |
 | ƒ ^ qj| ˆ  j <q ˆ  j rÂt ˆ  j t j ƒ rÂ|	 d k	 r²t ˆ  j j j d ƒ rt |	 d ƒ rJt |	 t j ƒ rJˆ  j j j j ˆ ƒ j |	 Œ  } t  | ˆ  j j! ƒ } ˆ  j j j j j rq| j } qqn' ˆ  j j j j ˆ  j j! ƒ j |	 ƒ } | | ˆ  j	 <q¿ˆ  j j j j ˆ  j j! ƒ j |	 ƒ | ˆ  j	 <qØd | ˆ  j	 <q ˆ  j |	 ƒ | ˆ  j <q Wt" j# | |   | ƒ Vq5 Wd S(   uÃ   
    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
    u   usingu   ignorenonexistentu   modelu   pku   fieldsu   encodingR   u   get_by_natural_keyc           sg   t  |  d ƒ rD t |  t j ƒ rD ˆ j j j j ˆ  ƒ j |  Œ  j	 St
 ˆ j j j j	 j |  ƒ ƒ Sd  S(   Nu   __iter__(   R   t
   isinstanceR   t	   text_typeR    R!   t   _default_managert
   db_managert   get_by_natural_keyt   pkR   R   t	   to_python(   R   (   t   dbR   (    s7   ../Django//lib/python/django/core/serializers/python.pyt   m2m_convertn   s    ""c           s   t  ˆ  j j j j j |  ƒ ƒ S(   N(   R   R    R!   R   R7   R8   (   t   v(   R   (    s7   ../Django//lib/python/django/core/serializers/python.pyR'   t   s    u   __iter__N($   t   popR   t   FalseR   t   get_appst
   _get_modelR   R7   R8   t   attnamet   get_all_field_namesR   t	   iteritemsR2   t   strR   t   getR   t   DEFAULT_CHARSETR   t	   get_fieldR    t   ManyToManyRelR   R!   R4   R   t   ManyToOneRelR	   R3   R5   R6   R"   t
   field_nameR   t   DeserializedObject(   t   object_listt   optionst   ignoret   dt   Modelt   datat   m2m_datat   model_fieldsRI   t   field_valueR:   R7   R   R   (    (   R   R9   s7   ../Django//lib/python/django/core/serializers/python.pyt   DeserializerM   sB    
) ')"!'1c         C  s\   y t  j |  j d ƒ Œ  } Wn t k
 r5 d } n X| d k rX t j d |  ƒ ‚ n  | S(   uK   
    Helper to look up a model from an "app_label.module_name" string.
    u   .u   Invalid model identifier: '%s'N(   R   t	   get_modelt   splitt	   TypeErrorR	   R   t   DeserializationError(   t   model_identifierRO   (    (    s7   ../Django//lib/python/django/core/serializers/python.pyR?      s    
N(   R0   t
   __future__R    t   django.confR   t   django.core.serializersR   t	   django.dbR   R   t   django.utils.encodingR   R   t   django.utilsR   R   RT   R?   (    (    (    s7   ../Django//lib/python/django/core/serializers/python.pyt   <module>   s   >	C