
    ,h&                    .   S 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5        \'" S 5      e! \' a     Of = f " S! S"\5      r(S/S# jr)S0S$ jr*S1S% jr+S1S& jr,S1S' jr-S1S( jr.S1S) jr/S1S* jr0S2S+ jr1S3S, jr2      S4S- jr3g.)5z"
Mypy plugin for SQLAlchemy ORM.

    )annotations)Callable)List)Optional)Tuple)Type)Union)nodes)calculate_mro)MroError)Block)ClassDef)GDEF)MypyFile)NameExpr)SymbolTable)SymbolTableNode)TypeInfo)AttributeContext)ClassDefContext)DynamicClassDefContext)Plugin)SemanticAnalyzerPluginInterface)get_proper_type)Instance   )
decl_class)names)utilzsqlalchemy-stubszThe SQLAlchemy mypy plugin in SQLAlchemy 2.0 does not work with sqlalchemy-stubs or sqlalchemy2-stubs installed, as well as with any other third party SQLAlchemy stubs.  Please uninstall all SQLAlchemy stubs packages.c                      \ rS rSr    SS jr    SS jr    SS jr    SS jr    SS jr    SS jr	    SS jr
S	rg
)SQLAlchemyPlugin;   c                ^    [         R                  " U5      [         R                  L a  [        $ g N)r   type_id_for_fullnameDECLARATIVE_BASE_dynamic_class_hookselffullnames     R/var/www/auris/envauris/lib/python3.13/site-packages/sqlalchemy/ext/mypy/plugin.pyget_dynamic_class_hook'SQLAlchemyPlugin.get_dynamic_class_hook<   s&     %%h/53I3II&&    c                    [         $ r$   )_fill_in_decoratorsr(   s     r+   get_customize_class_mro_hook-SQLAlchemyPlugin.get_customize_class_mro_hookC   s
     #"r.   c                >   U R                  U5      nUb  UR                  b|  [        R                  " UR                  5      nU[        R                  L a  [
        $ U[        R                  [        R                  4;   a  [        $ U[        R                  L a  [        $ g r$   )lookup_fully_qualifiednoder   type_id_for_named_nodeMAPPED_DECORATOR_cls_decorator_hookAS_DECLARATIVEAS_DECLARATIVE_BASE_base_cls_decorator_hookDECLARATIVE_MIXIN_declarative_mixin_hook)r)   r*   symtype_ids       r+   get_class_decorator_hook)SQLAlchemyPlugin.get_class_decorator_hookH   s     ))(3?sxx322388<G%000**$$))  0/E333..r.   c                ^    [         R                  " U5      [         R                  L a  [        $ g r$   )r   r%   DECLARATIVE_META_metaclass_cls_hookr(   s     r+   get_metaclass_hook#SQLAlchemyPlugin.get_metaclass_hook[   s(     %%h/53I3II '&r.   c                    U R                  U5      nU(       aJ  [        UR                  [        5      (       a+  [        R
                  " UR                  5      (       a  [        $ g r$   )r4   
isinstancer5   r   r   has_declarative_base_base_cls_hook)r)   r*   r>   s      r+   get_base_class_hook$SQLAlchemyPlugin.get_base_class_hooke   sH     ))(3 388X..))#((33!!r.   c                <    UR                  S5      (       a  [        $ g )Nz-sqlalchemy.orm.attributes.QueryableAttribute.)
startswith_queryable_getattr_hookr(   s     r+   get_attribute_hook#SQLAlchemyPlugin.get_attribute_hooks   s%     ;
 
 +*r.   c                
    / SQ$ )N))
   sqlalchemy.orm)rS   zsqlalchemy.orm.attributesrU   )rS   zsqlalchemy.orm.decl_apirU    )r)   files     r+   get_additional_deps$SQLAlchemyPlugin.get_additional_deps}   s    
 	
r.   rV   N)r*   strreturnz2Optional[Callable[[DynamicClassDefContext], None]])r*   rZ   r[   z+Optional[Callable[[ClassDefContext], None]])r*   rZ   r[   z,Optional[Callable[[AttributeContext], Type]])rW   r   r[   zList[Tuple[int, str, int]])__name__
__module____qualname____firstlineno__r,   r1   r@   rE   rK   rP   rX   __static_attributes__rV   r.   r+   r!   r!   ;   s    	;##	4#
	4&	4	4	5

	#
