B
    f>*                 @  s  U d dl mZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 d d	l	mZ d d
l	mZ d dl	mZ d dl	mZ d dl	mZ d dl	mZ d dl	mZ d dl	mZ d dl	mZ d dl	mZ d dl	mZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ ddlmZ edZ de!d< edZ"de!d< edZ#de!d< edZ$de!d< ed Z%de!d!< ed"Z&de!d"< ed#Z'de!d#< ed$Z(de!d$< ed%Z)de!d%< ed&Z*de!d&< ed'Z+de!d'< ed(Z,de!d(< ed)Z-de!d)< ed*Z.de!d*< ed+Z/de!d+< ed,Z0de!d,< ed-Z1de!d-< d.Z2d/Z3d0Z4d1Z5d2d3d4d5d6hZ6e d7d8hfe"e6fe"e6fe"e6fe#d9d:hfe$d;d<d=d>hfe$d;d<d=d>hfe*d?d@dAdBhfe*d?d@dAdBhfe+dCdDdEdFhfe+dCdDdEdFhfe-dGdHhfe%dIhfe&e5hfe'dJdKdLhfe(dMdNdOhfe)dPdQhfe.dRdSdThfe/dUdVhfe,dWdXhfe0dYdZhfe1d[d\hfd]Z7d^e!d_< d`ddadbdcddZ8deddadfdgdhZ9didjdkdldmdndoZ:dpdldqdrdsZ;dtdldudvdwZ<dxdldydzd{Z=dpd|d}d~dZ>dS )    )annotations)Dict)List)Optional)Set)Tuple)Union)ARG_POS)CallExpr)ClassDef)	Decorator)
Expression)FuncDef)
MemberExpr)NameExpr)OverloadedFuncDef)
SymbolNode)	TypeAlias)TypeInfo)SemanticAnalyzerPluginInterface)CallableType)get_proper_type)Instance)UnboundType   )utilCOLUMNintRELATIONSHIPREGISTRYCOLUMN_PROPERTYZ	TYPEENGNE
TYPEENGINEMAPPEDDECLARATIVE_BASEDECLARATIVE_METAMAPPED_DECORATORSYNONYM_PROPERTYCOMPOSITE_PROPERTYDECLARED_ATTRMAPPER_PROPERTYAS_DECLARATIVEAS_DECLARATIVE_BASEDECLARATIVE_MIXINQUERY_EXPRESSIONzbuiltins.objectzbuiltins.strzbuiltins.listzsqlalchemy.orm.base.Mappedz)sqlalchemy.orm.relationships.Relationshipz1sqlalchemy.orm.relationships.RelationshipPropertyz2sqlalchemy.orm.relationships._RelationshipDeclaredzsqlalchemy.orm.Relationshipz#sqlalchemy.orm.RelationshipPropertyzsqlalchemy.sql.schema.Columnzsqlalchemy.sql.Columnz sqlalchemy.orm.decl_api.registryzsqlalchemy.orm.registryz-sqlalchemy.orm.properties.MappedSQLExpressionz"sqlalchemy.orm.MappedSQLExpressionz(sqlalchemy.orm.properties.ColumnPropertyzsqlalchemy.orm.ColumnPropertyz'sqlalchemy.orm.descriptor_props.Synonymzsqlalchemy.orm.Synonymz/sqlalchemy.orm.descriptor_props.SynonymPropertyzsqlalchemy.orm.SynonymPropertyz)sqlalchemy.orm.descriptor_props.Compositezsqlalchemy.orm.Compositez1sqlalchemy.orm.descriptor_props.CompositePropertyz sqlalchemy.orm.CompositePropertyz(sqlalchemy.orm.interfaces.MapperPropertyzsqlalchemy.orm.MapperPropertyz"sqlalchemy.sql.type_api.TypeEnginez+sqlalchemy.ext.declarative.declarative_basezsqlalchemy.orm.declarative_basez(sqlalchemy.orm.decl_api.declarative_basez*sqlalchemy.ext.declarative.DeclarativeMetazsqlalchemy.orm.DeclarativeMetaz'sqlalchemy.orm.decl_api.DeclarativeMetaz'sqlalchemy.orm.decl_api.registry.mappedzsqlalchemy.orm.registry.mappedz)sqlalchemy.ext.declarative.as_declarativez&sqlalchemy.orm.decl_api.as_declarativezsqlalchemy.orm.as_declarativez4sqlalchemy.orm.decl_api.registry.as_declarative_basez+sqlalchemy.orm.registry.as_declarative_basez%sqlalchemy.orm.decl_api.declared_attrzsqlalchemy.orm.declared_attrz)sqlalchemy.orm.decl_api.declarative_mixinz sqlalchemy.orm.declarative_mixinzsqlalchemy.orm.query_expressionz1sqlalchemy.orm._orm_constructors.query_expression)ZColumnZRelationshipZRelationshipPropertyZ_RelationshipDeclaredregistryZColumnPropertyZMappedSQLExpressionZSynonymZSynonymPropertyZ	CompositeZCompositePropertyZMapperPropertyZ
TypeEngineZMappedZdeclarative_baseZDeclarativeMetaZmappedZas_declarativeZas_declarative_baseZdeclared_attrZdeclarative_mixinZquery_expressionzDict[str, Tuple[int, Set[str]]]_lookupr   bool)infotype_idreturnc             C  sF   x.| j D ] }t|jd\}}||krP qW dS |d kr<dS |j|kS )N)NNF)mror/   getnamefullname)r1   r2   mrcheck_type_id	fullnames r;   [C:\Users\Lenovo\AppData\Local\Temp\pip-unpacked-wheel-4nia5yor\sqlalchemy\ext\mypy\names.pyhas_base_type_id   s    r=   zList[TypeInfo])r4   r2   r3   c             C  sD   x,| D ] }t |jd\}}||krP qW dS |d kr:dS |j|kS )N)NNF)r/   r5   r6   r7   )r4   r2   r8   r9   r:   r;   r;   r<   
mro_has_id   s    
r>   r   r   r   zOptional[int])type_clsapir3   c             C  s^   | | j| }|d k	rZt|jtrDt|jj}t|trZt|j	S nt|jt
rZt|jS d S )N)Zlookup_qualifiedr6   
isinstancenoder   r   targetr   type_id_for_named_nodetyper   )r?   r@   rA   symtarget_typer;   r;   r<   type_id_for_unbound_type   s    

