ó
    øÞ j&  ã                  ó.  • 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-stubszÙThe 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     ÚT/var/www/html/gaurav/venv/lib/python3.13/site-packages/sqlalchemy/ext/mypy/plugin.pyÚget_dynamic_class_hookÚ'SQLAlchemyPlugin.get_dynamic_class_hook=   s&   € ô ×%Ò% hÓ/´5×3IÑ3IÒIÜ&Ð&Øó    c                ó   • [         $ r$   )Ú_fill_in_decoratorsr(   s     r+   Úget_customize_class_mro_hookÚ-SQLAlchemyPlugin.get_customize_class_mro_hookD   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_hookI   sˆ   € ð ×)Ñ)¨(Ó3ˆà‰?˜sŸx™xÑ3Ü×2Ò2°3·8±8Ó<ˆ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Ó/´5×3IÑ3IÒ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_hookf   sH   € ð ×)Ñ)¨(Ó3ˆö Ü˜3Ÿ8™8¤X×.Ñ.Ü×)Ò)¨#¯(©(×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_hookt   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         N»f = 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š  € ô �Ôä
�3—8‘8œU 2›YÓ
'€CØ—7‘7×)Ñ)¨#¯(©(Ó3€C„Lä”K“M 3¯©×(:Ñ(:Ó;€DØ„HÜ˜sŸw™w¨Ô,ä×%Ò% c§h¡h°Ä8À+ÑN€GØÑœz¨'¯,©,¼×AÑAÜ×Ò˜Ÿ™Ô&Ü×?Ò?Ø�L‰L×Ñ˜sŸw™w°dò	
ô ˜wŸ|™|¨RÓ0Ð1ˆ�
à�g‰g× Ñ ¤×!AÑ!AÓBˆà�UˆŒ
ð$Ü�dÔð ‡G�G×!Ñ! #§(¡(¬O¼DÀ$Ó,GÔHÜ×Ò�TÕøô ó $Ü�	Š	Ø�G‰GÐEÀsÇxÁxô	
ð �g‰g× Ñ ¤×!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Ú.zžClass 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  € Ø—W‘W×'Õ'ˆ	ô �y¤%§.¡.×1Ñ1Ü˜9×+Ñ+¬U×-=Ñ-=×>Ñ>Ø× Ñ ×%Ñ%Ð)>Ó>à×%Ñ%‰Fä�y¤%×"2Ñ"2×3Ñ3Ø—‘ (Ó*à‰Fáä�f—k‘k¤8×,Ñ,Ø—'‘'×*Ñ*Ø—‘× Ñ  &¸$ð +ð ‰Cñ ç‰3�3—8—8’8Ü& s§x¡xÓ0ˆHÜ˜(¤H×-Ñ-Ø%-§]¡]×%;Ñ%;Ð$<¸A¸f¿k¹k¸]Ð"K�—ô —	’	Ø—G‘Gð9ð <B¿;¹;ñGð —H‘H÷ò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À   € Ü�ÔÜ�c—j‘j¤%×"2Ñ"2×3Ñ3Ð3Ð3Ø�:‰:�?‰?€Dä�dœEŸM™M×*Ñ*¬z¸$¿)¹)ÄUÇYÁY×/OÑ/OÐOÐOä §	¡	§¡Ó/€Iô 	�9œh×'Ñ'Ü×(Ò(¨¯©Ó8¼E¿N¹NÒJðð	Kô ×;Ò;¸C¿G¹GÀSÇWÁWÕ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ä˜sŸw™w¨Ô,ä×Ò�S—W‘W—\‘\Ô"Ü×;Ò;Ø�W‰W Dó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=   € Ü�ÔÜ×Ò�S—W‘W—\‘\Ô"Ü×;Ò;Ø�‰�—‘¨ór.   c                óX   • [         R                  " U R                  R                  5        g r$   )r   rr   re   rn   r–   s    r+   rD   rD     s   € Ü×Ò�S—W‘W—\‘\Õ"r.   c                óp   • [        U 5        [        R                  " U R                  U R                  5        g r$   )ri   r   rs   re   rk   r–   s    r+   rJ   rJ     s"   € Ü�ÔÜ×;Ò;¸C¿G¹GÀSÇWÁWÕ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   € ô 	‡O‚O�CÐ)¨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<¸S¿X¹XÀrÓ4JÐJ€DÔ˜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