B
    ©0H[Ÿ!  ã               @   s|   d dl 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 d dlmZmZ G dd	„ d	eƒZG d
d„ deƒZdS )é    N)ÚOrderedDict)Úapps)Úserializers)ÚBaseCommandÚCommandError)Úparse_apps_and_model_labels)ÚDEFAULT_DB_ALIASÚrouterc               @   s   e Zd ZdS )ÚProxyModelWarningN)Ú__name__Ú
__module__Ú__qualname__© r   r   úlC:\Users\HIRONO~1\AppData\Local\Temp\pip-install-6bm3nxem\django\django\core\management\commands\dumpdata.pyr
      s   r
   c               @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚCommandz„Output the contents of the database as a fixture of the given format (using each model's default manager unless --all is specified).c             C   sÂ   |j ddddd� |j dddd	d
� |j dd dtdd� |j dddtdd� |j ddddg dd� |j ddddd� |j ddd d!d� |j d"d#dd$d%d� |j d&d'd(d)� |j d*d+d d,d-d
� d S ).NÚargszapp_label[.ModelName]Ú*zHRestricts dumped data to the specified app_label or app_label.ModelName.)ÚmetavarÚnargsÚhelpz--formatÚjsonÚformatz7Specifies the output serialization format for fixtures.)ÚdefaultÚdestr   z--indentÚindentz>Specifies the indent level to use when pretty-printing output.)r   r   Útyper   z
--databaseÚstoreÚdatabasezXNominates a specific database to dump fixtures from. Defaults to the "default" database.)Úactionr   r   r   z-ez	--excludeÚexcludeÚappendzhAn app_label or app_label.ModelName to exclude (use multiple --exclude to exclude multiple apps/models).)r   r   r   r   z--natural-foreignÚ
store_trueÚuse_natural_foreign_keysz/Use natural foreign keys if they are available.)r   r   r   z--natural-primaryÚuse_natural_primary_keysz/Use natural primary keys if they are available.z-az--allÚuse_base_managerz–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.z--pksÚprimary_keysz…Only dump objects with given primary keys. Accepts a comma-separated list of keys. This option only works when you specify one model.)r   r   z-oz--outputÚoutputz.Specifies file to which the output is written.)Úadd_argumentÚintr   )ÚselfÚparserr   r   r   Úadd_arguments   s>    
zCommand.add_argumentsc                sb  |d }|d }|d ‰|d }|d }|d }|d }|d }	|d	 ‰|d
 }
|
rjdd„ |
  d¡D ƒ‰ng ‰t|ƒ\‰‰t|ƒdkr²ˆr’tdƒ‚t ‡fdd„t ¡ D ƒ¡‰ �n„t|ƒdkrÊˆrÊtdƒ‚tƒ ‰ �xb|D �]X}yÊ|  d¡\}}yt |¡}W n0 t	k
�r, } ztt
|ƒƒ‚W d d }~X Y nX |jd k�sD|ˆk�rFwØy| |¡}W n& t	k
�rz   td||f ƒ‚Y nX ˆ  |g ¡}|d k	�r¦||k�r¦| |¡ W qØ tk
�r0   ˆ�rÈtdƒ‚|}yt |¡}W n0 t	k
�r
 } ztt
|ƒƒ‚W d d }~X Y nX |jd k�s"|ˆk�r$wØd ˆ |< Y qØX qØW |t ¡ k�rxyt |¡ W n tjk
�rj   Y nX td| ƒ‚d‡ ‡‡‡‡fdd„	}y–d | j_d }d}|�rÔ| j ¡ �rÔ|d dk�rÔ| j}t|dd�ƒ}|�rät|dƒnd }z(tj||ƒ |||	|�p| j||d� W d |�r | ¡  X W n8 tk
�r\ } z|�r@‚ td| ƒ‚W d d }~X Y nX d S ) Nr   r   r   r   r&   Ú	tracebackr"   r#   r$   r%   c             S   s   g | ]}|  ¡ ‘qS r   )Ústrip)Ú.0Úpkr   r   r   ú
<listcomp>Q   s    z"Command.handle.<locals>.<listcomp>ú,r   z,You can only use --pks option with one modelc             3   s$   | ]}|j d k	r|ˆ kr|V  qd S )N)Úmodels_module)r.   Ú
app_config)Úexcluded_appsr   r   ú	<genexpr>[   s    z!Command.handle.<locals>.<genexpr>é   Ú.zUnknown model: %s.%sz Unknown serialization format: %sFc             3   sÂ   t  ˆ  ¡ ¡}x®|D ]¦}|ˆkr"q|jjrL|jj|krLtjd|jj t	d� |jjst
 ˆ|¡rˆrl|j}n|j}| ˆ¡ |jjj¡}ˆr˜|jˆd�}| r¬| ¡  ¡ V  q| ¡ E dH  qW dS )z•
            Collate the objects to be serialized. If count_only is True, just
            count the number of objects to be serialized.
            z,%s is a proxy model and won't be serialized.)Úcategory)Zpk__inN)r   Zsort_dependenciesÚitemsZ_metaÚproxyZproxy_for_modelÚwarningsÚwarnÚlabelr
   r	   Zallow_migrate_modelZ_base_managerZ_default_managerÚusingZorder_byr/   ÚnameÚfilterÚcountÚiterator)Ú
count_onlyÚmodelsÚmodelÚobjectsZqueryset)Úapp_listÚexcluded_modelsr%   r$   r>   r   r   Úget_objects�   s$    

z#Command.handle.<locals>.get_objectsÚ	verbosityT)rC   Úw)r   r"   r#   ÚstreamÚprogress_outputÚobject_countz Unable to serialize database: %s)F)Úsplitr   Úlenr   r   Úfromkeysr   Zget_app_configsZget_app_configÚLookupErrorÚstrr2   Z	get_modelÚ
setdefaultr    Ú
ValueErrorr   Zget_public_serializer_formatsZget_serializerZSerializerDoesNotExistÚstdoutZendingÚisattyÚsumÚopenÚ	serializeÚcloseÚ	Exception)r)   Z
app_labelsÚoptionsr   r   Zexcludesr&   Úshow_tracebackr"   r#   Zpksr=   Z	app_labelZmodel_labelr3   ÚerE   Zapp_list_valuerI   rM   rN   rL   r   )rG   r4   rH   r%   r$   r>   r   ÚhandleD   sœ    

 zCommand.handleN)r   r   r   r   r+   r`   r   r   r   r   r      s   /r   )r;   Úcollectionsr   Zdjango.appsr   Zdjango.corer   Zdjango.core.management.baser   r   Zdjango.core.management.utilsr   Z	django.dbr   r	   ÚWarningr
   r   r   r   r   r   Ú<module>   s   