U a\ @sddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZdd lm Z dd lm Z dd lm Z dd l mZdd l mZddl mZddl mZddl mZddl mZddl mZddl mZddl mZddl mZddlmZddlmZddlmZddlmZddlmZddlm Z ddlm!Z!dd lm Z ddlm"Z"ddlm#Z#e de eefd Z$Gd!d"d"Z%ee&ed#d$d%d&Z'e eefe&e&e&d#d'd(d)Z(ed*d+ee&d#ee eefd,d-d.Z)eee&ee e$d*fee$d,d/d.Z)d#d+ee&eee ed*feed,d0d.Z)eeeed1d2d3Z*ee e d4d5d6Z+eeed7d8d9Z,d#S):)Any)cast)Iterable)Iterator)List)Optional)overload)Tuple)Type)TypeVar)Union)CallExpr)ClassDef)CLASSDEF_NO_INFO)Context)IfStmt)JsonDict)NameExpr) Statement)SymbolTableNode)TypeInfo)ClassDefContext)DynamicClassDefContext)SemanticAnalyzerPluginInterfacedeserialize_and_fixup_type)Instance)NoneType) ProperType) UnboundType) UnionType _TArgType)boundc@sTeZdZeeeeeefeedddZ e dddZ e e e dddd Zd S) DeclClassApplied is_mapped has_tablemapped_attr_names mapped_mrocCs$||_||_t||_t||_dSN)r%r&listr'r()selfr%r&r'r(r,YC:\Users\vtejo\AppData\Local\Temp\pip-unpacked-wheel-nyjtotrf\sqlalchemy\ext\mypy\util.py__init__'s zDeclClassApplied.__init__)returncCs*|j|jdd|jDdd|jDdS)NcSsg|]\}}||fqSr, serialize.0nametype_r,r,r- 7sz.DeclClassApplied.serialize..cSsg|] }|qSr,r0r3r5r,r,r-r6;sr$r$)r+r,r,r-r13szDeclClassApplied.serialize)dataapir/c sXt|d|dtttttffdd|dDtttfdd|dDdS) Nr%r&csg|]\}}|t|fqSr,rr2r9r,r-r6Hsz0DeclClassApplied.deserialize..r'csg|]}t|qSr,rr7r:r,r-r6Osr(r$)r#rrr strrr)clsr8r9r,r:r- deserialize>s   zDeclClassApplied.deserializeN)__name__ __module__ __qualname__boolrr r;rrr.rr1 classmethodrr=r,r,r,r-r#&s  r#N)r9msgctxr/cCsd|}|||S)NzQLAlchemy Mypy plugin] %s)fail)r9rCrDr,r,r-rEWsrE)rDmodule symbol_nameasnamer/cCs8|jj|jjj}||kr4|jj|j|}|||<dSr))r9modulesZ cur_mod_idnames)rDrFrGrHmodule_globalsZ lookup_symr,r,r- add_global\s  rL.) expr_types)callexprr4rMr/cCsdSr)r,rNr4rMr,r,r-_get_callexpr_kwarglsrPcCsdSr)r,rOr,r,r-rPsscCsTz|j|}Wntk r&YdSX|j|}t||dk rB|nttfrP|SdSr)) arg_namesindex ValueErrorargs isinstancerr )rNr4rMZarg_idxkwargr,r,r-rP}s )stmtsr/ccsX|D]N}t|trLt|jdtrL|jdjdkrL|jdjD] }|Vq>q|VqdS)Nrztyping.TYPE_CHECKING)rUrexprrfullnamebody)rWZstmtZsubstmtr,r,r-_flatten_typecheckings r[)r9typr/cst|ts|S|jdkr>ttfdd|jDtgS|j|}|dk rt|trt|j t r|j }t |fdd|jDS|SdS)zTake the UnboundType that we seem to get as the ret_type from a FuncDef and convert it into an Instance/TypeInfo kind of structure that seems to work as the left-hand type of an AssignmentStatement. rcsg|]}t|qSr,)_unbound_to_instance)r3Ztyp_argr:r,r-r6sz(_unbound_to_instance..Ncs$g|]}t|trt|n|qSr,)rUrr])r3argr:r,r-r6s ) rUrr4r]r rTrlookup_qualifiedrnoderr)r9r\r`Z bound_typer,r:r-r]s4     r])r<r9r/cCsD|jtkr>||j|}|dkr$dS|r4t|jts8t|jS|jSr))inforr_r4rUr`rAssertionError)r<r9symr,r,r- _info_for_clss rd)-typingrrrrrrrr r Z TypingTyper r Z mypy.nodesr rrrrrrrrrZ mypy.pluginrrrZmypy.plugins.commonrZ mypy.typesrrrrr r!r#r;rErLrPr[r]rdr,r,r,r-s                               1     1