
    ,hC                    :   S SK Jr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJ	r	  S SKJ
r
  S S	KJr  S S
KJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJ r   S SKJ!r!  S SKJ"r"  S SKJ#r#  S S!K$J%r%  S S"K$J&r&  S S#K$J'r'  S S$K$J(r(   S+       S,S% jjr)            S-S& jr*          S.S' jr+          S/S( jr,      S0S) jr-g*)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)utilc                "   [         R                  " X5      nUc  g U R                  R                  S5      (       a  g [         R                  " X15      n[         R
                  " U5        Ub   U(       d  [        R                  " XU5        U$ / nU R                  R                  (       d1  UR                  R                  5        H  u  pV[        XXVU5        M     Ow[         R                  " U R                  R                  5       HI  n[        U[        5      (       a  [!        XXt5        M&  [        U["        5      (       d  M=  [%        XXt5        MK     ['        X5        U(       d  [        R(                  " XU5        [         R*                  " X45        U$ )Nbuiltins)r&   info_for_clsfullname
startswithget_mapped_attributesestablish_as_sqlalchemyr#    re_apply_declarative_assignmentsdefsbodyr%   items_scan_symbol_table_entryflatten_typechecking
isinstancer   !_scan_declarative_assignment_stmtr
    _scan_declarative_decorator_stmt_scan_for_mapped_basesadd_additional_orm_attributesset_mapped_attributes)clsapiis_mixin_scaninfomapped_attributessym_namesymstmts           V/var/www/auris/envauris/lib/python3.13/site-packages/sqlalchemy/ext/mypy/decl_class.py,scan_declarative_assignments_and_apply_typesrC   0   s@   
 S&D|		 	 	,	, 	""4- 
 	  &$
  223=NO  88== "ZZ--/MH$(): 0
 --chhmm<D$//1d D),,0d = 3$++C6GHt7    c           
        [        UR                  5      n[        U[        5      (       d  gSn[        R
                  " UR                  5      nSnU[        R                  [        R                  [        R                  [        R                  [        R                  [        R                  1;   a/  UR                  (       a  [        UR                  S   5      nGOcSnGO_U[        R                  L GaK  UR                  (       d  SnGO6[        UR                  S   5      n	[        U	[        5      (       a  U	R                  n	[        U	[        [        45      (       a  UR!                  U	R"                  U	5      n
U
b  [        U
R$                  [        5      (       a  [        R&                  " U
R$                  [        R(                  5      (       a5  [+        [,        R.                  " XR$                  / 5      [1        5       /5      nO;[2        R4                  " USR7                  U
R$                  R8                  5      U5        U(       aK  Sn[2        R4                  " XR7                  X R"                  5      U 5        [;        [<        R>                  5      nUbi  UR$                  c   eURA                  [2        RB                  " UUR$                  RD                  UR$                  RF                  UU RH                  S95        gg)zYExtract mapping information from a SymbolTableNode that's in the
type.names dictionary.

NFr   T4Column 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[<python type>], relationship[<target class>], Column[<TypeEngine>], MapperProperty[<python type>]namelinecolumntypr=   )%r   typer4   r   r%   type_id_for_named_nodeMAPPEDRELATIONSHIPCOMPOSITE_PROPERTYMAPPER_PROPERTYSYNONYM_PROPERTYCOLUMN_PROPERTYargsCOLUMNr    r   lookup_qualifiedrH   nodehas_base_type_id
TYPEENGINEr!   r$   #extract_python_type_from_typeenginer   r&   failformatr*   r   r   special_formappendSQLAlchemyAttributerI   rJ   r=   )r:   r;   rH   value
attributes
value_typeleft_hand_explicit_typetype_iderrtypeengine_argr@   msgs               rB   r2   r2   r   sA    !,Jj(++"**:??;G C     ??&5jooa6H&I#C	ELL	 C:I";N .(33!/!4!4.;*ABB**>+>+>O?z#((H'E'E--chh8H8HII2; % I I$'2!" !)
	3/ 		006sxx7H7H0I&	 B 	 			#zz$137"))*@*@"A*zz%%%$$ZZ__zz((+XX	
 +rD   c           
     d
   UR                    HN  n[        U[        [        [        45      (       d  M%  [
        R                  " U5      [
        R                  L d  MN    O   gU R                  R                  R                  U5      nSn[        R                  " UR                  5      (       a  [        [        R                   5      n[        UR"                  R                  5      nUR"                  Ul        ['        U/[)        U5      5      n	UR$                  R*                  U	l        XR                  R                  U'   g[        UR,                  R*                  [.        5      (       Ga  UR,                  R*                  R0                  n
[        U
[2        5      (       a  [
        R4                  " XU5      nOgU[
        R6                  [
        R8                  [
        R:                  [
        R<                  [
        R>                  [
        R@                  1;   a+  U
RB                  (       a  [E        U
RB                  S   5      nGO,U[
        RF                  L Ga  U
RB                  (       Ga  U
RB                  S   n[        U[2        5      (       a  URI                  UR                  U5      nUb  [        UR$                  [J        5      (       a  [
        RL                  " UR$                  [
        RN                  5      (       a5  [Q        [R        RT                  " XR$                  / 5      [W        5       /5      nO;[        RX                  " USR[                  UR$                  R\                  5      U
5        UcU  Sn[        RX                  " XR[                  UR"                  R                  5      U5        [        [        R                   5      n[        UR"                  R                  5      nUR"                  Ul        [        U[2        5      (       a  [E        [        R^                  " X5      5      nURa                  [
        Rb                  U/5      UR$                  l        [
        Rd                  " [g        UR,                  Rh                  UR,                  R                  5      5      n['        U/U5      n	UR$                  R*                  U	l        URk                  [        Rl                  " UR                  URn                  URp                  UU Rr                  S95        XR                  R                  U'   g)ax  Extract 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]]

Nr   rF   zCan't infer type from @declared_attr on function '{}';  please specify a return type from this function that is one of: Mapped[<python type>], relationship[<target class>], Column[<TypeEngine>], MapperProperty[<python type>]rG   ):
decoratorsr4   r   r   r   r%   rM   DECLARED_ATTRr/   r0   indexr&   name_is_dunderrH   r   r   r]   varrW   r   r   rL   funcr   ret_typer    type_id_for_unbound_typerN   rO   rP   rQ   rR   rS   rT   r   rU   rV   r   rX   rY   r!   r$   rZ   r   r[   r\   r*   unbound_to_instance
named_typeNAMED_TYPE_SQLA_MAPPEDexpr_to_mapped_constructorr   	argumentsr^   r_   rI   rJ   r=   )r:   r;   rA   ra   dec	dec_indexrc   any_	left_nodenew_stmt	func_typerd   rf   r@   rg   rvalues                   rB   r6   r6      s   8 sXz:>??,,S1U5H5HH  	##D)I48499%% y--.TXX]]+		!9+x~>!++#+i 	DIINNL	1	1IINN++	i--44YSIG  ""((%%&&%% &5innQ6G&H#$&^^A.N.+66**>+>+>O?z#((H'E'E--chh8H8HII2; % I I$'2!" !)
	3/ 		006sxx7H7H0I%	 &
B 	 			#zz$((--0$7"))*@*@"A'IXXIN );77"1$$SB#
 ..$$'>&?INN --499&&		7F yk62HNN''HM  ;;'	
  (HHMM)rD   c           
        UR                   S   n[        U[        5      (       d  gU R                  R                  R                  UR                  5      nUc   eUR                  n[        U[        5      (       a  gXdR                  L d   e[        U[        5      (       d   eUR                  S:X  a?  UR                  UR                  5      SL a   [        R                  " U R                  5        gUR                  S:X  a!  [        R                  " U R                  5        OUR                  R                  S5      (       a  gUR                  S:X  a  [        UR                  [         5      (       d  [        R"                  " USU5        OQUR                  R$                   H7  n[        U[        [&        45      (       d  M   [(        R*                  " XXs5        M9     SnSn	UR,                  (       d  UR.                  c  [        UR.                  [0        5      (       a  UR.                  n	UR.                  R                  S	:X  a  UR3                  S	U 5      n
U
bl  U
R                  b_  [        R4                  " U
R                  5      [        R6                  L a.  [9        UR.                  R:                  S   5      n	UR.                  nOz[9        UR.                  5      n[        U[<        5      (       aL  [        R4                  " UR.                  5      [        R6                  L a  [9        UR:                  S   5      n	UnOUn	Sn[        UR                  [>        5      (       a  Ub  U	nOz[        UR                  [@        5      (       aZ  [        UR                  RB                  [D        5      (       a1  [F        RH                  " XXiUR                  RB                  5      nUc  gOgUc   eURK                  [        RL                  " UR                  URN                  URP                  UU R                  S
95        [(        RR                  " UUUU	U5        g)zRExtract mapping information from an assignment statement in a
declarative class.

r   N__abstract__T__tablename_____mypy_mapped_attrsz+_mypy_mapped_attrs is expected to be a listMappedrG   )*lvaluesr4   r   r=   r%   getrH   rW   r   r   
parse_boolr|   r&   set_is_baseset_has_tabler+   r   r[   r1   r   r#   apply_mypy_mapped_attris_inferredrL   r    rV   rM   rN   r   rT   r   r   r   calleer   r$   #infer_type_from_right_hand_nameexprr^   r_   rI   rJ   apply_type_to_mapped_statement)r:   r;   rA   ra   lvaluer@   rW   itemleft_hand_mapped_typerc   
mapped_sym	node_typepython_type_for_types                rB   r5   r5   g  sY    \\!_Ffh''
((..

V[[
)C
 ??88D$((;;dC    yyN">>$++&$.SXX&	o	%388$			d	#	#	*	*$++x00IIcH$O))dXw$788004L * -148499,dii-- '+ii#yy~~) 11(C@
*"344Z__E||$ />		q)/+ -1II) $DII.	y(++,,Y^^<L '6innQ6G&H#$-! '0#$(!$++x((-B-N
  7	DKK	*	*zG0 0  %HHtdkk6H6H 
  ' ( 	+++  ;;$	
 
((rD   c                    [         R                  " X5      nUc  gUR                  SS  H:  nUR                  R	                  S5      (       a  M%  [        UR                  USS9  M<     g)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+   rC   defn)r:   r;   r=   	base_infos       rB   r7   r7     s_     S&D|XXa^	((44
 	5NNCt	
 $rD   N)F)r:   r	   r;   r   r<   boolreturnz(Optional[List[util.SQLAlchemyAttribute]])r:   r	   r;   r   rH   strr`   r   ra   List[util.SQLAlchemyAttribute]r   None)
r:   r	   r;   r   rA   r
   ra   r   r   r   )
r:   r	   r;   r   rA   r   ra   r   r   r   )r:   r	   r;   r   r   r   ).
__future__r   typingr   r   r   
mypy.nodesr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   mypy.pluginr   
mypy.typesr   r   r   r   r   r   r   r   r    r!    r#   r$   r%   r&   rC   r2   r6   r5   r7    rD   rB   <module>r      sw   #    %     !  !  &   ! &    7  # &   !    "        ?	?	(? ? .	?DV
	V
	(V
 V
 	V

 /V
 
V
rY(	Y(	(Y( Y( /	Y(
 
Y(x		(  /	
 
D
	
	(
 

rD   