zmc
2023-08-08 e792e9a60d958b93aef96050644f369feb25d61b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
U
¸ý°dG'ã@sRdZddlmZddlmZddlmZddlmZddlmZddlmZ    ddlm
Z
dd    l m Z dd
l mZdd l mZdd lmZdd lmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlm Z ddlm!Z!ddlmZddl"m#Z#ddl"m$Z$ddl"m%Z%z e&dƒWne'k
r‚Yn
Xe'd ƒ‚Gd!d"„d"eƒZ(d#d$d%œd&d'„Z)d(d)d*œd+d,„Z*d-d)d*œd.d/„Z+d-d)d*œd0d1„Z,d-d)d*œd2d3„Z-d-d)d*œd4d5„Z.d-d)d*œd6d7„Z/d-d)d*œd8d9„Z0d:d;d*œd<d=„Z1d>d)d*œd?d@„Z2dAdBd)dCœdDdE„Z3dFS)Gz"
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)Úutilzsqlalchemy-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@s|eZdZdddœdd„Zdddœdd„Zdddœd    d
„Zdddœd d „Zdddœd d„Zdddœdd„Zdddœdd„Z    dS)ÚSQLAlchemyPluginÚstrz2Optional[Callable[[DynamicClassDefContext], None]])ÚfullnameÚreturncCst |¡tjkrtSdS©N)rÚtype_id_for_fullnameZDECLARATIVE_BASEÚ_dynamic_class_hook©Úselfr!©r(úQd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\sqlalchemy/ext/mypy/plugin.pyÚget_dynamic_class_hook<sz'SQLAlchemyPlugin.get_dynamic_class_hookz+Optional[Callable[[ClassDefContext], None]]cCstSr#)Ú_fill_in_decoratorsr&r(r(r)Úget_customize_class_mro_hookCsz-SQLAlchemyPlugin.get_customize_class_mro_hookcCs\| |¡}|dk    rX|jdk    rXt |j¡}|tjkr6tS|tjtjfkrJtS|tj    krXt
SdSr#) Úlookup_fully_qualifiedÚnoderÚtype_id_for_named_nodeZMAPPED_DECORATORÚ_cls_decorator_hookZAS_DECLARATIVEZAS_DECLARATIVE_BASEÚ_base_cls_decorator_hookZDECLARATIVE_MIXINÚ_declarative_mixin_hook)r'r!ÚsymZtype_idr(r(r)Úget_class_decorator_hookHs
 
þ
z)SQLAlchemyPlugin.get_class_decorator_hookcCst |¡tjkrtSdSr#)rr$ZDECLARATIVE_METAÚ_metaclass_cls_hookr&r(r(r)Úget_metaclass_hook\sz#SQLAlchemyPlugin.get_metaclass_hookcCs.| |¡}|r*t|jtƒr*t |j¡r*tSdSr#)r-Ú
isinstancer.rrZhas_declarative_baseÚ_base_cls_hook)r'r!r3r(r(r)Úget_base_class_hookfs
ÿ
þ
ýz$SQLAlchemyPlugin.get_base_class_hookz,Optional[Callable[[AttributeContext], Type]]cCs| d¡rtSdS)Nz-sqlalchemy.orm.attributes.QueryableAttribute.)Ú
startswithÚ_queryable_getattr_hookr&r(r(r)Úget_attribute_hookts
ÿz#SQLAlchemyPlugin.get_attribute_hookrzList[Tuple[int, str, int]])Úfiler"cCs
dddgS)N)é
úsqlalchemy.orméÿÿÿÿ)r>zsqlalchemy.orm.attributesr@)r>zsqlalchemy.orm.decl_apir@r()r'r=r(r(r)Úget_additional_deps~süz$SQLAlchemyPlugin.get_additional_depsN)
Ú__name__Ú
__module__Ú __qualname__r*r,r4r6r9r<rAr(r(r(r)r;s
 
rr zTypingType[SQLAlchemyPlugin])Úversionr"cCstSr#)r)rEr(r(r)Úplugin‰srFrÚNone)Úctxr"cCs4t|ƒt|jtgƒƒ}|j |j¡|_ttƒ||jj    ƒ}||_
t |j|ƒt j |jdtfd}|dk    r¨t|jtƒr¨t  |j¡tj|jj|jddt|jgƒg|_n|j tj¡}|g|_z t|ƒWnDtk
rt  |jd|j¡|j tj¡}|g|_d|_YnX|j |jt t!|ƒ¡t  |¡dS)zZGenerate a declarative Base class when the declarative_base() function
    is encountered.Úcls)Z
