ghb/UdZddlmZddlmZmZmZmZmZm Z m Z m Z m Z m Z mZddlZddlmZerddlmZddlmZmZd Zd ed <d ezZd ed <ddddddddZd ed<dZd ed<dKdZdLdZej dej!dej"eej#eiZ$ded<GddeZdMd$Z% dNd%d&dOd,Z&dPd/Z'dPd0Z(dPd1Z)dQd4Z*dQd5Z+d6d7dRd:Z,dSd>Z-dTdAZ.dUdDZ/dVdGZ0dWdHZ1dXdJZ2dS)Yz Automatically create migrations.) annotations) TYPE_CHECKINGAnyCallableDictFinalIterableListOptionalTypeUnioncastN)Column)Migrator) TModelTypeTParamsz rINDENT NEWLINEpw_pext) ArrayFieldBinaryJSONFieldDateTimeTZField HStoreField IntervalField JSONField TSVectorFieldFIELD_MODULES_MAP)zplayhouse.postgres_extzplayhouse.fieldspeewee PW_MODULESfieldpw.ForeignKeyFieldreturnrc^i}|jd|jd|d<|jd|jd|d<|S)zGet params from the given fk.N' on_delete on_update)r'r(r"paramss J/opt/imunify360/venv/lib64/python3.11/site-packages/peewee_migrate/auto.py fk_to_paramsr,'sJ F "4%/444{ "4%/444{ Mpw.DateTimeFieldcRi}t|jts |j|d<|S)z)Get params from the given datetime field.formats) isinstancer0listr)s r+ dtf_to_paramsr33s, F emT * **!My Mr-cd|jiS)N max_length)r5fs r+r8=s \1<8r-c8|j|j|j|jdS)N auto_rounddecimal_places max_digitsroundingr:r6s r+r8r8>s#l*lJ   r-z.Dict[Type[pw.Field], Callable[[Any], TParams]]FIELD_TO_PARAMScPeZdZUdZded<dfd Zddfd Zd d dfdZxZS)rz!Get field's migration parameters.Type[pw.Field] field_classr"pw.Fieldc 0tt|j|jt ||j|jf|j|j|j |j d|||_ |j tvr@|ji|_|jt|j |d|_d|_t%|t&jr>|jj|_|j|jkrdnd|jjjz|_dSdS)N) primary_key column_nameindexuniquez'self'zmigrator.orm['%s'])superr__init__namefind_field_type field_typenullrErFrGrHr"rBr?extra_parametersupdate rel_modelto_fieldr1pwForeignKeyField rel_fieldmodel_meta table_name)selfr"kwargs __class__s r+rJzColumn.__init__Ns&$fd$ J E " "   J ))+<     . .$,(*%  ! ( (9I)J5)Q)Q R R R eR/ 0 0 !O0DM?ek11)EO,A,LL NNN  r- spacestrr$ctt|}t|jjd}d|dD\}}}d||||S)z.Generate the field definition for this column.rSc:g|]}|o|S)strip).0ss r+ z$Column.get_field..qs$HHHa!/ HHHr-=z%{name}{space}={space}{module}.{field})rKr"r]module) rIr get_fieldrgetrB__name__ partitionformat)rYr]r"rgrK_r[s r+rhzColumn.get_fieldmsfd##--//"&&t'7'@$GGHH5??33G3GHHHa6==U%>   r-FchangercLtt|}|dd|rt |dd|d<t |ddp|d|d<|dd|dd|j|d<|jjMt|jjs4t|j |jj|d <|S) z#Generate parameters for self field.backrefNrHFrGr'r(rNdefault) rIrget_field_parameterspopboolnullabler"rrcallablereprdb_value)rYror*r[s r+rszColumn.get_field_parametersvsvt$$99;; 9d###  +#FJJx$?$?@@F8 "6::gu#=#=>>R&BRF7O JJ{D ) ) ) JJ{D ) ) )!]F6N :  )(4:;M2N2N ) $TZ%8%89K%L%L M MF9  r-)r"rC)r\)r]r^r$r^)r$r) rj __module__ __qualname____doc____annotations__rJrhrs __classcell__)r[s@r+rrIs++>       .3r-rmodel1rmodel2 List[str]c g}j|j}}|j|j}tt|z }|r1fd|D}|t g|Ri|t|tz } | r |t g| Rg} g} g} t|z | z D]} | || }}t ||}|dd}|dd}|dd}|r| ||f|| | |f||| | ||f| r |tg| R| D]*\} }|t| |+| D]\} }}|dus|durc|| j s || j r#|t| |t| |q|t| |j}|j}t|t|z }|fd |Dt|t|z }|fd |D|S) z,Find difference between given peewee models.c g|] }| Srara)rcrK field_names1s r+rezdiff_one..s888,t$888r-rNNrGrH)rNT)rHc3K|]V}t|dttfr2t|ddk=t |dVWdS)rr)rKN)r1r2tuplelen drop_indexrcrGrs r+ zdiff_one..sq  eAhu . .47uQx==13D3D 6a)))3D3D3D3Dr-c3K|]]}t|dttfr9t|ddk=t |d|dV^dS)rr)rKrHN)r1r2rr add_indexrs r+rzdiff_one..sw  eAhu . .47uQx==13D3D &uQxa9993D3D3D3Dr-)rWfieldssetappend create_fields drop_fieldscompare_fieldsrt change_fieldschange_not_nullrHrGrrindexesextend)rrrZchangesmeta1meta2 field_names2names1rnames2fields_to_change fields_nullsfields_indexesrKfield1field2diffrNrGrHindexes1indexes2indexes_to_dropindexes_to_addrs` @r+diff_onersG<5E???@@@"AA dvt$???@@@@-55eV TMMv~~D!( 9L,>,D 9z&$77888 NN9VT&AAA B B B B NN:fd33 4 4 4 4}H}H(mmc(mm3O NN$]]S]]2N NN# Nr-F)reversemodels1List[TModelType]models2migratorOptional[Migrator]cttdtj|}ttdtj|}|r8t t |}t t |}d|Dd|Dg}D]5\}}|vr |t||6|fdfdDD|fdfdDD|S) z9Calculate changes for migrations from models2 to models1.rcNi|]"}tt|jj|#Srarr^rWrXrcms r+ zdiff_many..)EEE4QW/00!EEEr-cNi|]"}tt|jj|#Srarrs r+rzdiff_many..rr-rc3FK|]}t|VdS)rN) create_model)rcrKr models_map1s r+rzdiff_many..sI  [&:::r-cg|]}|v| Srara)rcr models_map2s r+rezdiff_many..s#DDD1q /C/CQ/C/C/Cr-c3BK|]}t|VdSN) remove_model)rcrKrs r+rzdiff_many..sA,0 [&''r-cg|]}|v| Srara)rcrrs r+rezdiff_many..s$4d4d4d1qXcOcOcQOcOcOcr-) rr rS sort_modelsr2reverseditemsrr) rrrrrrKrrrs ` @@r+ diff_manyrs4 %r~g'>'>??G4 %r~g'>'>??G*x(())x(())EEWEEEKEEWEEEKG#))++OO f { " " x D(9HMMMNNNN NNDDDD DDD  NN4d4d4d4d 4d4d4d Nr- model_typer^c  d}|j}ttfd|jDz}ttt ddtd|jd|jrtd|jdndt|j tj rtd |j j nd|j rtd |j ndgz}||j|| S) z(Generate migrations for the given model.z-class {classname}(pw.Model): {fields} {meta}ctg|]4}t|tjr |jdk't |fi5S)id)r1rSPrimaryKeyFieldrK field_to_codercr"rZs r+rez!model_to_code..sX   ub&899 ?DjD>P>P % * *6 * *>P>P>Pr-Nz class Meta:ztable_name = ""z schema = "zprimary_key = pw.CompositeKeyz indexes = ) classnamermeta)rWrrjoin sorted_fieldsfilterrXschemar1rErS CompositeKey field_namesrrlrj)rrZtemplaterrs ` r+ model_to_coders0AH  D gll    +   F GLL ;;;;;7;{J633T[3333"$"2BODDv\\D.+s/```PU e K K5 KF K K```r-))rWrrXrrrrZrs ` r+rr$sg  DD  =  ````Y_``` a a b b b r-c x|j}d|jddtt|dS)z%Generate migrations to remove fields.zmigrator.remove_fields('rz, r)rWrXrmaprxrs r+rr/s>  DD  #dF##$$$$ r-Tr]r]ruc Rt|}||rdndS)zGenerate field description.r\r)rrh)r"r]rZcols r+rr8s( --C ==-2 . ..r-rrrct|t|}}||krddiSt||j|jdt||j|jd}}|d|d}}t t |t |z S)z$Find diffs between the given fields.typeT)rGrH)rOrn)rLrrGrHrsdictrr)rrftype1ftype2col1col2params1params2s r+rr>s$V,,of.E.EFF ~ v&,&-(X(XYYYv&,&-(X(XYYY D !!!.. !!!..G GMMOO$$s7==??';';; < <.Ts)RRR4mAU;;;RRRr-r)rWrXrr)rrrs r+rrOsH ?DD  wRR6RRRSSSS r-rKrNcX|j}|rdnd}d|d|jdt|dS)Generate migrations. drop_not_null add_not_nullz migrator.z('rr)rWrXrx)rrKrNr operations r+rrXs;  D#';^II&/ii$t**** MMr-Union[str, Iterable[str]]rHcv|j}t|d}d|jd|d|dS)r()[]zmigrator.add_index('rz , unique=rrWrxrbrX)rrKrHrcolumnss r+rr_sF  D4jjv&&G Q$/ Q Qg Q Q Q Q QQr-cp|j}t|d}d|jd|dS)rrzmigrator.drop_index('rrr)rrKrrs r+rrfs>  D4jjv&&G A4? A Aw A A AAr-rAct|}|jtvr)|D]}|jtvr|cS|Sr)rrzr!mro)r"ftypeclss r+rLrLmsT KKE z))99;;  C~++ , Lr-)r"r#r$r)r"r.r$r)rrrrr$rr)rrrrrrr$r)rrr$r^)rrrrCr$r^)r"rCr]rur$r^)rrCrrCr$r)rrrrr$r^)rrrKr^rNrur$r^)rrrKrrHrur$r^)rrrKrr$r^)r"rCr$rA)3r| __future__rtypingrrrrrr r r r r rr rSplayhouse.reflectionr VanilaColumnrrtypesrrrr}rrr!r,r3 CharField DecimalFieldrT DateTimeFieldr?rrrrrrrrrrrrrrLrar-r+r se&&&""""""                          777777+""""""********  K JJJJ    L88O  m C    ;;;;;\;;;|IIII^$($  $$$$$$NTTTT>LLLL ;;;; 59////// ===="NNNNRRRRBBBBr-