rI   r   )calleer3   c             C  sf  t | ttfrbt | jtrnt | jjtrn| jjjrjt | jjjtrjt	| jjjj
}t |trjt|jjS d S t | jtr| jjr| jjjrt | jjjtrt	| jjjj
}t |trt|jjS d S t | jtr| jjrt | jjtrt	| jjj
}t |trt|jjS d S t | jtrLt	| jj}t |trbt|jjS nt | jtrbt| S d S )N)rB   r   r   rC   r   funcr   rF   r   r   ret_typer   type_id_for_fullnamer7   r   implr   rD   r   rE   )rJ   rL   rH   r;   r;   r<   type_id_for_callee   s<    


rO   z'Union[NameExpr, MemberExpr, SymbolNode])rC   r3   c             C  s<   t | jd\}}|d ks"|d kr&d S | j|kr4|S d S d S )N)NN)r/   r5   r6   r7   )rC   r2   r:   r;   r;   r<   rE   +  s    
rE   str)r7   r3   c             C  sJ   |  d}|d }t|d\}}|d ks2|d kr6d S | |krB|S d S d S )N.)NN)splitr/   r5   )r7   tokensZ	immediater2   r:   r;   r;   r<   rM   8  s    
rM   r
   )exprr3   c             C  s,   t d}t|_t|d}t|| gtgdgS )NZ__sa_MappedZ_empty_constructorZarg1)r   NAMED_TYPE_SQLA_MAPPEDr7   r   r
   r	   )rU   Zcolumn_descriptorZmember_exprr;   r;   r<   expr_to_mapped_constructorF  s    
rW   N)?
__future__r   typingr   r   r   r   r   r   Z
mypy.nodesr	   r
   r   r   r   r   r   r   r   r   r   r   Zmypy.pluginr   Z
mypy.typesr   r   r   r    r   symbolr   __annotations__r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   ZNAMED_TYPE_BUILTINS_OBJECTZNAMED_TYPE_BUILTINS_STRZNAMED_TYPE_BUILTINS_LISTrV   Z_RelFullNamesr/   r=   r>   rI   rO   rE   rM   rW   r;   r;   r;   r<   <module>   s   ,