expr_typesNT©Z is_mixin_scanz.Not able to calculate MRO for declarative base)"Ú _add_globalsr Únamer ÚapiZqualified_namer!rrZ
cur_mod_idÚinfoÚ_set_declarative_metaclassrZget_callexpr_kwargÚcallrr7r.Ú set_is_baserÚ,scan_declarative_assignments_and_apply_typesZdefnrÚbasesZ
named_typerZNAMED_TYPE_BUILTINS_OBJECTr
r ÚfailZfallback_to_anyZadd_symbol_table_noderr)rHrIrNZcls_argÚobjr(r(r)r%s<  ÿ ÿ r%rcCsÒ|jjD]Ä}t|tjƒr:t|jtjƒr:|jjdkr:|j}nt|tjƒr|jdkr|}nqt|jt    ƒr|j
j |jj|dd}nq|r|j rt |jƒ}t|tƒr´|jj›d|j›|_qt |j
d|j|j ¡qdS)NZas_declarative_baseZmappedT)Zsuppress_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())rIZ
decoratorsr7r    ZCallExprZcalleeÚ
MemberExprrLÚexprrrMZlookup_qualifiedr.rÚtyperr!rrT)rHÚ    decoratorÚtargetr3Zsym_typer(r(r)r+´s@
 
ÿ þ
ý
ÿþ ÿ
 
 
 
ýúr+cCs€t|ƒt|jtjƒst‚|jj}t|tjƒr<t|jtj    ƒs@t‚t
|jj ƒ}t|t ƒrht  |j ¡t jkslt‚t |j|j¡dSr#)rKr7Úreasonr    rWÚAssertionErrorrXZRefExprr.ZVarrrYrrr/ZREGISTRYrrRrIrM)rHrXZ    node_typer(r(r)r0ês ÿþr0cCs>t|ƒ|j}t|j|ƒt |jj¡tj||jdddS©NTrJ)    rKrIrOrMrrQrNrrR)rHrIr(r(r)r1ûs ÿr1cCs.t|ƒt |jj¡tj|j|jdddSr^)rKrrQrIrNrrRrM©rHr(r(r)r2sÿr2cCst |jj¡dSr#)rrQrIrNr_r(r(r)r5sr5cCst|ƒt |j|j¡dSr#)rKrrRrIrMr_r(r(r)r8sr8rrcCs|jSr#)Zdefault_attr_typer_r(r(r)r;sr;z.Union[ClassDefContext, DynamicClassDefContext]cCst |ddd¡dS)z`Add __sa_DeclarativeMeta and __sa_Mapped symbol to the global space
    for all class defs
 
    r?ZMappedZ __sa_MappedN)rZ
add_globalr_r(r(r)rKsrKrr )rMÚ
target_clsr"cCs@|j}| d¡}|dk    r$t|jtƒs(t‚t|jgƒ|_|_dS)Nz'sqlalchemy.orm.decl_api.DeclarativeMeta)    rNZlookup_fully_qualified_or_noner7r.rr]rZdeclared_metaclassZmetaclass_type)rMr`rNr3r(r(r)rO(s ÿrON)4Ú__doc__Ú
__future__rÚtypingrrrrrZ
TypingTyperZmypyr    Zmypy.mror
r Z
mypy.nodesr r rrrrrrZ mypy.pluginrrrrrZ
mypy.typesrrÚrrrÚ
__import__Ú ImportErrorrrFr%r+r0r1r2r5r8r;rKrOr(r(r(r)Ú<module>s`                              ÿ    N'6