a
    [g&                     @  s  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;d2d3d4d5d6Z<d7d2d8d9d:d;d<Z=d7d2d=d>d?d@Z>d7d2d=d>dAdBZ?d7d9dCdDdEZ@d7d9dCdFdGZAd7d3dCdHdIZBd7d3dCdJdKZCd7d9dCdLdMZDd7d3dCdNdOZEd7dPdQdRdSdTZFdUdVd2dWdXdYZd7dZd9d[d\d]ZGdPd2d^d9d_d`daZHdbd2d2d2d9dcdddeZIe	dfdgdhd2d9didjdkdlZJe	dhd2dmdndjdodlZJddgdhd2dpd=djdqdlZJdrdsdtdudvZKdwdxdydzd{ZLdPdUdUd|d}d~ZMddPddddZNdUdddd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/   f/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/sqlalchemy/ext/mypy/util.py
<listcomp>6       r1   .)      	_TArgType)boundc                   @  sZ   e Zd ZdddddddddZd	d
ddZdddddZedd	dd dddZdS )SQLAlchemyAttributestrr,   zOptional[Type]r   None)namelinecolumntypinforeturnc                 C  s"   || _ || _|| _|| _|| _d S N)r;   r<   r=   typer?   )selfr;   r<   r=   r>   r?   r/   r/   r0   __init__?   s
    zSQLAlchemyAttribute.__init__r   )r@   c                 C  s$   | j s
J | j| j| jt| j dS )N)r;   r<   r=   rB   )rB   r;   r<   r=   serialize_type)rC   r/   r/   r0   	serializeM   s    
zSQLAlchemyAttribute.serialize)sub_typer@   c                 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_subtyper    )r?   dataapir@   c                 C  s,   |  }t|d|}| f ||d|S )NrB   )r>   r?   )copyr!   pop)clsr?   rJ   rK   r>   r/   r/   r0   deserialize_   s    zSQLAlchemyAttribute.deserializeN)__name__
__module____qualname__rD   rF   rI   classmethodrO   r/   r/   r/   r0   r8   >   s
   		r8   r9   bool)r;   r@   c                 C  s   t td| S )Nz	^__.+?__$)rT   r*   r+   )r;   r/   r/   r0   name_is_dunderk   s    rU   r   r   r:   )r?   keyrJ   r@   c                 C  s   || j di |< d S NZ
sqlalchemymetadata
setdefault)r?   rV   rJ   r/   r/   r0   _set_info_metadatao   s    r[   zOptional[Any])r?   rV   r@   c                 C  s   | j di |d S rW   )rY   get)r?   rV   r/   r/   r0   _get_info_metadatas   s    r]   c                 C  s0   | j r,| j D ]}t||}|d ur|  S qd S rA   )mror]   )r?   rV   baserY   r/   r/   r0   _get_info_mro_metadataw   s    


r`   )r?   r@   c                 C  s   | j di  d S rW   rX   r?   r/   r/   r0   establish_as_sqlalchemy   s    rb   c                 C  s   t | dd d S Nis_baseTr[   ra   r/   r/   r0   set_is_base   s    rf   c                 C  s   t | d}|du S rc   r]   r?   rd   r/   r/   r0   get_is_base   s    
ri   c                 C  s   t | d}|du S rc   )r`   rh   r/   r/   r0   has_declarative_base   s    
rj   c                 C  s   t | dd d S NZ	has_tableTre   ra   r/   r/   r0   set_has_table   s    rl   c                 C  s   t | d}|du S rk   rg   rh   r/   r/   r0   get_has_table   s    
rm   r    z#Optional[List[SQLAlchemyAttribute]])r?   rK   r@   c                 C  sJ   t | d}|d u rd S g }|D ]&}t| ||}||  || q|S )Nmapped_attributes)r]   r8   rO   rI   append)r?   rK   rn   
attributesrJ   attrr/   r/   r0   get_mapped_attributes   s    
rr   r
   r   )typ_optionsr@   c                 C  s   t rt| |S t| S d S rA   )mypy_14_mypy_format_type)rs   rt   r/   r/   r0   r      s    
r   zList[SQLAlchemyAttribute])r?   rp   r@   c                 C  s   t | ddd |D  d S )Nrn   c                 S  s   g | ]}|  qS r/   )rF   )r-   	attributer/   r/   r0   r1      r2   z)set_mapped_attributes.<locals>.<listcomp>re   )r?   rp   r/   r/   r0   set_mapped_attributes   s
    rx   r   )rK   msgctxr@   c                 C  s   d| }|  ||S )Nz[SQLAlchemy Mypy plugin] %s)fail)rK   ry   rz   r/   r/   r0   r{      s    r{   z.Union[ClassDefContext, DynamicClassDefContext])rz   modulesymbol_nameasnamer@   c                 C  s8   | j j| j j j}||vr4| j j| j| }|||< d S rA   )rK   modulesZ
cur_mod_idnames)rz   r|   r}   r~   module_globalsZ
lookup_symr/   r/   r0   
add_global   s    r   .)
expr_typesr   z#Optional[Union[CallExpr, NameExpr]])callexprr;   r   r@   c                C  s   d S rA   r/   r   r;   r   r/   r/   r0   get_callexpr_kwarg   s    r   z!Tuple[TypingType[_TArgType], ...]zOptional[_TArgType]c                C  s   d S rA   r/   r   r/   r/   r0   r      s    z%Optional[Tuple[TypingType[Any], ...]]c                C  sR   z| j |}W n ty$   Y d S 0 | j| }t||d ur@|nttfrN|S d S rA   )	arg_namesindex
ValueErrorargsrH   r   r   )r   r;   r   Zarg_idxkwargr/   r/   r0   r      s    
zIterable[Statement]zIterator[Statement])stmtsr@   c                 c  sR   | D ]H}t |trFt |jd trF|jd jdkrF|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   r   z#Optional[Union[Instance, TypeInfo]])calleer@   c                 C  s   t | ttfrt | jtrP| jjrLt | jjtrLt| jjj}t |t	rL|S d S t | jt
rxt| jj}t |t	r|S nt | jtr| jS d S rA   )rH   r   r   noder   rB   r#   r$   ret_typer%   r   targetr   )r   r   Ztarget_typer/   r/   r0   type_for_callee  s    

r   )rK   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rt |trt |j	t
r|j	}t| fdd|jD S |S d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-   Ztyp_argrK   r/   r0   r1   +  r2   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(   r;   r   r)   r   r&   lookup_qualifiedr   r   r   r%   )rK   r>   r   Z
bound_typer/   r   r0   r     s4    	



r   r   zOptional[TypeInfo])rN   rK   r@   c                 C  sD   | j tu r>|| j| }|d u r$d S |r4t|jts8J |jS | j S rA   )r?   r   r   r;   rH   r   r   )rN   rK   symr/   r/   r0   info_for_clsH  s    
r   zUnion[str, JsonDict])r>   r@   c                 C  sZ   z
|   W S  ty   Y n0 t| dr@tdd | jD | _nt| drR|  } |   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   )P
__future__r   r*   typingr   r   r   r   r   r   r	   r
   Z
TypingTyper   r   Zmypyr   Zmypy.messagesr   rv   Z
mypy.nodesr   r   r   r   r   r   r   r   r   r   r   r   r   r   Zmypy.optionsr   Zmypy.pluginr   r   r    Zmypy.plugins.commonr!   Zmypy.typeopsr"   Z
mypy.typesr#   r$   r%   r&   r'   r(   r)   r   __version__splitZ_versru   r6   r8   rU   r[   r]   r`   rb   rf   ri   rj   rl   rm   rr   rx   r{   r   r   r   r   r   r   rE   r/   r/   r/   r0   <module>   s   -	
2