U a&@s&dZddlmZddlmZddlmZddlmZddlmZddlmZddl m Z dd l m Z dd l m Z dd lmZdd lmZdd lmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddl m!Z!ddl m"Z"ddl m#Z#GdddeZ$e%ee$d d!d"Z&eed#d$d%Z'ed&d#d'd(Z(eeefd&d#d)d*Z)ed&d#d+d,Z*ed&d#d-d.Z+ed&d#d/d0Z,ed&d#d1d2Z-ed&d#d3d4Z.ed&d#d5d6Z/eed&d7d8d9Z0d&S):z" Mypy plugin for SQLAlchemy ORM. )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)utilc@seZdZeeeegdfdddZeeeegdfdddZ eeeegdfdddZ eeeegdfdd d Z eeee ge fdd d Zeeeeeefd ddZdS)SQLAlchemyPluginN)fullnamereturncCst|tjkrtSdSN)rZ_type_id_for_fullnameZDECLARATIVE_BASE_dynamic_class_hookselfrr%[C:\Users\vtejo\AppData\Local\Temp\pip-unpacked-wheel-nyjtotrf\sqlalchemy\ext\mypy\plugin.pyget_dynamic_class_hook-sz'SQLAlchemyPlugin.get_dynamic_class_hookcCs@||}|r        r5cCs$t|dddt|ddddS)z`Add __sa_DeclarativeMeta and __sa_Mapped symbol to the global space for all class defs r>ZDeclarativeMeta__sa_DeclarativeMetar<ZMappedZ __sa_MappedN)rZ add_globalrHr%r%r& _add_globalssrUcCst|t|j|jdSr!rUr-_scan_declarative_assignments_and_apply_typesrJrOrHr%r%r&_cls_metadata_hooksrXcCst|t|j|jdSr!rVrHr%r%r&r.sr.cCs t|tj|j|jdddSNTZ is_mixin_scanrVrHr%r%r&r3s r3cCst|t|jtjst|jj}t|tjrsV                            G3 &