o
    g&                     @  s6  d dl mZ d dl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  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-m0Z0 d d&l-m1Z1 d d
l-mZ d d'l-m2Z2 d d(l-m3Z3 d d)l-m4Z4 e5d*d+ ej67d,D Z8e8d-kZ9ed.eeef d/Z:G d0d1 d1Z;dd6d7Z<dd>d?Z=ddAdBZ>ddCdDZ?ddEdFZ@ddGdHZAddIdJZBddKdLZCddMdNZDddOdPZEddTdUZFddZd[Zdd^d_ZGddcddZHddidjZIe	dkdlddqdrZJe	ddudrZJddlddwdrZJdd{d|ZKdddZLdddZMdddZNdddZOdS )    )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)	UnionTypec                 C  s    g | ]}t d |rt|qS )z^\d+$)rematchint).0x r/   R/var/www/html/api-tag/env/lib/python3.10/site-packages/sqlalchemy/ext/mypy/util.py
<listcomp>6   s     r1   .)      	_TArgType)boundc                   @  s8   e Zd ZdddZdddZdddZedddZdS )SQLAlchemyAttributenamestrliner,   columntypOptional[Type]infor   returnNonec                 C  s"   || _ || _|| _|| _|| _d S N)r8   r:   r;   typer>   )selfr8   r:   r;   r<   r>   r/   r/   r0   __init__?   s
   
zSQLAlchemyAttribute.__init__r   c                 C  s$   | j sJ | j| j| jt| j dS )N)r8   r:   r;   rB   )rB   r8   r:   r;   serialize_type)rC   r/   r/   r0   	serializeM   s   
zSQLAlchemyAttribute.serializesub_typec                 C  s&   t | jtsdS t| j|| j| _dS )zxExpands type vars in the context of a subtype when an attribute is
        inherited from a generic super type.
        N)
isinstancerB   r'   r"   r>   )rC   rG   r/   r/   r0   expand_typevar_from_subtypeV   s   z/SQLAlchemyAttribute.expand_typevar_from_subtypedataapir    c                 C  s,   |  }t|d|}| d||d|S )NrB   )r<   r>   r/   )copyr!   pop)clsr>   rJ   rK   r<   r/   r/   r0   deserialize_   s   zSQLAlchemyAttribute.deserializeN)r8   r9   r:   r,   r;   r,   r<   r=   r>   r   r?   r@   )r?   r   )rG   r   r?   r@   )r>   r   rJ   r   rK   r    r?   r7   )__name__
__module____qualname__rD   rF   rI   classmethodrO   r/   r/   r/   r0   r7   >   s    


		r7   r8   r9   r?   boolc                 C  s   t td| S )Nz	^__.+?__$)rT   r*   r+   )r8   r/   r/   r0   name_is_dunderk      rU   r>   r   keyrJ   r   r@   c                 C  s   || j di |< d S N
sqlalchemymetadata
setdefault)r>   rW   rJ   r/   r/   r0   _set_info_metadatao      r]   Optional[Any]c                 C  s   | j di |d S rX   )r[   get)r>   rW   r/   r/   r0   _get_info_metadatas   r^   ra   c                 C  s0   | j r| j D ]}t||}|d ur|  S qd S rA   )mrora   )r>   rW   baser[   r/   r/   r0   _get_info_mro_metadataw   s   

rd   c                 C  s   | j di  d S rX   rZ   r>   r/   r/   r0   establish_as_sqlalchemy   s   rf   c                 C     t | dd d S Nis_baseTr]   re   r/   r/   r0   set_is_base   rV   rk   c                 C     t | d}|du S rh   ra   r>   ri   r/   r/   r0   get_is_base      
ro   c                 C  rl   rh   )rd   rn   r/   r/   r0   has_declarative_base   rp   rq   c                 C  rg   N	has_tableTrj   re   r/   r/   r0   set_has_table   rV   rt   c                 C  rl   rr   rm   rn   r/   r/   r0   get_has_table   rp   ru   rK   r    #Optional[List[SQLAlchemyAttribute]]c                 C  sJ   t | d}|d u rd S g }|D ]}t| ||}||  || q|S )Nmapped_attributes)ra   r7   rO   rI   append)r>   rK   rw   
attributesrJ   attrr/   r/   r0   get_mapped_attributes   s   
r{   typ_r
   optionsr   c                 C  s   t rt| |S t| S rA   )mypy_14_mypy_format_type)r|   r}   r/   r/   r0   r      s   