r.   r!   c                    [         $ r$   )r!   )versions    r+   pluginrc      s    r.   c                   [        U 5        [        U R                  [        / 5      5      nU R                  R                  U R                  5      Ul        [        [        5       XR                  R                  5      nX!l
        [        U R                  U5        [        R                  " U R                  S[        4S9nUb  [!        UR"                  [        5      (       aq  [        R$                  " UR"                  5        [&        R(                  " UR"                  R*                  U R                  SS9  [-        UR"                  / 5      /Ul        O1U R                  R1                  [2        R4                  5      nU/Ul         [7        U5        U R                  R?                  U R                  [A        [B        U5      5        [        R$                  " U5        g! [8         ag    [        R:                  " U R                  SU R                  5        U R                  R1                  [2        R4                  5      nU/Ul        SUl         Nf = f)zVGenerate a declarative Base class when the declarative_base() function
is encountered.cls)
expr_typesNTis_mixin_scanz.Not able to calculate MRO for declarative base)"_add_globalsr   namer   apiqualified_namer*   r   r   
cur_mod_idinfo_set_declarative_metaclassr   get_callexpr_kwargcallr   rH   r5   set_is_baser   ,scan_declarative_assignments_and_apply_typesdefnr   bases
named_typer   NAMED_TYPE_BUILTINS_OBJECTr   r   failfallback_to_anyadd_symbol_table_noder   r   )ctxre   rn   cls_argobjs        r+   r'   r'      s    
388U2Y
'C77))#((3CLKM3(:(:;DHsww,%%chh8+NGz',,AA&??LLswwd	
 w||R01
gg  !A!ABU
$d GG!!#((OD$,GHT  $		GGEsxx	
 gg  !A!ABU
#$s   G A.I
	I
c                   U R                   R                   GH  n[        U[        R                  5      (       aP  [        UR
                  [        R                  5      (       a'  UR
                  R                  S:X  a  UR
                  nO4[        U[        R                  5      (       a  UR                  S:X  a  UnOM  [        UR                  [        5      (       a0  U R                  R                  UR                  R                  USS9nOM  U(       d  GM  UR                  (       d  GM  [        UR                  5      n[        U[        5      (       a-  UR                  R                    SUR                   3Ul        GMm  ["        R$                  " U R                  SUR                  -  UR                  5        GM     g )Nas_declarative_basemappedT)suppress_errors.zClass decorator called %s(), but we can't tell if it's from an ORM registry.  Please annotate the registry assignment, e.g. my_registry: registry = registry())re   
decoratorsrH   r
   CallExprcallee
MemberExprrj   exprr   rk   lookup_qualifiedr5   r   typer   r*   r   rx   )r{   	decoratortargetr>   sym_types        r+   r0   r0      sF   WW''	 y%..119++U-=-=>>  %%)>>%%Fy%"2"233(*Ffkk8,,''**  &$ + C 33888&sxx0H(H--%-]]%;%;$<Afkk]"K 		GG9 <B;;G HHW (r.   c                T   [        U 5        [        U R                  [        R                  5      (       d   eU R                  R
                  n[        U[        R                  5      (       a)  [        UR                  [        R                  5      (       d   e[        UR                  R                  5      n[        U[        5      (       a1  [        R                  " UR                  5      [        R                  L d   e[        R                   " U R"                  U R$                  5        g r$   )ri   rH   reasonr
   r   r   RefExprr5   Varr   r   r   r   r6   REGISTRYr   rs   re   rk   )r{   r   	node_types      r+   r8   r8      s    cjj%"2"23333::??DdEMM**z$))UYY/O/OOO		/I 	9h''((8ENNJ	K ;;CGGSWWMr.   c                    [        U 5        U R                  n[        U R                  U5        [        R
                  " U R                  R                  5        [        R                  " XR                  SS9  g NTrg   )	ri   re   ro   rk   r   rr   rn   r   rs   )r{   re   s     r+   r;   r;      sN    
''Csww,SWW\\";;WWDr.   c                    [        U 5        [        R                  " U R                  R                  5        [
        R                  " U R                  U R                  SS9  g r   )ri   r   rr   re   rn   r   rs   rk   r{   s    r+   r=   r=     s=    SWW\\";;r.   c                X    [         R                  " U R                  R                  5        g r$   )r   rr   re   rn   r   s    r+   rD   rD     s    SWW\\"r.   c                p    [        U 5        [        R                  " U R                  U R                  5        g r$   )ri   r   rs   re   rk   r   s    r+   rJ   rJ     s"    ;;CGGSWWMr.   c                    U R                   $ r$   )default_attr_typer   s    r+   rO   rO     s        r.   c                6    [         R                  " U SSS5        g)zXAdd __sa_DeclarativeMeta and __sa_Mapped symbol to the global space
for all class defs

rT   Mapped__sa_MappedN)r   
add_globalr   s    r+   ri   ri     s     	OOC)8]Cr.   c                    UR                   nU R                  S5      nUb  [        UR                  [        5      (       d   e[        UR                  / 5      =Ul        Ul        g )Nz'sqlalchemy.orm.decl_api.DeclarativeMeta)rn   lookup_fully_qualified_or_nonerH   r5   r   r   declared_metaclassmetaclass_type)rk   
target_clsrn   r>   s       r+   ro   ro   '  sX     ??D

,
,1C ?z#((H====4<SXXr4JJDd1r.   N)rb   rZ   r[   zTypingType[SQLAlchemyPlugin])r{   r   r[   None)r{   r   r[   r   )r{   r   r[   r   )r{   z.Union[ClassDefContext, DynamicClassDefContext]r[   r   )rk   r   r   r   r[   r   )4__doc__
__future__r   typingr   r   r   r   r   
TypingTyper	   mypyr
   mypy.mror   r   
mypy.nodesr   r   r   r   r   r   r   r   mypy.pluginr   r   r   r   r   
mypy.typesr   r    r   r   r   
__import__ImportErrorr!   rc   r'   r0   r8   r;   r=   rD   rJ   rO   ri   ro   rV   r.   r+   <module>r      s    #     %   "       " &  ( ' .  7 &     !" 	   		J
v J
Z$N3lN"
#N
!DK	(K6>K	Ks   2C C
C