|L ivUddlmZddlZddlZddlmZddlmZddlmZddlmZddlm Z ddlm Z dd lm Z dd lm Z dd lm Z dd lmZdd lmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlm Z ddlm!Z!dd l!m"Z"errdd!lm#Z#dd"lm$Z$dd#l%m&Z&dd$l%m'Z'dd%l(m)Z)dd&l*m+Z+dd'l,m-Z-dd(l,m.Z.dd)l/m0Z0dd*l1m2Z2dd+l1m3Z3dd,l1m4Z4dd-l1m5Z5dd.l6m7Z7dd/l8m9Z9dd0lm:Z:dd1l;mZ>dd3l=m?Z?ejeAZBGd4d5eCZDiZEd6eFd7<Gd8d9eD:ZGGd;dd=ZIy)?) annotationsN)Any)Callable)Dict)Iterable)List)Mapping) NamedTuple)Optional)Sequence)Set)Tuple)Type) TYPE_CHECKING)Union)cast)Column)MetaData)PrimaryKeyConstraintschema)String)Table)text)_autogen)base)_constraint_sig)ComparisonResult)util) sqla_compat)Literal)TextIO) Connection)Dialect) CursorResult) Inspector) ClauseElement) Executable) quoted_name) Constraint)ForeignKeyConstraint)Index)UniqueConstraint) TableClause) TypeEngine)_ServerDefault)AutogenContext)ApplyBatchImpl)BatchOperationsImplc eZdZ ddZy)ImplMetacVtj||||}d|vr |t|d<|S)N __dialect__)type__init___impls)cls classnamebasesdict_newtypes V/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/alembic/ddl/impl.pyr;zImplMeta.__init__Bs4 --Yu= E !+.F5' (N)r>strr?zTuple[Type[DefaultImpl]]r@Dict[str, Any])__name__ __module__ __qualname__r;rCrBr7r7As#  (  rCr7zDict[str, Type[DefaultImpl]]r<c eZdZUdZdZdZdZddhfZded<d Z d ed <d Z d ed< dAdZ e dBdZ dCdZ dDdZ dEdZ dFdZedGdZddej*f dHdZ dI dJdZddddddddddddd dKdZddd dLdZddd dMdZdNdZdOd Z dI dPd!ZdQd"ZdQd#ZdRd$Z dSd%Z!dSd&Z"dTd'Z#dRd(Z$ dU dVd)Z%dWd*Z& dXd+Z' dYd,Z( dZd-Z)d.Z* d[d/Z+d0Z, d\ d]d1Z-d^d2Z. d_d3Z/d4Z0d`d5Z1d`d6Z2d`d7Z3 dad8Z4d9Z5 dbd:Z6 dcd;Z7 dcd<Z8 ddd=Z9 ded>Z:d?Z; dfd@Z!!---   /   "rCc t|ttdtdd|}|r|j t d|d|S)aGenerate a :class:`.Table` object which will be used as the structure for the Alembic version table. Third party dialects may override this hook to provide an alternate structure for this :class:`.Table`; requirements are only that it be named based on the ``version_table`` parameter and contains at least a single string-holding column named ``version_num``. .. versionadded:: 1.14 version_num F)nullabler_pkc)rc)rrrrappend_constraintr)r` version_tableversion_table_schemaversion_table_pkkwvts rBversion_table_implzDefaultImpl.version_table_implsW&  J =&*u ='     $!=/(>   rCcy)zReturn True if the given :class:`.BatchOperationsImpl` would need the table to be recreated and copied in order to proceed. Normally, only returns True on SQLite when operations other than add_column are present. FrI)r`batch_ops rBrequires_recreate_in_batchz&DefaultImpl.requires_recreate_in_batchsrCcy)zperform any operations needed on a table before a new one is created to replace it in batch mode. the PG dialect uses this to drop constraints on the table before the new one uses those same names. NrI)r` batch_impltables rBprep_table_for_batchz DefaultImpl.prep_table_for_batchrCc|jSrb)rXr`s rBbindzDefaultImpl.binds rCNct|tr t|}|jr||r t d|j r)t|t jstddi}ni}trt|tsJ|jd d|ji|}|jt|jddj|j zy|j"}|J|r|j$d i|}|r | t d|r|j'||S|j'||S) Nz&SQL parameters not allowed with as_sqlrVT)compile_kwargsrW z z2Can't send params and multiparams at the same timerI) isinstancerDrrY TypeErrorrVr DDLElementdictrr)compilerWrhreplacestripcommand_terminatorrXexecution_optionsexecute)r` constructr multiparamsparams compile_kwcompiledconns rB_execzDefaultImpl._execsA i %YI ;;&& HII!!*6,,+"/41HI  !)];;;(y((LLLH   H %%dF399;))* ??D# ## -t--B0AB+1H||I{;;||Iv66rCc(|j||yrb)r)r`sqlrs rBrzDefaultImpl.executes 3)*rC) rlserver_defaultrctype_r autoincrementcommentexisting_comment existing_typeexisting_server_defaultexisting_nullableexisting_autoincrementc ||tjdd|,|jtj||||| | | | |duri}t j || rtj}n(J II,    JJ##!"/,C&7%5    &B66 71188 711!6 )) JJ" ""/,C&7%5      JJ!"/,C&7%5   %  JJ""!"/,C&7%5     JJ!"/,C&7  rCr if_not_existscT|jtj||||y)Nr)rr AddColumn)r`rcolumnrrs rB add_columnzDefaultImpl.add_columnrs( NN+   rCr if_existsc T|jtj||||y)Nr)rr DropColumn)r`rrrrrrs rB drop_columnzDefaultImpl.drop_columns% OOF6Y  rCc|j|j|r%|jtj|yyrb) _create_rulerr AddConstraint)r`consts rBadd_constraintzDefaultImpl.add_constraints8    %););D)A JJv++E2 3*BrCc N|jtj|fi|yrb)rrDropConstraint)r`rrrs rBdrop_constraintzDefaultImpl.drop_constraints 6((5"56rCcR|jtj|||y)Nr)rr RenameTable)r`old_table_namenew_table_namers rB rename_tablezDefaultImpl.rename_tables"   ^^F K rCc d|jj||jd||jt j |fi||jj ||jd||jD]&}|jt j|(|jjxr|jj }|j}|r|r|j||jD]%}|j}|s|s|j|'yNF) checkfirst _ddl_runner)dispatch before_createrXrr CreateTable after_createindexes CreateIndexrWsupports_commentsinline_commentsrcreate_table_commentcolumnscreate_column_comment)r`rzrrindex with_commentrrs rB create_tablezDefaultImpl.create_tables $$ 4??u$ %  6%%e2r23 ## 4??u$ $ ]] 2E JJv))%0 1 2 LL * * O4<<3O3O/O -- |  % %e ,mm 3FnnG<**62 3rCc |jj||jd||jt j |fi||jj ||jd|yr)r before_droprXrr DropTable after_drop)r`rzrrs rB drop_tablezDefaultImpl.drop_tablesh "" 4??u$ #  6##E0R01 !! 4??u$ " rCc N|jtj|fi|yrb)rrrr`rrrs rB create_indexzDefaultImpl.create_indexs 6%%e2r23rCcL|jtj|yrb)rrSetTableCommentr`rzs rBrz DefaultImpl.create_table_comments 6))%01rCcL|jtj|yrb)rrDropTableCommentrs rBdrop_table_commentzDefaultImpl.drop_table_comments 6**512rCcL|jtj|yrb)rrSetColumnComment)r`rs rBrz!DefaultImpl.create_column_comments 6**623rCc N|jtj|fi|yrb)rr DropIndexrs rB drop_indexzDefaultImpl.drop_indexs 6##E0R01rCct|ts td|rt|dts td|jr|D]}|j |j jjdi|jDcic]Q\}}|t|tjs/tj|||j|jn|Sc}}y|rw|r0|j |j j|y|D]?}|j |j jjdi|Ayycc}}w)Nz List expectedrzList of dictionaries expected)r)rrI)rlistrrrYrinsertinlinevaluesitemsr"_literal_bindparamcr:)r`rzrows multiinsertrowkvs rB bulk_insertzDefaultImpl.bulk_insertsN $%O, , *T!Wd3;< < ;;  ELLNVXV),  !%1(2$%{'E'E("!, > >$%q !" &''  (JJu||~446DJI#J #A5<<>#8#8#:#A#A#HC#HIJ  sAE2cR|jjj|jj }t j d|}g}d}|D],}t jd|r|}|j|.t|d|ddgi}|rt j d|D]o}d|vr@|jd\} } | j|j| j<G|jj|jq|S)Nz[\w\-_]+|\(.+?\)z^\(.*\)$rrz[^(),]+=)rW type_compilerprocessr:lowerrefindallmatchappendParamssplitrkwargsargs) r`r definitiontokens term_tokens paren_termtokenrtermkeyvals rB_tokenize_column_typez!DefaultImpl._tokenize_column_types\\//77 DJJL JJ':JG!#   *Exx U+" ""5)  *  A ABR@  9j9 5$;#zz#HC14FMM#))+.KK&&tzz|4  5 rCc |j|jk(ry|jDcgc] }|Dchc]}|jc}"}}}dj|jg|jz}dj|jg|jz}|D]>}||hj |s(|j|jhj |s>yycc}wcc}}w)NT F)token0rPrjoinr issubset)r`inspector_paramsmetadata_paramsbatchtsynonymsinspector_all_termsmetadata_all_termss rB_column_types_matchzDefaultImpl._column_types_match s  " "o&<&< <<@)>%? ?  $4$9$99xx(//0668xx **+113(( C3%B3%BbRXXa[BHHQK7  rCc|j|}|j|}|j||sy|j||syy)zReturns True if there ARE differences between the types of the two columns. Takes impl.type_synonyms into account between retrospected and metadata types TF)rrr*)r`inspector_columnmetadata_columnrrs rB compare_typezDefaultImpl.compare_typeWsQ 556FG44_E''(8/J&&'7IrCc ||k7SrbrI)r`r,r-rendered_metadata_defaultrendered_inspector_defaults rBcompare_server_defaultz"DefaultImpl.compare_server_defaultgs*-FFFrCcyrbrI)r` conn_uniques conn_indexesmetadata_unique_constraintsmetadata_indexess rBcorrect_for_autogen_constraintsz+DefaultImpl.correct_for_autogen_constraintsps rCcn|jj|jurt|d||d<yy)Nexpr)r:_type_affinityr)r`existingexisting_transfernew_types rBcast_for_batch_migratez"DefaultImpl.cast_for_batch_migrateys: == ' 'x/F/F F(,!&)8) f % GrCc Xddd}t|j|j|S)zdRender a SQL expression that is typically a server default, index expression, etc. TF)rV include_table)rWr)rDrrW)r`r:is_server_defaultrrrs rBrender_ddl_sql_exprzDefaultImpl.render_ddl_sql_exprs/(,eD  LLjL I  rCc|jSrb)autogen_column_reflect)r` inspectors rB_compat_autogen_column_reflectz*DefaultImpl._compat_autogen_column_reflects***rCcyrbrI)r`conn_fks metadata_fkss rBcorrect_for_autogen_foreignkeysz+DefaultImpl.correct_for_autogen_foreignkeyss rCcy)zA hook that is attached to the 'column_reflect' event for when a Table is reflected from the database during the autogenerate process. Dialects can elect to modify the information gathered here. NrI)r`rFrz column_infos rBrEz"DefaultImpl.autogen_column_reflectr|rCcy)zA hook called when :meth:`.EnvironmentContext.run_migrations` is called. Implementations can set up per-migration-run state here. NrIr~s rBstart_migrationszDefaultImpl.start_migrationsr|rCc@|jd|jzy)zEmit the string ``BEGIN``, or the backend-specific equivalent, on the current connection context. This is used in offline mode and typically via :meth:`.EnvironmentContext.begin_transaction`. BEGINNrhrr~s rB emit_beginzDefaultImpl.emit_begins 7T%<%<<=rCc@|jd|jzy)zEmit the string ``COMMIT``, or the backend-specific equivalent, on the current connection context. This is used in offline mode and typically via :meth:`.EnvironmentContext.begin_transaction`. COMMITNrRr~s rB emit_commitzDefaultImpl.emit_commits 8d&=&==>rCcyNFrI)r`type_objautogen_contexts rB render_typezDefaultImpl.render_typesrCcTt||tjdh\}}t|dd}t|dd}t |t |k7r|j d|j |j||t |xst |t |k7fS)Nalways)skip)_compare_identity_optionsrIdentitygetattrbooladddifference_updaterT)r`metadata_identityinspector_identitydiffignored meta_alwaysinspector_alwayss rB_compare_identity_defaultz%DefaultImpl._compare_identity_defaults2   OO   g/4@ "#5xF  %5 6 6 HHX  t99:   J M$01T:L5MM   rCcrt|j}t|j}||k7rd|d|Sy)Nzunique=z to unique=)rbunique)r`metadata_indexreflected_index conn_unique meta_uniques rB_compare_index_uniquez!DefaultImpl._compare_index_uniquesB?112 >001 + %[MB BrCc 2tjd||fi|S)NTrfrom_constraintr` constraintoptss rB_create_metadata_constraint_sigz+DefaultImpl._create_metadata_constraint_sigs..tT:NNNrCc 2tjd||fi|SrXrtrvs rB _create_reflected_constraint_sigz,DefaultImpl._create_reflected_constraint_sigs..udJO$OOrCc:g}|j||}|r|j||j|}|j|}t j |sJt j |sJ||fD]/}|j stjd|j1|j|jk7r+|jd|jd|j|rtj|StjS)zCompare two indexes by comparing the signature generated by ``create_index_sig``. This method returns a ``ComparisonResult``. zGenerating approximate signature for index %s. The dialect implementation should either skip expression indexes or provide a custom implementation. expression  to )rrrryr{r is_index_sighas_expressionslogwarningr column_namesr DifferentEqual)r`rnromsg unique_msgm_sigr_sigsigs rBcompare_indexeszDefaultImpl.compare_indexess// O   JJz "44^D55oF$$U+++$$U+++%< C"" :II     !3!3 3 JJe001e6H6H5IJ  #--c2 2#))+ +rCc|j|}|j|}|j}|j}||k7rtjd|d|Stj S)aCompare two unique constraints by comparing the two signatures. The arguments are two tuples that contain the unique constraint and the signatures generated by ``create_unique_constraint_sig``. This method returns a ``ComparisonResult``. r}r~)ryr{unnamedrrr)r`metadata_constraintreflected_constraint metadata_tup reflected_tupmeta_sigconn_sigs rBcompare_unique_constraintz%DefaultImpl.compare_unique_constraints;;  ==   '' (( x #--hZtH:6 $))+ +rCc T|Dcic]}|j|}}t|D]{}|j|vrtj|}|s*t j d|jd|j dtjd|j|}ycc}w)Nz@autogenerate skipping metadata-specified expression-based index z ; dialect z under SQLAlchemy z6 can't reflect these indexes so they can't be compared) rcrr"is_expression_indexr!rr9sqlalchemy_versiondiscard)r`r7r5rconn_indexes_by_nameidxiexs rB_skip_functional_indexesz$DefaultImpl._skip_functional_indexes8s3?@a @@() .Cxx//11#6C .xxl*T-=-=,@A""-"@"@!ABFF!((- . AsB%c&|jdiS)Ndialect_options)rZ)r`reflected_objectkinds rB adjust_reflected_dialect_optionsz,DefaultImpl.adjust_reflected_dialect_optionsIs ##$5r::rC)rWr&rXOptional[Connection]rYrbr^Optional[bool]r[zOptional[TextIO]r]rEreturnNone)rWr&rzType[DefaultImpl])rrDrr) rorDrp Optional[str]rqrbrrrrr)rvr5rrb)ryr4rzrrr)rr) rUnion[Executable, str]rzOptional[Mapping[str, Any]]rz%Optional[Sequence[Mapping[str, Any]]]rMapping[str, Any]rzOptional[CursorResult]rb)rrrzOptional[dict[str, Any]]rr) rrDrrDrlrrz/Optional[Union[_ServerDefault, Literal[False]]]rcrrOptional[TypeEngine]rrrrrz$Optional[Union[str, Literal[False]]]rrrrrzOptional[_ServerDefault]rrrrrrrrr) rrDr Column[Any]r!Optional[Union[str, quoted_name]]rrrr) rrDrrrrrrrr)rrrr)rr,rrrrr)rrDrzUnion[str, quoted_name]rrrr)rzrrrrrr)rr.rrrrr)rzrrr)rrrr)T)rzzUnion[TableClause, Table]rz List[dict]rrbrr)rrrr)rrrrrrb)r#rr$rrrb)r,rr-rrrb) r4Set[UniqueConstraint]r5 Set[Index]r6rr7rrr)F)r:r)rBrbrrrrrD)rFr(rr)rISet[ForeignKeyConstraint]rJrrr)rr)rYr1rZr3rzUnion[str, Literal[False]])rnr.ror.rr)rwz _autogen._Crxrrz_constraint_sig[_autogen._C])rnr.ror.rr)rr/rr/rr)rrErrDrrE)=rFrGrH__doc__r9r^rrP__annotations__rQrTr; classmethodrdrhrtrwr{propertyrr! immutabledictrrrrrrrrrrrrrrrrrrr*r.r2r8r?rCrGrKrErOrSrVr[rkrrryr{rrrrrIrCrBrKrKQsk K,5y+A*CM'C&(m( .B?A)  *  ( % 4$$#  ,       D +     (  16     :>=A$6D$6$6$8 +7)+77+7; +7 " +7 +7`7;+ #+4+  +$( "&* $(,8=*..2<@,015%qqq ! q  qq$qq&q6q(q,q ":!q"*#q$!/%q&'q( )qp59(,    2  &    ,!%$(        "     4759   0 2    3. 42342! $J($J$J $J  $JL&P &9? , &5; B +>D  G + ! &;  %    >C  !  6:  JM    + + 0      >?"5C #  8#6; O%O/2O %O P%P/2P %P ),),),  ),V,-,/,  ,8."; .;69; ;rCrK) metaclassc6eZdZUded<ded<ded<ded<y) rrDrz List[str]r rzDict[str, str]rN)rFrGrHrrIrCrBrrOs K  O rCrc tj|}tj|}tt dfd }|||tj|t|j|tjrDt |dsJ|t |dit |di|jt |difS)Nct|j D]c}|j|}|j|}||k7s+|j|}||k(r j|Sj|eyrb)set differencerZrc) meta_dict insp_dict default_dictattrsattr meta_value insp_value default_valuerg ignored_attrr^s rB check_dictsz._compare_identity_options..check_dictsesx J))$/ #D"t,J"t,JZ' , 0 0 6 . $$T*HHTN #rCdialect_kwargs)rrrrrrrz Iterable[str])r"_get_identity_options_dictrunionidentity_has_dialect_kwargshasattrrar) metadata_io inspector_io default_ior^meta_dinsp_drrgrs ` @@rBr_r_Vs 3 3K @F  3 3L AF 5D5L#$#$#(# # ..z: F &!  ..z#3444  K!12 6 L"2B 7  % % L"2B 7    rC)r-Union[schema.Identity, schema.Sequence, None]rrrz'Union[schema.Identity, schema.Sequence]r^zSet[str])J __future__rloggingrtypingrrrrrr r r r r rrrr sqlalchemyrrrrrrrrrrrrr!r"r#r$sqlalchemy.enginer%r&sqlalchemy.engine.cursorr'sqlalchemy.engine.reflectionr(sqlalchemy.sqlr)r*sqlalchemy.sql.elementsr+sqlalchemy.sql.schemar,r-r.r/sqlalchemy.sql.selectabler0sqlalchemy.sql.type_apir1r2autogenerate.apir3operations.batchr4r5 getLoggerrFrr:r7r<rrKrr_rIrCrBrs#  +8:,)56,)30:+652$116g! t (*$){ ;H{ ;|Z0>0?080  0rC