ó
TR¹Nc           @   s¾   d  Z  d d l m Z d d l m Z d d l m Z 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 S(   s;   
Module for abstract serializer/unserializer base classes.
iÿÿÿÿ(   t   StringIO(   t   models(   t	   smart_strt   smart_unicode(   t   datetime_safet   SerializationErrorc           B   s   e  Z d  Z RS(   s,   Something bad happened during serialization.(   t   __name__t
   __module__t   __doc__(    (    (    sI   /home/panlixing/Python_Projects/gaeseries/django/core/serializers/base.pyR      s   t   DeserializationErrorc           B   s   e  Z d  Z RS(   s.   Something bad happened during deserialization.(   R   R   R   (    (    (    sI   /home/panlixing/Python_Projects/gaeseries/django/core/serializers/base.pyR	      s   t
   Serializerc           B   sn   e  Z d  Z e Z d „  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 t ƒ  ƒ |  _ | j d ƒ |  _ | j d t ƒ |  _ |  j ƒ  x | D]} |  j | ƒ xž | j	 j
 D] } | j ry | j d k rÎ |  j d k s¸ | j |  j k r|  j | | ƒ qq	|  j d k só | j d  |  j k r	|  j | | ƒ q	qy qy WxT | j	 j D]F } | j r|  j d k sJ| j |  j k r`|  j | | ƒ q`qqW|  j | ƒ qY W|  j ƒ  |  j ƒ  S(   s'   
        Serialize a queryset.
        t   streamt   fieldst   use_natural_keysiýÿÿÿN(   t   optionst   getR    R   t   selected_fieldst   FalseR   t   start_serializationt   start_objectt   _metat   local_fieldst	   serializet   relt   Nonet   attnamet   handle_fieldt   handle_fk_fieldt   many_to_manyt   handle_m2m_fieldt
   end_objectt   end_serializationt   getvalue(   t   selft   querysetR   t   objt   field(    (    sI   /home/panlixing/Python_Projects/gaeseries/django/core/serializers/base.pyR      s*    	
	!%	!
c         C   s   t  | j | ƒ ƒ S(   s6   
        Convert a field's value to a string.
        (   R   t   value_to_string(   R!   R#   R$   (    (    sI   /home/panlixing/Python_Projects/gaeseries/django/core/serializers/base.pyt   get_string_value9   s    c         C   s
   t  ‚ d S(   sA   
        Called when serializing of the queryset starts.
        N(   t   NotImplementedError(   R!   (    (    sI   /home/panlixing/Python_Projects/gaeseries/django/core/serializers/base.pyR   ?   s    c         C   s   d S(   s?   
        Called when serializing of the queryset ends.
        N(    (   R!   (    (    sI   /home/panlixing/Python_Projects/gaeseries/django/core/serializers/base.pyR   E   s    c         C   s
   t  ‚ d S(   s>   
        Called when serializing of an object starts.
        N(   R'   (   R!   R#   (    (    sI   /home/panlixing/Python_Projects/gaeseries/django/core/serializers/base.pyR   K   s    c         C   s   d S(   s<   
        Called when serializing of an object ends.
        N(    (   R!   R#   (    (    sI   /home/panlixing/Python_Projects/gaeseries/django/core/serializers/base.pyR   Q   s    c         C   s
   t  ‚ d S(   sW   
        Called to handle each individual (non-relational) field on an object.
        N(   R'   (   R!   R#   R$   (    (    sI   /home/panlixing/Python_Projects/gaeseries/django/core/serializers/base.pyR   W   s    c         C   s
   t  ‚ d S(   s6   
        Called to handle a ForeignKey field.
        N(   R'   (   R!   R#   R$   (    (    sI   /home/panlixing/Python_Projects/gaeseries/django/core/serializers/base.pyR   ]   s    c         C   s
   t  ‚ d S(   s5   
        Called to handle a ManyToManyField.
        N(   R'   (   R!   R#   R$   (    (    sI   /home/panlixing/Python_Projects/gaeseries/django/core/serializers/base.pyR   c   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).
        R    N(   t   callablet   getattrR   R   R    (   R!   (    (    sI   /home/panlixing/Python_Projects/gaeseries/django/core/serializers/base.pyR    i   s    (   R   R   R   R   t   internal_use_onlyR   R&   R   R   R   R   R   R   R   R    (    (    (    sI   /home/panlixing/Python_Projects/gaeseries/django/core/serializers/base.pyR
      s   									t   Deserializerc           B   s)   e  Z d  Z d „  Z d „  Z d „  Z RS(   s+   
    Abstract base deserializer class.
    c         K   sA   | |  _  t | t ƒ r* t | ƒ |  _ n	 | |  _ t j ƒ  d S(   sA   
        Init this serializer given a stream or a string
        N(   R   t
   isinstancet
   basestringR    R   R   t   get_apps(   R!   t   stream_or_stringR   (    (    sI   /home/panlixing/Python_Projects/gaeseries/django/core/serializers/base.pyt   __init__v   s
    		c         C   s   |  S(   N(    (   R!   (    (    sI   /home/panlixing/Python_Projects/gaeseries/django/core/serializers/base.pyt   __iter__„   s    c         C   s
   t  ‚ d S(   s8   Iteration iterface -- return the next item in the streamN(   R'   (   R!   (    (    sI   /home/panlixing/Python_Projects/gaeseries/django/core/serializers/base.pyt   next‡   s    (   R   R   R   R0   R1   R2   (    (    (    sI   /home/panlixing/Python_Projects/gaeseries/django/core/serializers/base.pyR+   q   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!   R#   R5   (    (    sI   /home/panlixing/Python_Projects/gaeseries/django/core/serializers/base.pyR0   —   s    	c         C   s)   d |  j  j j |  j  j j |  j  j f S(   Ns"   <DeserializedObject: %s.%s(pk=%s)>(   R4   R   t	   app_labelt   object_namet   pk(   R!   (    (    sI   /home/panlixing/Python_Projects/gaeseries/django/core/serializers/base.pyt   __repr__›   s    c         C   sq   t  j j |  j d | d t ƒ|  j rd | rd x3 |  j j ƒ  D] \ } } t |  j | | ƒ q> Wn  d  |  _ d  S(   Nt   usingt   raw(	   R   t   Modelt	   save_baseR4   t   TrueR5   t   itemst   setattrR   (   R!   t   save_m2mR:   t   accessor_namet   object_list(    (    sI   /home/panlixing/Python_Projects/gaeseries/django/core/serializers/base.pyt   saveŸ   s
    N(   R   R   R   R   R0   R9   R>   RD   (    (    (    sI   /home/panlixing/Python_Projects/gaeseries/django/core/serializers/base.pyR3   ‹   s   
	N(   R   R    t	   django.dbR   t   django.utils.encodingR   R   t   django.utilsR   t	   ExceptionR   R	   R4   R
   R+   R3   (    (    (    sI   /home/panlixing/Python_Projects/gaeseries/django/core/serializers/base.pyt   <module>   s   ^