o 3a(9@sJddlZddlZddlZddlZddlZddlZddlZddlmZddl m Z ddl m Z ddl mZddlmZddlmZmZddlmZdd lmZdd lmZmZmZmZmZmZdd lm Z zddl!Z!d Z"Wn e#ywd Z"Ynwzddl$Z$d Z%Wn e#yd Z%YnwdZ&GdddeZ'Gdddej(Z)ddZ*dS)N)product)apps)settings) serializers)ImproperlyConfigured) BaseCommand CommandError)no_style)parse_apps_and_model_labels)DEFAULT_DB_ALIAS DatabaseErrorIntegrityError connectionsrouter transaction)cached_propertyTF-c@s\eZdZdZdZddZddZddZd d Ze j d d d dZ e ddZ ddZd S)Commandz.Installs the named fixture(s) in the database.zcNo database fixture specified. Please provide the path of at least one fixture in the command line.cCsl|jddddd|jdtdd|jd d d d |jd ddddd|jdddgdd|jddddS)Nargsfixture+zFixture labels.)metavarnargshelpz --databasezXNominates a specific database to load fixtures into. Defaults to the "default" database.)defaultrz--app app_labelz,Only look for fixtures in the specified app.)destrz--ignorenonexistentz-i store_trueignorez[Ignores entries in the serialized data for fields that do not currently exist on the model.)actionrrz-ez --excludeappendzKAn app_label or app_label.ModelName to exclude. Can be used multiple times.)rrrz--formatz2Format of serialized data when reading from stdin.)r) add_argumentr )selfparserr$J/usr/lib/python3/dist-packages/django/core/management/commands/loaddata.py add_arguments-s* zCommand.add_argumentscOs|d|_|d|_|d|_|d|_t|d\|_|_|d|_tj |jd | |Wdn1s:wYt |jrNt |j dSdS)Nrdatabaser verbosityexcludeformatusing)rr,rr(r excluded_models excluded_appsr*ratomicloaddataget_autocommitrclose)r"fixture_labelsoptionsr$r$r%handleEs       zCommand.handlec Cst|j}d|_d|_d|_t|_t|_ t dft j dft dfdddfd|_tr4tjdf|jd<trFtjdf|jd<tjdf|jd <|D] }||rQnqHdS|"g|_|D]}||q^|jD] }|j|jd qiWdn1s}wYd d |jD}z|j|d Wnty}zd|f|_d}~ww|jdkr|jt|j}|r|j dkr|j!"d|#}|D]} |$| qWdn1swY|j dkr |j|jkr|j!"d|j|jfdS|j!"d|j|j|jfdSdS)NrrbrcWstjSN)sysstdin)rr$r$r%fsz"Command.loaddata..)Ngzzipr:bz2lzmaxzr+cSsg|]}|jjqSr$)_metadb_table).0modelr$r$r% sz$Command.loaddata..) table_nameszProblem installing fixtures: %szResetting sequencesz)Installed %d object(s) from %d fixture(s)z1Installed %d object(s) (of %d) from %d fixture(s))%rr, fixture_countloaded_object_countfixture_object_countsetmodelsrget_public_serializer_formatsserialization_formatsopengzipGzipFileSingleZipReadercompression_formatshas_bz2r>BZ2Filehas_lzmar?LZMAFile find_fixturesconstraint_checks_disabledobjs_with_deferred_fields load_labelsave_deferred_fieldscheck_constraints Exceptionropssequence_reset_sqlr r(stdoutwritecursorexecute) r"r3 connection fixture_labelobjrFe sequence_sqlrdliner$r$r%r0Wsx                 zCommand.loaddatac Cs|jdk}||D]\}}}|tj|\}}}|j|\} } | || } zz|jd7_d} d} |jdkrG|j d||t |ft j || |j |jdd}|D]j}| d7} |jjj|jvskt|j|jvrlqUt|j |jjr| d7} |j|jjz|j|j d|r|jj d | d d Wntttfy}zd |jjj|jj|d f|_ d}~ww|j!r|j"#|qU|r|r|j |j$| 7_$|j%| 7_%Wnt&y}zt'|t(sd||ff|_ d}~wwW| )n| )w| dkr t*+d|t,q dS)z&Load fixtures files for a given label.rHrrGz#Installing %s fixture '%s' from %s.T)r,ignorenonexistenthandle_forward_referencesr+z Processed %i object(s).)endingz9Could not load %(object_label)s(pk=%(pk)s): %(error_msg)s) object_labelpk error_msgNz#Problem installing fixture '%s': %sz=No fixture data found for '%s'. (File format may be invalid.))-r(rY parse_nameospathbasenamerTrIrbrchumanizer deserializer,robjectrA app_configr.typer-rallow_migrate_model __class__rMaddsaver r ValueErrorlabelrrrdeferred_fieldsr[r rJrKr_ isinstancerr2warningswarnRuntimeWarning)r"rg show_progress fixture_file fixture_dir fixture_name_ser_fmtcmp_fmt open_methodmoderobjects_in_fixtureloaded_objects_in_fixtureobjectsrhrir$r$r%r\s          zCommand.load_labelN)maxsizecs|tkr tdtfgS||\}}|jdg}|dur t|jn|g}|dur*|jn|g}|jdkr:|jdt j rNt j g}t j n|j}t j jt j vrjfdd|D}t j ddt|||D}fdd |D} g} |D]_} |jdkr|jd t| g} t j | } tt| d D]}t j || vr| || fq|jdkr| s|jd t| ft| d krtdt| f| | q| std| S)z%Find fixture files for a given label.NrGzLoading '%s' fixtures...cs"g|] }tj|tjqSr$)rurvjoindirname)rCdir_rr$r%rEsz)Command.find_fixtures..css$|] }ddd|DVqdS).css|]}|r|VqdSr8r$)rCextr$r$r% sz2Command.find_fixtures...Nr)rCcombor$r$r%rs  z(Command.find_fixtures..csh|] }d|fqS)rr)rCsuffixrr$r% sz(Command.find_fixtures..zChecking %s for fixtures...*zNo fixture '%s' in %s.rHz-Multiple fixtures named '%s' in %s. Aborting.zNo fixture named '%s' found.) READ_STDINrtr,listrTrOr(rbrcrurvisabsrrw fixture_dirssepnormpathrrxrglobiglobescaper lenrextend)r"rgrr databasescmp_fmtsser_fmtsrsuffixestargets fixture_filesrfixture_files_in_dirrv candidater$rr%rYsZ             zCommand.find_fixturescCsg}tj}t|tt|krtdtD]-}|j}tj |j d}||vr0td||f|j r9||j kr9qtj |rD| |q||| ddd|DS)z Return a list of fixture directories. The list contains the 'fixtures' subdirectory of each installed application, if it exists, the directories in FIXTURE_DIRS, and the current directory. z*settings.FIXTURE_DIRS contains duplicates.fixtureszc'%s' is a default fixture directory for the '%s' app and cannot be listed in settings.FIXTURE_DIRS.rocSsg|]}tj|qSr$)rurvrealpath)rCdr$r$r%rE7sz(Command.fixture_dirs..)r FIXTURE_DIRSrrLrrget_app_configsrrurvrrisdirr r)r"dirsrr{rapp_dirr$r$r%rs*      zCommand.fixture_dirscCs|tkr|js tdt|jdfS|dd}t|dkr/|d|jvr/|d}|dd}nd}t|dkrZ|d|jvrI|d}|dd}ntdd|dd|dfd}d|}|||fS) zW Split fixture name in name, serialization format, compression format. z3--format must be specified when reading from stdin.r:rrGrHNzHProblem installing fixture '%s': %s is not a known serialization format.)rr*rrsplitrrTrOr)r"rpartsrrnamer$r$r%rt9s*     zCommand.parse_name)__name__ __module__ __qualname__rmissing_args_messager&r5r0r\ functools lru_cacherYrrrtr$r$r$r%r&sH B 9  rcs$eZdZfddZddZZS)rScs.tj|i|t|dkrtddS)NrHz.Zip-compressed fixtures must contain one file.)super__init__rnamelistr)r"rkwargsr~r$r%r\szSingleZipReader.__init__cCstj||dS)Nr)zipfileZipFilereadr)r"r$r$r%raszSingleZipReader.read)rrrrr __classcell__r$r$rr%rSZs rScCs|rd|SdS)Nz'%s'z absolute pathr$)rr$r$r%rxesrx)+rrrQrur9rr itertoolsr django.appsr django.confr django.corerdjango.core.exceptionsrdjango.core.management.baserrdjango.core.management.colorr django.core.management.utilsr django.dbr r r rrrdjango.utils.functionalrr>rU ImportErrorr?rWrrrrSrxr$r$r$r%sF           6