r   ry   List[SQLAlchemyAttribute]c                 C  s   t | ddd |D  d S )Nrw   c                 S  s   g | ]}|  qS r/   )rF   )r-   	attributer/   r/   r0   r1      s    z)set_mapped_attributes.<locals>.<listcomp>rj   )r>   ry   r/   r/   r0   set_mapped_attributes   s
   r   msgctxr   c                 C  s   d| }|  ||S )Nz[SQLAlchemy Mypy plugin] %s)fail)rK   r   r   r/   r/   r0   r      s   r   .Union[ClassDefContext, DynamicClassDefContext]modulesymbol_nameasnamec                 C  s<   | j j| j j j}||vr| j j| j| }|||< d S d S rA   )rK   modules
cur_mod_idnames)r   r   r   r   module_globals
lookup_symr/   r/   r0   
add_global   s   r   .)
expr_typescallexprr   r   #Optional[Union[CallExpr, NameExpr]]c                C     d S rA   r/   r   r8   r   r/   r/   r0   get_callexpr_kwarg   s   r   !Tuple[TypingType[_TArgType], ...]Optional[_TArgType]c                C  r   rA   r/   r   r/   r/   r0   r      s   %Optional[Tuple[TypingType[Any], ...]]c                C  sR   z| j |}W n
 ty   Y d S w | j| }t||d ur |nttfr'|S d S rA   )	arg_namesindex
ValueErrorargsrH   r   r   )r   r8   r   arg_idxkwargr/   r/   r0   r      s   
stmtsIterable[Statement]Iterator[Statement]c                 c  sT    | D ]$}t |tr$t |jd tr$|jd jdkr$|jd jE d H  q|V  qd S )Nr   ztyping.TYPE_CHECKING)rH   r   exprr   fullnamebody)r   stmtr/   r/   r0   flatten_typechecking   s   r   calleer   #Optional[Union[Instance, TypeInfo]]c                 C  s   t | ttfrFt | jtr(| jjr&t | jjtr&t| jjj}t |t	r&|S d S t | jt
r=t| jj}t |t	r;|S d S t | jtrF| jS d S rA   )rH   r   r   noder   rB   r#   r$   ret_typer%   r   targetr   )r   r   target_typer/   r/   r0   type_for_callee  s   

r   r<   c                   s   t |ts|S |jdkrt t fdd|jD t g S  |j|}|durEt |trEt |j	t
rE|j	}t| fdd|jD S |S )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.

    r   c                   s   g | ]}t  |qS r/   )unbound_to_instance)r-   typ_argrK   r/   r0   r1   +  s    z'unbound_to_instance.<locals>.<listcomp>Nc                   s$   g | ]}t |trt |n|qS r/   )rH   r(   r   )r-   argr   r/   r0   r1   ;  s    )rH   r(   r8   r   r)   r   r&   lookup_qualifiedr   r   r   r%   )rK   r<   r   
bound_typer/   r   r0   r     s2   
	


r   rN   r   Optional[TypeInfo]c                 C  sD   | j tu r|| j| }|d u rd S |rt|jtsJ |jS | j S rA   )r>   r   r   r8   rH   r   r   )rN   rK   symr/   r/   r0   info_for_clsH  s   
r   Union[str, JsonDict]c                 C  s`   z|   W S  ty   Y nw t| dr#tdd | jD | _|   S t| dr,|  } |   S )Nr   c                 s  s&    | ]}t |d r| n|V  qdS )resolve_string_annotationN)hasattrr   )r-   ar/   r/   r0   	<genexpr>[  s    

z!serialize_type.<locals>.<genexpr>r   )rF   	Exceptionr   tupler   r   )r<   r/   r/   r0   rE   U  s   




rE   )r8   r9   r?   rT   )r>   r   rW   r9   rJ   r   r?   r@   )r>   r   rW   r9   r?   r_   )r>   r   r?   r@   )r>   r   r?   rT   )r>   r   rK   r    r?   rv   )r|   r
   r}   r   r?   r9   )r>   r   ry   r   r?   r@   )rK   r    r   r9   r   r   r?   r@   )
r   r   r   r9   r   r9   r   r9   r?   r@   )r   r   r8   r9   r   r@   r?   r   )r   r   r8   r9   r   r   r?   r   )r   r   r8   r9   r   r   r?   r_   )r   r   r?   r   )r   r   r?   r   )rK   r    r<   r
   r?   r
   )rN   r   rK   r    r?   r   )r<   r
   r?   r   )P
__future__r   r*   typingr   r   r   r   r   r   r	   r
   
TypingTyper   r   mypyr   mypy.messagesr   r   
mypy.nodesr   r   r   r   r   r   r   r   r   r   r   r   r   r   mypy.optionsr   mypy.pluginr   r   r    mypy.plugins.commonr!   mypy.typeopsr"   
mypy.typesr#   r$   r%   r&   r'   r(   r)   r   __version__split_versr~   r5   r7   rU   r]   ra   rd   rf   rk   ro   rq   rt   ru   r{   r   r   r   r   r   r   r   r   rE   r/   r/   r/   r0   <module>   s   
-



	














2