a
    LcòfÐ*  ã                   @   sÐ   d dl Z d dlZd dl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 zd dlZdZW n ey‚   dZY n0 zd dlZdZW n eyª   dZY n0 G d	d
„ d
eƒZG dd„ deƒZdS )é    N)Úapps)Úserializers)ÚBaseCommandÚCommandError)Úparse_apps_and_model_labels)ÚDEFAULT_DB_ALIASÚrouterTFc                   @   s   e Zd ZdS )ÚProxyModelWarningN)Ú__name__Ú
__module__Ú__qualname__© r   r   úe/home/httpd/docs/test/DocsMgr/lib/python3.9/site-packages/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	� |j d
tdd� |j dtdd	� |j 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 S )(NÚargszapp_label[.ModelName]Ú*zHRestricts dumped data to the specified app_label or app_label.ModelName.)ÚmetavarÚnargsÚhelpz--formatÚjsonz7Specifies the output serialization format for fixtures.)Údefaultr   z--indentz>Specifies the indent level to use when pretty-printing output.)Útyper   z
--databasezXNominates a specific database to dump fixtures from. Defaults to the "default" database.z-ez	--excludeÚappendzhAn app_label or app_label.ModelName to exclude (use multiple --exclude to exclude multiple apps/models).)Úactionr   r   z--natural-foreignÚ
store_trueÚuse_natural_foreign_keysz/Use natural foreign keys if they are available.)r   Údestr   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--outputz.Specifies file to which the output is written.)r   )Úadd_argumentÚintr   )ÚselfÚparserr   r   r   Úadd_arguments$   sn    û	ýýýûüüúýÿzCommand.add_argumentsc                    s\  |d }|d }|d ‰|d }|d }|d }|d ‰|d }|d	 ‰|d
 }	|	rjdd„ |	  d¡D ƒ‰ng ‰t|ƒ\‰‰|sªˆrŠtdƒ‚t ‡fdd„t ¡ D ƒ¡‰ �n€t|ƒdkrÂˆrÂtdƒ‚i ‰ |D �]\}
zÌ|
  d¡\}}zt |¡}W n2 t	�y  } ztt
|ƒƒ‚W Y d }~n
d }~0 0 |jd u �s8|ˆv �r<W qÊz| |¡}W n$ t	�yn   td||f ƒ‚Y n0 ˆ  |g ¡}|d u�rš||v�rš| |¡ W qÊ t�y&   ˆ�rºtdƒ‚|
}zt |¡}W n2 t	�yþ } ztt
|ƒƒ‚W Y d }~n
d }~0 0 |jd u �s|ˆv �rY qÊd ˆ |< Y qÊ0 qÊ|t ¡ v�rjzt |¡ W n tj�y\   Y n0 td| ƒ‚d&‡ ‡‡‡‡‡fdd„	}�z˜d | j_d }d}|�rÊ| j ¡ �rÊ|d dk�rÊ| j}t|dd�ƒ}|�rÎtj |¡\}}ti |ftji |fti |fti |fti |fdœ}t�r&tji |f|d< t�rRt jdt j!i|f|d< t ji |f|d< z|| \}}}W n$ t"�yˆ   ti |  }}}Y n0 ||k�rºtj #|¡}t$ %d |› d!|› d"�t&¡ ||d#fi |¤Ž}nd }z6tj'||ƒ |ˆ||�pî| j||d$� W |�r| (¡  n|�r| (¡  0 W n: t)�yV } z |�r6‚ td%| ƒ‚W Y d }~n
d }~0 0 d S )'NÚformatÚindentZdatabaseÚexcludeÚoutputÚ	tracebackr   r   r   r   c                 S   s   g | ]}|  ¡ ‘qS r   )Ústrip)Ú.0Úpkr   r   r   Ú
<listcomp>t   ó    z"Command.handle.<locals>.<listcomp>ú,z,You can only use --pks option with one modelc                 3   s$   | ]}|j d ur|ˆ v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   ˆrt jˆ  ¡ dd�}n8g }ˆ  ¡ D ]*\}}|du rD| | ¡ ¡ q$| |¡ q$|D ]¦}|ˆv rbqT|jjrŒ|jj|vrŒtj	d|jj
 td� |jjsTt ˆ|¡rTˆr¬|j}n|j}| ˆ¡ |jjj¡}ˆrØ|jˆd�}| rì| ¡  ¡ V  qT| ¡ E dH  qTdS )z•
            Collate the objects to be serialized. If count_only is True, just
            count the number of objects to be serialized.
            T)Zallow_cyclesNz,%s is a proxy model and won't be serialized.)Úcategory)Zpk__in)r   Zsort_dependenciesÚitemsÚextendZ
get_modelsÚ_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Úmodelsr1   Z
model_listÚmodelÚobjectsZqueryset)Úapp_listÚexcluded_modelsr   r   r   r>   r   r   Úget_objects·   s:    ÿÿýz#Command.handle.<locals>.get_objectsr   Ú	verbosityT)rC   )ú.bz2z.gzú.lzmaú.xzz.ziprK   rL   rM   zUnsupported file extension (z). Fixtures saved in 'z'.Úwt)r&   r   r   ÚstreamÚprogress_outputÚobject_countz Unable to serialize database: %s)F)*Úsplitr   r   ÚdictÚfromkeysr   Zget_app_configsÚlenZget_app_configÚLookupErrorÚstrr0   Z	get_modelÚ
setdefaultr   Ú
ValueErrorr   Zget_public_serializer_formatsZget_serializerZSerializerDoesNotExistÚstdoutÚendingÚisattyÚsumÚosÚpathÚsplitextÚopenÚgzipÚhas_bz2Úbz2Úhas_lzmaÚlzmaÚFORMAT_ALONEÚKeyErrorÚbasenamer;   r<   ÚRuntimeWarningÚ	serializeÚcloseÚ	Exception)r"   Z
app_labelsÚoptionsr%   r&   Úexcludesr(   Úshow_tracebackr   Zpksr=   Z	app_labelZmodel_labelr1   ÚerE   Zapp_list_valuerI   rP   rQ   Z	file_rootZfile_extZcompression_formatsZopen_methodÚkwargsÚ	file_pathÚ	file_namerO   r   )rG   r2   rH   r   r   r   r>   r   Úhandleg   sê    þ
"
ÿ
ÿ") 
ûý
ÿý
ø
ÿzCommand.handleN)r
   r   r   r   r$   ru   r   r   r   r   r      s   ÿCr   )rb   r^   r;   Zdjango.appsr   Zdjango.corer   Zdjango.core.management.baser   r   Zdjango.core.management.utilsr   Z	django.dbr   r   rd   rc   ÚImportErrorrf   re   ÚWarningr	   r   r   r   r   r   Ú<module>   s&   

