ó
‹*Pc           @   s   d  d l  m Z d  d l m Z m Z d  d l m Z d  d l m Z m	 Z	 d  d l
 m Z d  d l m Z d e f d „  ƒ  YZ d	 „  Z d
 S(   iÿÿÿÿ(   t   ImproperlyConfigured(   t   BaseCommandt   CommandError(   t   serializers(   t   routert   DEFAULT_DB_ALIAS(   t
   SortedDict(   t   make_optiont   Commandc           B   só   e  Z e j e d  d d d d d d ƒe d d d" d d d	 d
 d d ƒe d d d d d d e d d ƒe d d d d d d d g  d d ƒe d d d d d d d e d d ƒe d d d d d d d e d d ƒf Z d Z d  Z	 d! „  Z
 RS(#   s   --formatt   defaultt   jsont   destt   formatt   helps7   Specifies the output serialization format for fixtures.s   --indentt   indentt   typet   ints=   Specifies the indent level to use when pretty-printing outputs
   --databaset   actiont   storet   databasesX   Nominates a specific database to dump fixtures from. Defaults to the "default" database.s   -es	   --excludet   excludet   appendsd   An appname or appname.ModelName to exclude (use multiple --exclude to exclude multiple apps/models).s   -ns	   --naturalt
   store_truet   use_natural_keyss'   Use natural keys if they are available.s   -as   --allt   use_base_managers–   Use Django's base manager to dump all models stored in the database, including those that would otherwise be filtered or modified by a custom manager.s„   Output the contents of the database as a fixture of the given format (using each model's default manager unless --all is specified).s   [appname appname.ModelName ...]c      	      sÀ  d d l  m } m } m } | j d ƒ } | j d ƒ } | j d ƒ ‰ | j d ƒ } | j d ƒ }	 | j d ƒ }
 | j d	 ƒ ‰ t ƒ  ‰  t ƒ  ‰ x« | D]£ } d
 | k r | j d
 d ƒ \ } } | | | ƒ } | sð t d | ƒ ‚ n  ˆ j | ƒ qž y | | ƒ } ˆ  j | ƒ Wqž t	 k
 r@t d | ƒ ‚ qž Xqž Wt
 | ƒ d k ryt ‡  f d †  | ƒ  Dƒ ƒ ‰ ngt ƒ  ‰ x[| D]S} yã | j d
 ƒ \ } } y | | ƒ } Wn! t	 k
 rÚt d | ƒ ‚ n X| ˆ  k ríw‰n  | | | ƒ } | d  k r!t d | | f ƒ ‚ n  | ˆ j ƒ  k rdˆ | rq| ˆ | k rqˆ | j | ƒ qqn | g ˆ | <Wq‰t k
 rÛ| } y | | ƒ } Wn! t	 k
 r»t d | ƒ ‚ n X| ˆ  k rÎq‰n  d  ˆ | <q‰Xq‰W| t j ƒ  k rt d | ƒ ‚ n  y t j | ƒ Wn! t k
 r9t d | ƒ ‚ n X‡ ‡ ‡ ‡ f d †  } y8 d  |  j _ t j | | ƒ  d | d |
 d |  j ƒWn/ t k
 r»} |	 r¨‚  n  t d | ƒ ‚ n Xd  S(   Niÿÿÿÿ(   t   get_appt   get_appst	   get_modelR   R   R   R   t	   tracebackR   R   t   .i   s   Unknown model in excludes: %ss   Unknown app in excludes: %si    c         3   s'   |  ] } | ˆ  k r | d  f Vq d  S(   N(   t   None(   t   .0t   app(   t   excluded_apps(    sA   ../Django//lib/python/django/core/management/commands/dumpdata.pys	   <genexpr>:   s    s   Unknown application: %ss   Unknown model: %s.%ss    Unknown serialization format: %sc          3   s§   x  t  ˆ  j ƒ  ƒ D]Œ }  |  ˆ k r+ q n  |  j j r t j ˆ |  ƒ r ˆ r\ |  j } n	 |  j } x7 | j ˆ ƒ j	 |  j j
 j ƒ j ƒ  D] } | Vq Wq q Wd  S(   N(   t   sort_dependenciest   itemst   _metat   proxyR   t   allow_syncdbt   _base_managert   _default_managert   usingt   order_byt   pkt   namet   iterator(   t   modelt   objectst   obj(   t   app_listt   excluded_modelsR)   R   (    sA   ../Django//lib/python/django/core/management/commands/dumpdata.pyt   get_objectsd   s    	t   streams    Unable to serialize database: %s(   t   django.db.modelsR   R   R   t   gett   sett   splitR   t   addR    t   lenR   R   t   keysR   t
   ValueErrorR   t   get_public_serializer_formatst   get_serializert   KeyErrort   stdoutt   endingt	   serializet	   Exception(   t   selft
   app_labelst   optionsR   R   R   R   R   t   excludest   show_tracebackR   R   t	   app_labelt
   model_namet	   model_objt   app_objt   labelt   model_labelR    R.   R3   t   e(    (   R!   R1   R)   R2   R   sA   ../Django//lib/python/django/core/management/commands/dumpdata.pyt   handle   s‚    		"	N(   t   __name__t
   __module__R   t   option_listR   R   R   t   FalseR   t   argsRP   (    (    (    sA   ../Django//lib/python/django/core/management/commands/dumpdata.pyR   	   s    c            sŒ  d d l  m } m } g  } t ƒ  ‰  xo|  D]g\ } ‰ ˆ d k rS | | ƒ ‰ n  x=ˆ D]5} ˆ  j | ƒ t | d ƒ rÅ t | j d g  ƒ } | rË g  | D] } | | j	 d ƒ Œ  ^ qž } qË n g  } x` | j
 j D]R } t | j d ƒ rØ | j j }	 t |	 d ƒ r*|	 | k r*| j |	 ƒ q*qØ qØ WxK | j
 j D]= } | j j }	 t |	 d ƒ r;|	 | k r;| j |	 ƒ q;q;W| j | | f ƒ qZ Wq, W| j ƒ  g  ‰ xÞ | r‡g  }
 t } x„ | rB| j ƒ  \ } } t } x0 ‡  ‡ f d †  | Dƒ D] } | s÷t } q÷q÷W| r,ˆ j | ƒ t } q¿|
 j | | f ƒ q¿W| s~t d d	 j d
 „  t |
 d d „  ƒDƒ ƒ ƒ ‚ n  |
 } qªWˆ S(   s  Sort a list of app,modellist pairs into a single list of models.

    The single list of models is sorted so that any model with a natural key
    is serialized before a normal model, and any model with a natural key
    dependency has it's dependencies serialized first.
    iÿÿÿÿ(   R   t
   get_modelst   natural_keyt   dependenciesR   t   toc         3   s'   |  ] } | ˆ  k p | ˆ k Vq d  S(   N(    (   R   t   d(   t   modelst
   model_list(    sA   ../Django//lib/python/django/core/management/commands/dumpdata.pys	   <genexpr>µ   s    s9   Can't resolve dependencies for %s in serialized app list.s   , c         s   s1   |  ]' \ } } d  | j  j | j  j f Vq d S(   s   %s.%sN(   R$   RI   t   object_name(   R   R.   t   deps(    (    sA   ../Django//lib/python/django/core/management/commands/dumpdata.pys	   <genexpr>¿   s   t   keyc         S   s   |  d j  S(   Ni    (   RQ   (   R0   (    (    sA   ../Django//lib/python/django/core/management/commands/dumpdata.pyt   <lambda>À   s    N(   R5   R   RV   R7   R   R9   t   hasattrt   getattrRW   R8   R$   t   fieldst   relRY   R   t   many_to_manyt   reverseRT   t   popt   TrueR   t   joint   sorted(   R1   R   RV   t   model_dependenciesR    R.   R^   RZ   t   fieldt	   rel_modelt   skippedt   changedt   foundt	   candidate(    (   R[   R\   sA   ../Django//lib/python/django/core/management/commands/dumpdata.pyR"   {   sX    	.
			 	#
N(   t   django.core.exceptionsR    t   django.core.management.baseR   R   t   django.coreR   t	   django.dbR   R   t   django.utils.datastructuresR   t   optparseR   R   R"   (    (    (    sA   ../Django//lib/python/django/core/management/commands/dumpdata.pyt   <module>   s   r