ó
®â0_c           @   sÐ   d  Z  d d l m Z d d l m Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d	 „  ƒ  YZ	 d
 e
 f d „  ƒ  YZ d e
 f d „  ƒ  YZ d e j f d „  ƒ  YZ d e
 f d „  ƒ  YZ d „  Z d S(   s;   
Module for abstract serializer/unserializer base classes.
iÿÿÿÿ(   t   models(   t   sixt   SerializerDoesNotExistc           B   s   e  Z d  Z RS(   s'   The requested serializer was not found.(   t   __name__t
   __module__t   __doc__(    (    (    s>   /tmp/pip-unpacked-wheel-BAJOf3/django/core/serializers/base.pyR      s   t   SerializationErrorc           B   s   e  Z d  Z RS(   s,   Something bad happened during serialization.(   R   R   R   (    (    (    s>   /tmp/pip-unpacked-wheel-BAJOf3/django/core/serializers/base.pyR      s   t   DeserializationErrorc           B   s   e  Z d  Z e d „  ƒ Z RS(   s.   Something bad happened during deserialization.c         C   s   |  d | | | | f ƒ S(   ss   
        Factory method for creating a deserialization error which has a more
        explanatory message.
        s#   %s: (%s:pk=%s) field_value was '%s'(    (   t   clst   original_exct   modelt   fkt   field_value(    (    s>   /tmp/pip-unpacked-wheel-BAJOf3/django/core/serializers/base.pyt   WithData   s    (   R   R   R   t   classmethodR   (    (    (    s>   /tmp/pip-unpacked-wheel-BAJOf3/django/core/serializers/base.pyR      s   t   ProgressBarc           B   s    e  Z d  Z d „  Z d „  Z RS(   iK   c         C   s   | |  _  | |  _ d |  _ d  S(   Ni    (   t   outputt   total_countt	   prev_done(   t   selfR   R   (    (    s>   /tmp/pip-unpacked-wheel-BAJOf3/django/core/serializers/base.pyt   __init__!   s    		c         C   sÈ   |  j  s d  S| d |  j } | |  j d } |  j | k rB d  S| |  _ |  j d k r` d n d } |  j  j | d d | d |  j | d ƒ | |  j k r· |  j  j d	 ƒ n  |  j  j ƒ  d  S(
   Nid   i   t    s   t   [t   .t    t   ]s   
(   R   R   t   progress_widthR   t   writet   flush(   R   t   countt   perct   donet   cr(    (    s>   /tmp/pip-unpacked-wheel-BAJOf3/django/core/serializers/base.pyt   update&   s    		/(   R   R   R   R   R!   (    (    (    s>   /tmp/pip-unpacked-wheel-BAJOf3/django/core/serializers/base.pyR      s   	t
   Serializerc           B   st   e  Z d  Z e Z e Z e j Z	 d „  Z
 d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d	 „  Z RS(
   s)   
    Abstract serializer base class.
    c         K   s  | |  _  | j d |  j ƒ  ƒ |  _ | j d d ƒ |  _ | j d t ƒ |  _ | j d t ƒ |  _ |  j	 | j d d ƒ | j d d ƒ ƒ } |  j
 ƒ  t |  _ x`t | d d	 ƒD]L\ } } |  j | ƒ | j j } xž | j j D] } | j rå | j d k r:|  j d k s$| j |  j k rr|  j | | ƒ qrqu|  j d k s_| j d
  |  j k ru|  j | | ƒ quqå qå WxT | j j D]F } | j r†|  j d k s¶| j |  j k rÌ|  j | | ƒ qÌq†q†W|  j | ƒ | j | ƒ |  j r³ t |  _ q³ q³ W|  j ƒ  |  j ƒ  S(   s'   
        Serialize a queryset.
        t   streamt   fieldst   use_natural_foreign_keyst   use_natural_primary_keyst   progress_outputt   object_counti    t   starti   iýÿÿÿN(   t   optionst   popt   stream_classR#   t   Nonet   selected_fieldst   FalseR%   R&   t   progress_classt   start_serializationt   Truet   firstt	   enumeratet   start_objectt   _metat   concrete_modelt   local_fieldst	   serializet   remote_fieldt   attnamet   handle_fieldt   handle_fk_fieldt   many_to_manyt   handle_m2m_fieldt
   end_objectR!   t   end_serializationt   getvalue(   R   t   querysetR*   t   progress_barR   t   objR7   t   field(    (    s>   /tmp/pip-unpacked-wheel-BAJOf3/django/core/serializers/base.pyR9   @   s:    	$
		!%	!	
c         C   s   t  d ƒ ‚ d S(   sA   
        Called when serializing of the queryset starts.
        sD   subclasses of Serializer must provide a start_serialization() methodN(   t   NotImplementedError(   R   (    (    s>   /tmp/pip-unpacked-wheel-BAJOf3/django/core/serializers/base.pyR1   h   s    c         C   s   d S(   s?   
        Called when serializing of the queryset ends.
        N(    (   R   (    (    s>   /tmp/pip-unpacked-wheel-BAJOf3/django/core/serializers/base.pyRA   n   s    c         C   s   t  d ƒ ‚ d S(   s>   
        Called when serializing of an object starts.
        s=   subclasses of Serializer must provide a start_object() methodN(   RG   (   R   RE   (    (    s>   /tmp/pip-unpacked-wheel-BAJOf3/django/core/serializers/base.pyR5   t   s    c         C   s   d S(   s<   
        Called when serializing of an object ends.
        N(    (   R   RE   (    (    s>   /tmp/pip-unpacked-wheel-BAJOf3/django/core/serializers/base.pyR@   z   s    c         C   s   t  d ƒ ‚ d S(   sW   
        Called to handle each individual (non-relational) field on an object.
        s>   subclasses of Serializer must provide an handle_field() methodN(   RG   (   R   RE   RF   (    (    s>   /tmp/pip-unpacked-wheel-BAJOf3/django/core/serializers/base.pyR<   €   s    c         C   s   t  d ƒ ‚ d S(   s6   
        Called to handle a ForeignKey field.
        sA   subclasses of Serializer must provide an handle_fk_field() methodN(   RG   (   R   RE   RF   (    (    s>   /tmp/pip-unpacked-wheel-BAJOf3/django/core/serializers/base.pyR=   †   s    c         C   s   t  d ƒ ‚ d S(   s5   
        Called to handle a ManyToManyField.
        sB   subclasses of Serializer must provide an handle_m2m_field() methodN(   RG   (   R   RE   RF   (    (    s>   /tmp/pip-unpacked-wheel-BAJOf3/django/core/serializers/base.pyR?   Œ   s    c         C   s,   t  t |  j d d ƒ ƒ r( |  j j ƒ  Sd S(   sn   
        Return the fully serialized queryset (or None if the output stream is
        not seekable).
        RB   N(   t   callablet   getattrR#   R-   RB   (   R   (    (    s>   /tmp/pip-unpacked-wheel-BAJOf3/django/core/serializers/base.pyRB   ’   s    (   R   R   R   R/   t   internal_use_onlyR   R0   R   t   StringIOR,   R9   R1   RA   R5   R@   R<   R=   R?   RB   (    (    (    s>   /tmp/pip-unpacked-wheel-BAJOf3/django/core/serializers/base.pyR"   5   s   		(							t   Deserializerc           B   s)   e  Z d  Z d „  Z d „  Z d „  Z RS(   s+   
    Abstract base deserializer class.
    c         K   s=   | |  _  t | t j ƒ r0 t j | ƒ |  _ n	 | |  _ d S(   sA   
        Init this serializer given a stream or a string
        N(   R*   t
   isinstanceR   t   string_typesRK   R#   (   R   t   stream_or_stringR*   (    (    s>   /tmp/pip-unpacked-wheel-BAJOf3/django/core/serializers/base.pyR       s    	c         C   s   |  S(   N(    (   R   (    (    s>   /tmp/pip-unpacked-wheel-BAJOf3/django/core/serializers/base.pyt   __iter__ª   s    c         C   s   t  d ƒ ‚ d S(   s8   Iteration iterface -- return the next item in the streams;   subclasses of Deserializer must provide a __next__() methodN(   RG   (   R   (    (    s>   /tmp/pip-unpacked-wheel-BAJOf3/django/core/serializers/base.pyt   __next__­   s    (   R   R   R   R   RP   RQ   (    (    (    s>   /tmp/pip-unpacked-wheel-BAJOf3/django/core/serializers/base.pyRL   ›   s   	
	t   DeserializedObjectc           B   s2   e  Z d  Z d d „ Z d „  Z e d d „ Z RS(   se  
    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.)
    c         C   s   | |  _  | |  _ d  S(   N(   t   objectt   m2m_data(   R   RE   RT   (    (    s>   /tmp/pip-unpacked-wheel-BAJOf3/django/core/serializers/base.pyR   ¾   s    	c         C   s&   d |  j  j |  j j j |  j j f S(   Ns   <%s: %s(pk=%s)>(   t	   __class__R   RS   R6   t   labelt   pk(   R   (    (    s>   /tmp/pip-unpacked-wheel-BAJOf3/django/core/serializers/base.pyt   __repr__Â   s    	c         K   sz   t  j j |  j d | d t | |  j rm | rm x9 |  j j ƒ  D]% \ } } t |  j | ƒ j | ƒ qA Wn  d  |  _ d  S(   Nt   usingt   raw(
   R    t   Modelt	   save_baseRS   R2   RT   t   itemsRI   t   setR-   (   R   t   save_m2mRY   t   kwargst   accessor_namet   object_list(    (    s>   /tmp/pip-unpacked-wheel-BAJOf3/django/core/serializers/base.pyt   saveÉ   s
    " N(   R   R   R   R-   R   RX   R2   Rc   (    (    (    s>   /tmp/pip-unpacked-wheel-BAJOf3/django/core/serializers/base.pyRR   ²   s   
	c         C   s‹   |  |   } | j  d k r‡ t |  d ƒ r‡ t |  j d ƒ r‡ | j ƒ  } y% |  j j | ƒ j | Œ  j  | _  Wq‡ |  j k
 rƒ q‡ Xn  | S(   s¦   
    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.
    t   natural_keyt   get_by_natural_keyN(   RW   R-   t   hasattrt   _default_managerRd   t
   db_managerRe   t   DoesNotExist(   R[   t   datat   dbRE   Rd   (    (    s>   /tmp/pip-unpacked-wheel-BAJOf3/django/core/serializers/base.pyt   build_instance×   s    %N(   R   t	   django.dbR    t   django.utilsR   t   KeyErrorR   t	   ExceptionR   R   RS   R   R"   t   IteratorRL   RR   Rl   (    (    (    s>   /tmp/pip-unpacked-wheel-BAJOf3/django/core/serializers/base.pyt   <module>   s   f%