U /X2@sddlmZmZddlZddlmZdZdeZ ddZ ej dd ej d d ej e iZGd d d eZd dZd'ddZddZddZddZddZddZd(ddZdd Zd!d"Zd#d$Zd%d&ZdS)))Hashable OrderedDictN)Columnz  cCs0i}|jdk r|j|d<|jdk r,|j|d<|S)N on_delete on_update)rr)fieldparamsr /auto.py fk_to_params s     r cCs d|jiS)N max_length)r fr r r rcCs|j|j|j|jdS)NZ max_digitsZdecimal_placesZ auto_roundZroundingrrr r r rs cs0eZdZd ddZfddZd ddZZS) rNcCs|j|_t||_|j|_|j|_|j|_|j|_|j|_i|_ |j dk r`t |j s`|j |j d<|jt kr|j t |j|d|_d|_d|_t|tjr|jj|_|r|jjj|jkrd|jjj|_n |jj|_dS)Ndefaultzmigrator.orm['%s'])nametype field_classnullZnullableZ primary_keyZ db_columnindexuniquer rcallableFIELD_TO_PARAMSupdateZ rel_modelZ related_nameZto_field isinstancepwForeignKeyField_metaZorm__name__)selfrmigratorr r r __init__s(     zColumn.__init__cs,tt|}|dd|jD|S)NcSsi|]\}}|t|qSr )repr.0kvr r r ;sz/Column.get_field_parameters..)superrget_field_parametersrr items)r"r  __class__r r r,9szColumn.get_field_parameters cCs<|}dddt|D}dj|j||jj|dS)N, css|]\}}d||fVqdS)z%s=%sNr r&r r r Asz#Column.get_field..z-{name}{space}={space}pw.{classname}({params}))rspace classnamer )r,joinsortedr-formatrrr!)r"r3Z field_paramsZ param_strr r r get_field>s  zColumn.get_field)N)r0)r! __module__ __qualname__r$r,r8 __classcell__r r r.r rs  rc s"g}|jj|jj}tt|}|rPfdd|D}|t|f||t|t}|rx|t|f|g}g} t||D]P} | || } } t| | } | dd}| r|| |dk r| | |fq|r|t|f||| D]\} }|t || |q|S)z&Find difference between Peewee models.csg|] }|qSr r )r'rZfields1r r Qszdiff_one..rN) r fieldssetappend create_fields drop_fieldscompare_fieldspop change_fieldschange_not_null)model1Zmodel2kwargschangesZfields2Znames1r>Znames2Zfields_Znulls_rfield1field2Zdiffrr r<r diff_oneGs2    rLFcstt|r(tttddDtddDg}fddDD]}|t||dqbfddDD]}|t|qD](\}}|krq|t|||d7}q|S)NcSsg|]}|jj|fqSr r rr'mr r r r=wszdiff_many..cSsg|]}|jj|fqSr rMrNr r r r=xscsg|]}|kr|qSr r rN)models2r r r=}s)r#csg|]}|kr|qSr r rN)models1r r r=s) rZsort_models_topologicallyreversedrr@ create_model remove_modelr-rL)rQrPr#reverserIrrGr )rQrPr diff_manyos"  rVc s4d}ttfdd|jjD}|j|j|dS)Nz&class {classname}(pw.Model): {fields} cs.g|]&}t|tjr|jdkst|fqS)id)rrZPrimaryKeyFieldr field_to_coder'rrHr r r=s z!model_to_code..)r4r>)INDENTNEWLINEr5r Z sorted_fieldsr7r!)ModelrHtemplater>r rZr model_to_codes r_cKsdt|f|S)Nz@migrator.create_model )r_r]rHr r r rSsrScKs d|jjS)Nzmigrator.remove_model('%s'))r db_tabler`r r r rTsrTc s.dt|jjtdtfdd|DfS)Nzmigrator.add_fields(%s'%s', %s),csg|]}t|dfqSFrXrYrZr r r=sz!create_fields..)r\r rar5r]r>rHr rZr rAs rAcOsd|jjdtt|fS)Nz migrator.remove_fields('%s', %s)r1)r rar5mapr%rer r r rBsrBTcKst|f|}||rdndS)Nr0)rr8)rr3rHcolr r r rXs rXcKsbt|t|}}||kr"ddiSt|}|j|d<t|}|j|d<tt|t|S)NclsTr)rfield_to_paramsrdictr?r-)rJrKrHZ field_cls1Z field_cls2Zparams1Zparams2r r r rCs  rCcKsFtt|dd|}|jdk rBt|jsBt|jtrB|j|d<|S)NcSsiS)Nr rr r r rrz!field_to_params..r)rgetrrrrr)rrHr r r r rjs   rjcOs$d|jjdtdd|DfS)Nz migrator.change_fields('%s', %s)rbcSsg|]}t|dqSrcrd)r'rr r r r=sz!change_fields..)r rar\r5rer r r rEsrEcCs"|rdnd}d||jjt|fS)NZ drop_not_nullZ add_not_nullzmigrator.%s('%s', %s))r rar%)r]rrZ operationr r r rFs rF)NF)T) collectionsrrZpeeweerZplayhouse.reflectionrZ VanilaColumnr[r\r Z CharFieldZ DecimalFieldrrrLrVr_rSrTrArBrXrCrjrErFr r r r s2   *(