HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //usr/local/lib/python3.10/dist-packages/sqlalchemy/ext/mypy/__pycache__/util.cpython-310.pyc
o

���g�&�@s6ddlmZddlZddlmZddlmZddlmZddlmZddlmZddlm	Z	dd	lm
Z
dd
lmZddlm
Z
ddlmZdd
lmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlm Z ddlm!Z!ddlm"Z"ddl#m$Z$ddl%m&Z&ddl%m'Z'dd l%m(Z(dd!l)m*Z*dd"l+m,Z,dd#l-m.Z.dd$l-m/Z/dd%l-m0Z0dd&l-m1Z1dd
l-mZdd'l-m2Z2dd(l-m3Z3dd)l-m4Z4e5d*d+�ej6�7d,�D��Z8e8d-kZ9e
d.eeefd/�Z:Gd0d1�d1�Z;d�d6d7�Z<d�d>d?�Z=d�dAdB�Z>d�dCdD�Z?d�dEdF�Z@d�dGdH�ZAd�dIdJ�ZBd�dKdL�ZCd�dMdN�ZDd�dOdP�ZEd�dTdU�ZFd�dZd[�Zd�d^d_�ZGd�dcdd�ZHd�didj�ZIe	dkdl�d�dqdr��ZJe	d�dudr��ZJddl�d�dwdr�ZJd�d{d|�ZKd�d�d��ZLd�d�d��ZMd�d�d��ZNd�d�d��ZOdS)��)�annotationsN)�Any)�Iterable)�Iterator)�List)�Optional)�overload)�Tuple)�Type)�TypeVar)�Union)�version)�format_type)�CallExpr)�ClassDef)�CLASSDEF_NO_INFO)�Context)�
Expression)�FuncDef)�IfStmt)�JsonDict)�
MemberExpr)�NameExpr)�	Statement)�SymbolTableNode)�	TypeAlias)�TypeInfo)�Options)�ClassDefContext)�DynamicClassDefContext)�SemanticAnalyzerPluginInterface)�deserialize_and_fixup_type)�map_type_from_supertype)�CallableType)�get_proper_type)�Instance)�NoneType)�TypeVarType)�UnboundType)�	UnionTypecCs g|]}t�d|�rt|��qS)z^\d+$)�re�match�int)�.0�x�r/�C/usr/local/lib/python3.10/dist-packages/sqlalchemy/ext/mypy/util.py�
<listcomp>6s r1�.)���	_TArgType)�boundc@s8eZdZddd
�Zddd�Zddd�Zeddd��ZdS)�SQLAlchemyAttribute�name�str�liner,�column�typ�Optional[Type]�infor�return�NonecCs"||_||_||_||_||_dS�N)r8r:r;�typer>)�selfr8r:r;r<r>r/r/r0�__init__?s

zSQLAlchemyAttribute.__init__rcCs$|jsJ�|j|j|jt|j�d�S)N)r8r:r;rB)rBr8r:r;�serialize_type)rCr/r/r0�	serializeMs
�zSQLAlchemyAttribute.serialize�sub_typecCs&t|jt�sdSt|j||j�|_dS)zxExpands type vars in the context of a subtype when an attribute is
        inherited from a generic super type.
        N)�
isinstancerBr'r"r>)rCrGr/r/r0�expand_typevar_from_subtypeVsz/SQLAlchemyAttribute.expand_typevar_from_subtype�data�apir cCs,|��}t|�d�|�}|d||d�|��S)NrB)r<r>r/)�copyr!�pop)�clsr>rJrKr<r/r/r0�deserialize_szSQLAlchemyAttribute.deserializeN)r8r9r:r,r;r,r<r=r>rr?r@)r?r)rGrr?r@)r>rrJrrKr r?r7)�__name__�
__module__�__qualname__rDrFrI�classmethodrOr/r/r/r0r7>s


		r7r8r9r?�boolcCstt�d|��S)Nz	^__.+?__$)rTr*r+)r8r/r/r0�name_is_dunderk�rUr>r�keyrJrr@cCs||j�di�|<dS�N�
