L iC.ddlmZddlmZddlmZddlmZddlmZddlmZddlm Z ddlm Z dd lm Z dd lm Z dd lm Z dd lmZdd lmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlm Z ddlm!Z!ddlm"Z"ddlm#Z#d d!l$m%Z%d d"l$m&Z&d d#l$m'Z'd d$l$m(Z( d+ d,d%Z) d-d&Z* d.d'Z+ d/d(Z, d0d)Z-y*)1) annotations)List)Optional)Union)AssignmentStmt)CallExpr)ClassDef) Decorator) LambdaExpr)ListExpr) MemberExpr)NameExpr)PlaceholderNode)RefExpr)StrExpr) SymbolNode)SymbolTableNode)TempNode)TypeInfo)Var)SemanticAnalyzerPluginInterface)AnyType) CallableType)get_proper_type)Instance)NoneType) ProperType)Type) TypeOfAny) UnboundType) UnionType)apply)infer)names)utilctj||}|y|jjdrytj||}tj |||st j||||Sg}|jjs2|jjD]\}}t|||||nltj|jjD]@}t|trt!||||"t|t"s3t%||||Bt'|||st j(|||tj*|||S)Nbuiltins)r& info_for_clsfullname startswithget_mapped_attributesestablish_as_sqlalchemyr# re_apply_declarative_assignmentsdefsbodyr%items_scan_symbol_table_entryflatten_typechecking isinstancer!_scan_declarative_assignment_stmtr _scan_declarative_decorator_stmt_scan_for_mapped_basesadd_additional_orm_attributesset_mapped_attributes)clsapi is_mixin_scaninfomapped_attributessym_namesymstmts d/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sqlalchemy/ext/mypy/decl_class.py,scan_declarative_assignments_and_apply_typesrC0s^   S# &D |   , ""4-    &$   2 23=N O   88=="ZZ--/ MHc $S(C):   --chhmm< D$/1d$5D),0d$5  3$  ++C6GHt%67 c t|j}t|tsyd}t j |j}d}|tj tjtjtjtjtjhvr*|jrt|jd}nFd}nB|tjur/|jsd}nt|jd} t| tr | j} t| ttfr|j!| j"| } | t| j$trt j&| j$tj(r5t+t-j.|| j$gt1g}n:t3j4|dj7| j$j8||rLd} t3j4|| j7||j"|t;t<j>}|j|j$J|jAt3jB||j$jD|j$jF||jHyy)zaExtract mapping information from a SymbolTableNode that's in the type.names dictionary. NFrT4Column type should be a TypeEngine subclass not '{}'zCan't infer type from attribute {} on class {}. please specify a return type from this function that is one of: Mapped[], relationship[], Column[], MapperProperty[]namelinecolumntypr=)%rtyper4rr%type_id_for_named_nodeMAPPED RELATIONSHIPCOMPOSITE_PROPERTYMAPPER_PROPERTYSYNONYM_PROPERTYCOLUMN_PROPERTYargsCOLUMNr rlookup_qualifiedrHnodehas_base_type_id TYPEENGINEr!r$#extract_python_type_from_typeenginerr&failformatr*rr special_formappendSQLAlchemyAttributerIrJr=) r:r;rHvalue attributes value_typeleft_hand_explicit_typetype_iderrtypeengine_argr@msgs rBr2r2rs8!,J j( +"**:??;G C          ??&5jooa6H&I #C ELL C:I";N.(3!/!4!4.;*AB**>+>+>O?z#((H'E--chh8H8HI2; % I I$'2!"!) 3/ 006sxx7H7H0I&   B #szz$137"))*@*@"A*zz%%%  $ $ZZ__zz((+XX   +rDc  |jD]E}t|tttfst j |t jusEny|jjj|}d}tj|jrttj }t|j"j}|j"|_t'|gt)|} |j$j*| _| |jj|<yt|j,j*t.r|j,j*j0} t| t2rt j4| ||} ny| t j6t j8t j:t j<t j>t j@hvr&| jBrtE| jBd}n| t jFur| jBr| jBd} t| t2r|jI| j| } | t| j$tJrt jL| j$t jNr5tQtSjT|| j$gtWg}n:tjX|dj[| j$j\| |Ud}tjX||j[|j"j|ttj }t|j"j}|j"|_t|t2rtEtj^||}|jat jb|g|j$_t jdtg|j,jh|j,j}t'|g|} |j$j*| _|jktjl|j|jn|jp||jr| |jj|<y)aExtract mapping information from a @declared_attr in a declarative class. E.g.:: @reg.mapped class MyClass: # ... @declared_attr def updated_at(cls) -> Column[DateTime]: return Column(DateTime) Will resolve in mypy as:: @reg.mapped class MyClass: # ... updated_at: Mapped[Optional[datetime.datetime]] NrrFzCan't infer type from @declared_attr on function '{}'; please specify a return type from this function that is one of: Mapped[], relationship[], Column[], MapperProperty[]rG): decoratorsr4rr rr%rM DECLARED_ATTRr/r0indexr&name_is_dunderrHrrr]varrWrrrLfuncrret_typer type_id_for_unbound_typerNrOrPrQrRrSrTrrUrVrrXrYr!r$rZrr[r\r*unbound_to_instance named_typeNAMED_TYPE_SQLA_MAPPEDexpr_to_mapped_constructorr argumentsr^r_rIrJr=)r:r;rAradec dec_indexrcany_ left_nodenew_stmt func_typerdrfr@rgrvalues rBr6r6s8 sXz:> ?,,S1U5H5HH    ##D)I48 499% y--.TXX]]+  !9+x~>!++ #+ i  DIINNL 1IINN++ i -44YSIG   ""((%%&&%%  &5innQ6G&H #  $&^^A.N.+6**>+>+>O?z#((H'E--chh8H8HI2; % I I$'2!"!) 3/ 006sxx7H7H0I% &  B #szz$((--0$7"))*@*@"A'IXXIN);7"1  $ $S*A B# .. $$'>&?INN - -499&& 7Fyk62HNN''HM   ;;'   (CHHMM)rDc |jd}t|tsy|jjj |j }|J|j}t|try||jusJt|tsJ|j dk(r=|j|jdurtj|jy|j dk(r tj|jn|j jdry|j dk(r|t|jt stj"|d|nJ|jj$D]1}t|tt&fst)j*||||3d}d} |j,s |j.t|j.t0r|j.} |j.j d k(r|j3d |} | | jt j4| jtj6urt9|j.j:d} |j.}nst9|j.} t| t<rJt j4| j.tj6urt9| j:d} | }n| } d}t|jt>r|| } not|jt@rTt|jjBtDr0tGjH|||| |jjB} | yy| J|jKtjL|j |jN|jP| |j t)jR|||| | y) zZExtract mapping information from an assignment statement in a declarative class. rN __abstract__T __tablename_____mypy_mapped_attrsz+_mypy_mapped_attrs is expected to be a listMappedrG)*lvaluesr4rr=r%getrHrWrr parse_boolr|r& set_is_base set_has_tabler+r r[r1rr#apply_mypy_mapped_attr is_inferredrLr rVrMrNrrTrrrcalleerr$#infer_type_from_right_hand_nameexprr^r_rIrJapply_type_to_mapped_statement) r:r;rAralvaluer@rWitemleft_hand_mapped_typerc mapped_sym node_typepython_type_for_types rBr5r5gsB\\!_F fh ' ((..  V[[ )C ?? 88D$( 6;;   dC   yyN" >>$++ &$ .   SXX & o % 388$   d # * *$++x0 IIcH$ O )) MdXw$7800c4L M-148 499, dii -'+ii #yy~~) 11(C@ *"344Z__E||$/> q)/+-1II)$DII. y( +,,Y^^< L'6innQ6G&H #$- !'0 #$( !$++x(-B-N 7 DKK *z G0 %HH t4dkk6H6H  '    ++ +   ;;$   ((   rDctj||}|y|jddD]6}|jj drt |j |d8y)zGiven a class, iterate through its superclass hierarchy to find all other classes that are considered as ORM-significant. Locates non-mapped mixins and scans them for mapped attributes to be applied to subclasses. Nr"r(T)r<)r&r)mror*r+rCdefn)r:r;r= base_infos rBr7r7sc   S# &D |XXa^     ( ( 4  5 NNCt   rDN)F)r:r r;rr<boolreturnz(Optional[List[util.SQLAlchemyAttribute]]) r:r r;rrHstrr`rraList[util.SQLAlchemyAttribute]rNone) r:r r;rrAr rarrr) r:r r;rrArrarrr)r:r r;rrr). __future__rtypingrrr mypy.nodesrrr r r r r rrrrrrrrr mypy.pluginr mypy.typesrrrrrrrrr r!r#r$r%r&rCr2r6r5r7rDrBrsw#% !!&!&7#&! "   ? ? (??. ?DV V (V  V   V / V  V rY( Y( (Y( Y(/ Y(  Y(x  ( /   D  (   rD