o a,@sddlZddlZddlmZddlmZddlmZddlm Z ddl m Z ddl m Z ddlmZmZdd lmZdd lmZdd lmZGd d d ZGdddZdZdZdS)N) import_module) get_version)apps)SettingsReference) migrations)MigrationLoader) Serializerserializer_factory) get_func_args) module_dir)nowc@s>eZdZdddZddZddZdd Zd d Zd d ZdS)OperationWritercCs||_g|_||_dSN) operationbuff indentation)selfrrr=/usr/lib/python3/dist-packages/django/db/migrations/writer.py__init__ zOperationWriter.__init__c sfdd}tj\}}}tjj}tt|djjkr*d|n djjj djjj |f t |D]\}}|}||} || |qHt |}||dD]} | |vrq|| }|| |qbdfS)Nc s*|jjvrt|tttfrt|trd||D]R\}}t |\}}t |\}}| }t |dkrad||df|ddD]} | qOd|dn d||f | |q"ddSd ||D]7} t | \}}| }t |dkr|ddD]} | qd|dnd| |qd dSt |\}}| }t |dkrd ||df|ddD]} | qd|dn d ||f |dS) Nz%s={z%s: %srz%s,z%s: %s,z},z%s=[z],z%s=%sz%s=%s,)rserialization_expand_args isinstancelisttupledictfeedindentitemsMigrationWriter serialize splitlineslenupdateunindent) _arg_name _arg_valuekeyvalue key_string key_imports arg_string arg_importsargsargitemimportsrrr_writesT          z)OperationWriter.serialize.._writezmigrations.%s(z import %sz%s.%s(z),)setr deconstructr rgetattrr __class__radd __module__r enumerater%r'render) rr5namer0kwargsoperation_argsir1 arg_valuearg_namerr3rr#s,0     zOperationWriter.serializecCs|jd7_dSNrrrrrrr izOperationWriter.indentcCs|jd8_dSrDrErFrrrr'lrGzOperationWriter.unindentcCs|jd|jd|dS)N )rappendr)rlinerrrroszOperationWriter.feedcCs d|jS)N )joinrrFrrrr=rs zOperationWriter.renderN)r) __name__r; __qualname__rr#r r'rr=rrrrr s Q r c@sjeZdZdZdddZddZeddZed d Zed d Z e d dZ e ddZ e ddZ dS)r"zj Take a Migration instance and is able to produce the contents of the migration file from it. TcCs||_||_d|_dS)NF) migrationinclude_headerneeds_manual_porting)rrPrQrrrr|rzMigrationWriter.__init__c Csddd}t}g}|jjD]}t|\}}||||q|r,d|dnd|d<g}|jjD]#}|ddkrM|d|d| d q6|d ||dq6|rcd|dnd|d <t} t |D]} t d | r| | d d|| d|_qnd|vr|d| dn| dt|ddd} |rd| dnd|d<| r|dddt| 7<|jjrd||jjd|d<|jrtttdd|d<nd|d<|jjrd|d<t|S)z%Return a string of the file contents.) replaces_str initial_strrL operationsr __setting__z5 migrations.swappable_dependency(settings.%s),rz from django.conf import settingsz %s, dependenciesz^import (.*)\.\d+[^\s]*$importTzfrom django.db import modelsz(from django.db import migrations, modelsz from django.db import migrationscSs |dSrD)split)rArrrs z+MigrationWriter.as_string..)r*r4z # Functions from the following migrations need manual copying. # Move them and any dependencies into this file, then update the # RunPython operations to refer to the local versions: # %sz # z replaces = %s rTz%Y-%m-%d %H:%M)version timestampmigration_headerz initial = True rU)r6rPrVr r#r&rJrMrXr:rrematchrZstripremoverRdiscardsortedreplacesrQMIGRATION_HEADER_TEMPLATErr strftimeinitialMIGRATION_TEMPLATE) rr!r4rVroperation_stringoperation_importsrX dependencymigration_importsrKsorted_importsrrr as_strings\              zMigrationWriter.as_stringc Cst|jj\}}|durtd|jjzt|}Wn ty$Ynwzt|WSty3Ynwt |jj}| d\}}}|j |krPt j |j |S|dg}}|r|d|dz td|} Wn ttfywYqXwzt| } Wn tyYqXwntd|t j j| g|R} t j| dd|D]#} t j | | } tt j | dd Wdn1swYq| S) NztDjango can't create migrations for app '%s' because migrations have been disabled via the MIGRATION_MODULES setting..rrzCould not locate an appropriate location to create migrations package %s. Make sure the toplevel package exists and can be imported.T)exist_okz __init__.pyw)rmigrations_modulerP app_label ValueErrorr ImportErrorr rget_app_config rpartitionr>ospathrMrZinsertpopmakedirsopen) rmigrations_package_name_rs app_configmaybe_app_namemigrations_package_basename existing_dirs missing_dirs base_modulebase_dir final_dir missing_dirrrrbasedirsb       zMigrationWriter.basedircCs d|jjS)Nz%s.py)rPr>rFrrrfilename zMigrationWriter.filenamecCstj|j|jSr)ryrzrMrrrFrrrrz szMigrationWriter.pathcCs t|Sr)r r#)clsr+rrrr# rzMigrationWriter.serializecCst||dSr)rregister)rtype_ serializerrrrregister_serializersz#MigrationWriter.register_serializercCst|dSr)r unregister)rrrrrunregister_serializersz%MigrationWriter.unregister_serializerN)T)rNr;rO__doc__rropropertyrrrz classmethodr#rrrrrrr"vs  H ;    r"z4# Generated by Django %(version)s on %(timestamp)s z%(migration_header)s%(imports)s class Migration(migrations.Migration): %(replaces_str)s%(initial_str)s dependencies = [ %(dependencies)s ] operations = [ %(operations)s ] )ryr_ importlibrdjangor django.appsr django.confr django.dbrdjango.db.migrations.loaderrdjango.db.migrations.serializerrr django.utils.inspectr django.utils.module_loadingr django.utils.timezoner r r"rfrirrrrs"         d%