|L i:ddlmZddlZddlZddlmZddlmZddlmZddlmZddlm Z ddlm Z dd lm Z dd lm Z dd lm Z dd lmZdd lmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlm Z ddlm!Z!ddlm"Z"ddlm#Z#ddl$m%Z%ddl&m'Z'ddl(m)Z)erHddlm*Z*dd lm+Z+dd!lm,Z,dd"lm-Z-dd#l.m/Z/dd$l.m0Z0dd%l.m1Z1dd&lm2Z2dd'l3m4Z4dd(lm5Z5dd)l6m7Z7dd*l6m8Z8ed+ed,-Z9Gd.d/e Z:dfd0Z;e<ejzd1eDcgc] }e;| c}Z>e>d2k\Z?e>d3k\Z@e>d4k\ZAe>d5k\ZBe>d6k\ZCeZDer dgd7ZEndd8lFmEZEeGejVeZH dh did9ZIeArdd:lmJZJndd;lKmLZJedeMeJfZNeeMeJfZO djd<ZPdkd=ZQdld>ZRd?ZSej dmd@ZU dndAZV dodBZW dodCZXdpdDZYdqdEZZdrdFZ[ dsdGZ\dHZ]dIZ^dtdJZ_dtdKZ`dudLZadMZbdNZcedejdOrdPZfdQZgndRZfdSZgdvdTZhdwdUZidxdVZjdWZk dydXZl dzdYZmd{dZZnGd[d\ejjZoeEeo d|d]ZpGd^d_e ZqeEeq d}d`Zr d~daZs ddbZtddcZudddZvdtdeZwycc}w)) annotationsN)Any)Callable)Dict)Iterable)Iterator)Optional)Protocol)Set)Type) TYPE_CHECKING)TypeVar)Union) __version__schema)sql)types)CheckConstraint)Column)ForeignKeyConstraint)visitors) DialectKWArgs) BindParameter) ColumnClause) TextClause)UnaryExpression) _NONE_NAME)traverse) TypeGuard) ClauseElement)Identity)Index)Table) Connection)Dialect) Transaction)ColumnCollection) SQLCompiler) ColumnElement) Constraint) SchemaItem_CE)zColumnElement[Any]r,)boundceZdZddZy)_CompilerProtocolc yN)selfelementcompilerkws ^/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/alembic/util/sqla_compat.py__call__z_CompilerProtocol.__call__8sN)r5rr6rr7rreturnstr)__name__ __module__ __qualname__r9r3r:r8r0r07sJr:r0c, t|S#|cYSxYwr2)int)values r8 _safe_intrC;s5z s z (\d+|[abc]\d)))rDrE))rH)rHrDcyr2r3)r5dialectss r8compilesrLOs;>r:)rLc |iStrOt|dsJ|j}|r-t|tsJ|j |j |Si}t|tjr*|j|d<|j|j|d<d}|j |Dcic]}t||d|t||dc}|Scc}w)N_as_dictalwayson_null) start incrementminvaluemaxvalue nominvalue nomaxvaluecyclecacheorder) identity_has_dialect_kwargshasattrrN isinstancerupdatedialect_kwargsrr"rOrPgetattr)identityr^as_dictattrskeys r8_get_identity_options_dictrdZs $x,,,##% h 6 66 NN822 36 N3 h 0 (GH +%-%5%5 "   ! 8S$/;WXsD11   N  s1"C) _NoneName)symbolcB|tuxst|ttfSr2)rr\r<renames r8constraint_name_definedrjs  :  CD3 2B!CCr:c"t|tSr2)r\r<rhs r8constraint_name_stringrls dC  r:c t|r|SdSr2)rlrhs r8constraint_name_or_nonerns)$/49T9r:autoc#K |j}|dy|s"|J|j5ddddydy#t$rd}YBwxYw#1swYyxYwwr2)in_transactionAttributeErrorbegin connectionrqs r8_ensure_scope_for_ddlrvsy #22 ) ))!!#          s=A" A"A"AA" AA"AA"AA"cJ|j}|r|S|jSr2)get_transactionrsru transactions r8"_safe_begin_connection_transactionr{s*,,.K!!r:cJ|j}|r|jyyr2)rxcommitrys r8#_safe_commit_connection_transactionr~s&,,.Kr:cJ|j}|r|jyyr2)rxrollbackrys r8%_safe_rollback_connection_transactionrs&,,.Kr:cH |j}|S#t$rYywxYw)NF)rqrrrts r8_get_connection_in_transactionrs1 #22  s  !!c|jSr2) expressions)idxs r8_idx_table_bound_expressionsrs ??r:c bt|dr|jdi|S|jdi|S)N_copyr3)r[rcopy) schema_itemr7s r8rrs8{G$ {  &2&&{%"%%r:c<|jj|||Sr2)dialect has_table) connectable tablename schemanames r8_connectable_has_tablers    ( (i LLr:c r|j5}|j||cdddS#1swYyxYwr2)_operation_contextexecute) inspector statementparamsconns r8_exec_on_inspectorrs3  % % '/4||Iv.///s-6c>ddlm}|j|juS)Nrr)sqlalchemy.sqlr_user_defined_nullableNULL_UNSPECIFIED)metadata_columnrs r8_nullability_might_be_unsetrs%  1 1V5L5L LLr:c&td|DS)Nc3PK|]}t|tj ywr2)r\rComputed.0sds r8 z._server_default_is_computed..H2z"foo.H$&anyserver_defaults r8_server_default_is_computedr HH HHr:c&td|DS)Nc3PK|]}t|tj ywr2)r\rr"rs r8rz._server_default_is_identity..rrrrs r8_server_default_is_identityrrr:c^t|tr|j}|J|S|jSr2)r\rparenttable) constraintrs r8_table_for_constraintrs5*23!!    r:ct|tr$|jDcgc]}|jc}St|trt |j St|jScc}wr2) r\relementsrr _find_columnssqltextlistcolumns)rfks r8_columns_for_constraintrsY*23$.$7$78b 88 J 0Z//00J&&'' 9sA/cpt|r*t|\}}|j|j|S|Sr2)_type_has_variants_get_variant_mappinggetri)type_r base_typemappings r8_resolve_for_variantrs3% 1%8 7{{7<<33 r:_variant_mappingc,t|jSr2)boolrrs r8rrsE**++r:c||jfSr2)rrs r8rrse,,,,r:c8t|tjuSr2)typesqltypesVariantrs r8rr!sE{h....r:c2|j|jfSr2)implrrs r8rr$szz5==((r:c tr8|jJ|jJt|jt sJ|j Dcgc]}|j|j}}|jj}|jj}|jdjjj}|jdjjj}|jDcgc]}|jj}}|j} |j} |j} |j} ||||||| | | | f Scc}wcc}w)Nr)r rrr\rr$ column_keysrircolumnrondeleteonupdate deferrable initially) rrcsource_columns source_table source_schema target_schema target_tabler5target_columnsrrrrs r8_fk_specr(s\!!---""...*++U3331;0F0F), 3$$N$$))L%%,,M''*1177>>M&&q)0066;;L9C9L9LMggnn))MNM""H""H&&J$$I  Ns EE#c|jdj}|jd}|jddj |}|j J||j j k(S)Nr.)r _get_colspecsplitpopjoinrrc)rspectokenstablekeys r8_fk_is_self_referentialrIsj   q ! . . 0D ZZ_F JJrNxxH    (( ( z((,, ,,r:c|jSr2) _type_bound)rs r8_is_type_boundrRs  ! !!r:cLt}t|id|ji|S)z2locate Column objects within the given expression.r)setradd)clausecolss r8rrYs%%(ED VR(DHH-. Kr:c|jJ||j}t|ds t|dr|jj|y|j|y)z(remove a column from a ColumnCollection.N _immutable _readonly)rcr[_parentremove) collectionr to_removes r8_remove_column_from_collectionrasY :: !! !6::&Iz<(GJ ,L!!),)$r:cbt|tr-t|tj}|j ||St|t r t||St|trt||jSt|tjr t||Std)zAa workaround for the Index construct's severe lack of flexibilityz#String or text() construct expected)r\r<rrNULLTYPE append_columnr_textual_index_element_textual_index_columntextrr*_copy_expression ValueError)rtext_cs r8rrss% 5(++ , A E: &%eU33 E1 2$UEJJ77 E3,, -u-->??r:c<fd}tj|i|S)Nct|tri|j]|jurO|jjvrj|jSt |}j ||Syr2)r\rrrirrr)colrrs r8replacez!_copy_expression..replacese sF # % -xx<>>)#~~chh//#J**1-r:)rreplacement_traverse) expressionrr s ` r8rrs$   ( (B r:c"eZdZdZdZddZdZy)raQWrap around a sqlalchemy text() construct in such a way that we appear like a column-oriented SQL expression to an Index construct. The issue here is that currently the Postgresql dialect, the biggest recipient of functional indexes, keys all the index expressions to the corresponding column expressions when rendering CREATE INDEX, so the Index we create here needs to have a .columns collection that is the same length as the .expressions collection. Ultimately SQLAlchemy should support text() expressions in indexes. See SQLAlchemy issue 3174. _textual_idx_elementc||_||_|j|_tj|jjt j |_|j|jyr2) rrrcrrrr fake_columnr)r4rrs r8__init__z_textual_index_element.__init__sP  99!==9J9JK D,,-r:c |jgSr2)r)r4r7s r8 get_childrenz#_textual_index_element.get_childrens  !!r:N)rr$rrr;None)r=r>r?__doc____visit_name__rrr3r:r8rrs ,N."r:rc <|j|jfi|Sr2)processrr5r6r7s r8_render_textual_index_columnrs  8  GLL /B //r:c eZdZy)_literal_bindparamN)r=r>r?r3r:r8rrsr:rc (|j|fi|Sr2)render_literal_bindparamrs r8_render_literal_bindparamrs -8 , ,W ; ;;r:c^|jy|J|jj|dSNF)_alembic_quoteriidentifier_preparerformat_constraint)rrs r8_get_constraint_final_namer%sB     & & 8 85 9 r:cf|jy|J|jj|d}|duSr r")rrris r8_constraint_is_namedr'sJ     & & 8 85 9 D t r:c@|jD]}t|syyNTF)r is_expression)indexexprs r8is_expression_indexr-s'!!   r:ct|tr|j}t|trt|tr |jryyr))r\rr5r is_literal)r,s r8r*r*s7 T? +|| T? + dL )T__ r:cFtxrttjdS)Ninherit_schema)sqla_2_1r[rEnumr3r:r8_inherit_schema_deprecatedr4s  @ /?@@r:)rBr<r;zUnion[int, str])r5zType[ClauseElement]rKr<r;z0Callable[[_CompilerProtocol], _CompilerProtocol])F)r`z&Union[Identity, schema.Sequence, None]r^rr;zDict[str, Any])ri_ConstraintNamer;z!TypeGuard[_ConstraintNameDefined])rir5r;zTypeGuard[str])rir5r; Optional[str])ruOptional[Connection]r;zIterator[None])rur%r;r')rur%r;r)rur7r;r)rr#r;zIterable[ColumnElement[Any]])rr-r;r-)rr%rr<rzUnion[str, None]r;r)r;r)rr+r;r$)rrr;r)rrr;r)rr+r;r)rr(rz%Union[Column[Any], ColumnClause[Any]]r;r)rr$rz*Union[str, TextClause, ColumnElement[Any]]r;z&Union[ColumnElement[Any], Column[Any]])r r-rr$r;r-)r5rr6r)r;r<)r5rr6r)r;r<)rzUnion[Index, Constraint]rOptional[Dialect]r;r6)rzUnion[Constraint, Index]rr8r;r)r+r#r;r)r,rr;r)x __future__r contextlibretypingrrrrrr r r r r rr sqlalchemyrrrrrsqlalchemy.schemarrrrrsqlalchemy.sql.basersqlalchemy.sql.elementsrrrrsqlalchemy.sql.namingrsqlalchemy.sql.visitorsrtyping_extensionsr r!r"r#r$sqlalchemy.enginer%r&r'r(sqlalchemy.sql.compilerr)r*sqlalchemy.sql.schemar+r,r-r0rCtuplefindall_vers sqla_14_18 sqla_14_26sqla_2 sqla_2_0_25r2sqlalchemy_versionrLsqlalchemy.ext.compiler issubclassrZrdresqlalchemy.utilrfr<r5_ConstraintNameDefinedrjrlrnAUTOINCREMENT_DEFAULTcontextmanagerrvr{r~rrrrrrrrrrrrr[ TypeEnginerrrrrrrrrrrrrr%r'r-r*r4)xs0r8rWs#  "(-$2#-10.3:,'(#  ,)-43500 e5!CDEKK %2::&6 DEaYq\E j j $w F? ?$?14? 9? 1)-H !&4&&&R -3c9,-sI~.D D&D !: $,"""   &MM(+M9IM M / M II ( 8   23,- /)B-"% %*O% %$@ @C@+@$*"S..": !0 #0/:00"0    < <+6<<< ( 3D   ( 3D   Ac Fs4K