sqlalchemy��metadata�
setdefault)r>rWrJr/r/r0�_set_info_metadatao�r]�
Optional[Any]cCs|j�di��|d�SrX)r[�get)r>rWr/r/r0�_get_info_metadatasr^racCs0|jr|jD]}t||�}|dur|SqdSrA)�mrora)r>rW�baser[r/r/r0�_get_info_mro_metadataws

�rdcCs|j�di�dSrXrZ�r>r/r/r0�establish_as_sqlalchemy�srfcC�t|dd�dS�N�is_baseT�r]rer/r/r0�set_is_base�rVrkcC�t|d�}|duSrh�ra�r>rir/r/r0�get_is_base��
rocCrlrh)rdrnr/r/r0�has_declarative_base�rprqcCrg�N�	has_tableTrjrer/r/r0�
set_has_table�rVrtcCrlrrrmrnr/r/r0�
get_has_table�rprurKr �#Optional[List[SQLAlchemyAttribute]]cCsJt|d�}|durdSg}|D]}t�|||�}|�|�|�|�q|S)N�mapped_attributes)rar7rOrI�append)r>rKrw�
attributesrJ�attrr/r/r0�get_mapped_attributes�s�
r{�typ_r
�optionsrcCstrt||�St|�SrA)�mypy_14�_mypy_format_type)r|r}r/r/r0r�s
rry�List[SQLAlchemyAttribute]cCst|ddd�|D��dS)NrwcSsg|]}|���qSr/)rF)r-�	attributer/r/r0r1�sz)set_mapped_attributes.<locals>.<listcomp>rj)r>ryr/r/r0�set_mapped_attributes�s
�r��msg�ctxrcCsd|}|�||�S)NzQLAlchemy Mypy plugin] %s)�fail)rKr�r�r/r/r0r��sr��.Union[ClassDefContext, DynamicClassDefContext]�module�symbol_name�asnamecCs<|jj|jjj}||vr|jj|j|}|||<dSdSrA)rK�modules�
cur_mod_id�names)r�r�r�r��module_globals�
lookup_symr/r/r0�
add_global�s��r�.)�
expr_types�callexprrr��#Optional[Union[CallExpr, NameExpr]]cC�dSrAr/�r�r8r�r/r/r0�get_callexpr_kwarg�sr��!Tuple[TypingType[_TArgType], ...]�Optional[_TArgType]cCr�rAr/r�r/r/r0r��s�%Optional[Tuple[TypingType[Any], ...]]cCsRz|j�|�}Wn
tyYdSw|j|}t||dur |nttf�r'|SdSrA)�	arg_names�index�
ValueError�argsrHrr)r�r8r��arg_idx�kwargr/r/r0r��s�
��stmts�Iterable[Statement]�Iterator[Statement]ccsT�|D]$}t|t�r$t|jdt�r$|jdjdkr$|jdjEdHq|VqdS)Nrztyping.TYPE_CHECKING)rHr�exprr�fullname�body)r��stmtr/r/r0�flatten_typechecking�s����r��calleer�#Optional[Union[Instance, TypeInfo]]cCs�t|ttf�rFt|jt�r(|jjr&t|jjt�r&t|jjj�}t|t	�r&|SdSt|jt
�r=t|jj�}t|t	�r;|SdSt|jt�rF|jSdSrA)
rHrr�noderrBr#r$�ret_typer%r�targetr)r�r��target_typer/r/r0�type_for_callees

�r�r<cs�t|t�s|S|jdkrt�t�fdd�|jD�t�g��S��|j|�}|durEt|t�rEt|j	t
�rE|j	}t|�fdd�|jD��S|S)z�Take 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)r-�typ_arg�rKr/r0r1+sz'unbound_to_instance.<locals>.<listcomp>Ncs$g|]}t|t�rt�|�n|�qSr/)rHr(r�)r-�argr�r/r0r1;s���)rHr(r8r�r)r�r&�lookup_qualifiedrr�rr%)rKr<r��
bound_typer/r�r0r�s2
	
����
�
��r�rNr�Optional[TypeInfo]cCsD|jtur|�|j|�}|durdS|rt|jt�sJ�|jS|jSrA)r>rr�r8rHr�r)rNrK�symr/r/r0�info_for_clsHs
r��Union[str, JsonDict]cCs`z|��WStyYnwt|d�r#tdd�|jD��|_|��St|d�r,|��}|��S)Nr�css&�|]}t|d�r
|��n|VqdS)�resolve_string_annotationN)�hasattrr�)r-�ar/r/r0�	<genexpr>[s��
�
�z!serialize_type.<locals>.<genexpr>r�)rF�	Exceptionr��tupler�r�)r<r/r/r0rEUs
�

�

�rE)r8r9r?rT)r>rrWr9rJrr?r@)r>rrWr9r?r_)r>rr?r@)r>rr?rT)r>rrKr r?rv)r|r
r}rr?r9)r>rryr�r?r@)rKr r�r9r�rr?r@)
r�r�r�r9r�r9r�r9r?r@)r�rr8r9r�r@r?r�)r�rr8r9r�r�r?r�)r�rr8r9r�r�r?r_)r�r�r?r�)r�rr?r�)rKr r<r
r?r
)rNrrKr r?r�)r<r
r?r�)P�
__future__rr*�typingrrrrrrr	r
�
TypingTyperr�mypyr
�
mypy.messagesrr�
mypy.nodesrrrrrrrrrrrrrr�mypy.optionsr�mypy.pluginrrr �mypy.plugins.commonr!�mypy.typeopsr"�
mypy.typesr#r$r%r&r'r(r)r��__version__�split�_versr~r5r7rUr]rardrfrkrorqrtrur{r�r�r�r�r�r�r�r�rEr/r/r/r0�<module>s��
-



	










��



2