
    [h&                       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* ej6        7                    d+          D                       Z8e8d,k    Z9 ed-eeef         .          Z: G d/ d0          Z;dwd5Z<dxd<Z=dyd>Z>dyd?Z?dzd@Z@dzdAZAd{dBZBd{dCZCdzdDZDd{dEZEd|dIZFd}dNZd~dQZGddUZHddZZIe	d[d\dda            ZJe	ddd            ZJdd\ddfZJddjZKddnZLddpZMddtZNddv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                V    g | ]&}t          j        d |          t          |          'S )z^\d+$)rematchint).0xs     g/var/www/api.easyaligner.net/htdocs/venv_linux/lib/python3.11/site-packages/sqlalchemy/ext/mypy/util.py
<listcomp>r2   6   s/    MMMrx!7L7LMSVVMMM    .)      	_TArgType)boundc                  >    e Zd ZddZddZddZedd            ZdS )SQLAlchemyAttributenamestrliner.   columntypOptional[Type]infor   returnNonec                L    || _         || _        || _        || _        || _        d S N)r;   r=   r>   typerA   )selfr;   r=   r>   r?   rA   s         r1   __init__zSQLAlchemyAttribute.__init__?   s+     						r3   r   c                d    | j         sJ | j        | j        | j        t	          | j                   dS )N)r;   r=   r>   rF   )rF   r;   r=   r>   serialize_type)rG   s    r1   	serializezSQLAlchemyAttribute.serializeM   s;    yIIk"49--	
 
 	
r3   sub_typec                ~    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)
isinstancerF   r(   r#   rA   )rG   rL   s     r1   expand_typevar_from_subtypez/SQLAlchemyAttribute.expand_typevar_from_subtypeV   s8     $)[11 	F+DIxKK			r3   dataapir!   c                    |                                 }t          |                    d          |          } | d||d|S )NrF   )r?   rA    )copyr"   pop)clsrA   rP   rQ   r?   s        r1   deserializezSQLAlchemyAttribute.deserialize_   sI     yy{{(&)9)93??s.s.....r3   N)r;   r<   r=   r.   r>   r.   r?   r@   rA   r   rB   rC   )rB   r   )rL   r   rB   rC   )rA   r   rP   r   rQ   r!   rB   r:   )__name__
__module____qualname__rH   rK   rO   classmethodrW   rS   r3   r1   r:   r:   >   st           
 
 
 
L L L L / / / [/ / /r3   r:   r;   r<   rB   boolc                F    t          t          j        d|                     S )Nz	^__.+?__$)r\   r,   r-   )r;   s    r1   name_is_dunderr^   k   s    t,,---r3   rA   r   keyrP   r   rC   c                B    || j                             di           |<   d S N
sqlalchemymetadata
setdefault)rA   r_   rP   s      r1   _set_info_metadatarf   o   s$    6:DM\2..s333r3   Optional[Any]c                `    | j                             di                               |d           S ra   )rd   get)rA   r_   s     r1   _get_info_metadatarj   s   s*    =\2..223===r3   c                T    | j         r | j         D ]}t          ||          }||c S d S rE   )mrorj   )rA   r_   baserd   s       r1   _get_info_mro_metadatarn   w   sE    x  H 	  	 D)$44H# $4r3   c                <    | j                             di            d S ra   rc   rA   s    r1   establish_as_sqlalchemyrq      s     M\2.....r3   c                (    t          | dd           d S Nis_baseTrf   rp   s    r1   set_is_baserv      s    tY-----r3   c                *    t          | d          }|du S rs   rj   rA   rt   s     r1   get_is_baserz      s     y11Gd?r3   c                *    t          | d          }|du S rs   )rn   ry   s     r1   has_declarative_baser|      s    $T955Gd?r3   c                (    t          | dd           d S N	has_tableTru   rp   s    r1   set_has_tabler      s    t[$/////r3   c                *    t          | d          }|du S r~   rx   ry   s     r1   get_has_tabler      s     {33Gd?r3   rQ   r!   #Optional[List[SQLAlchemyAttribute]]c                    t          | d          }|d S g }|D ]H}t                              | ||          }|                    |            |                    |           I|S )Nmapped_attributes)rj   r:   rW   rO   append)rA   rQ   r   
attributesrP   attrs         r1   get_mapped_attributesr      s     3E!3 3  t,.J!    "..tT3??((...$r3   typ_r   optionsr   c                N    t           rt          | |          S t          |           S rE   )mypy_14_mypy_format_type)r   r   s     r1   r   r      s(     ' w/// &&&r3   r   List[SQLAlchemyAttribute]c                <    t          | dd |D                        d S )Nr   c                6    g | ]}|                                 S rS   )rK   )r/   	attributes     r1   r2   z)set_mapped_attributes.<locals>.<listcomp>   s$    ;;;9				;;;r3   ru   )rA   r   s     r1   set_mapped_attributesr      s7     ;;
;;;    r3   msgctxr   c                8    d|z  }|                      ||          S )Nz[SQLAlchemy Mypy plugin] %s)fail)rQ   r   r   s      r1   r   r      s     
'#
-C88Cr3   .Union[ClassDefContext, DynamicClassDefContext]modulesymbol_nameasnamec                    | j         j        | j         j                 j        }||vr$| j         j        |         j        |         }|||<   d S d S rE   )rQ   modules
cur_mod_idnames)r   r   r   r   module_globals
lookup_syms         r1   
add_globalr      sX     W_SW%78>N^##&)gof&=&C'

 ",v $#r3   .)
expr_typescallexprr   r   #Optional[Union[CallExpr, NameExpr]]c                   d S rE   rS   r   r;   r   s      r1   get_callexpr_kwargr      s	     +.#r3   !Tuple[TypingType[_TArgType], ...]Optional[_TArgType]c                   d S rE   rS   r   s      r1   r   r      s	     #r3   %Optional[Tuple[TypingType[Any], ...]]c                   	 | j                             |          }n# t          $ r Y d S w xY w| j        |         }t	          |||nt
          t          f          r|S d S rE   )	arg_namesindex
ValueErrorargsrN   r   r   )r   r;   r   arg_idxkwargs        r1   r   r      s    $**400   tt M'"EZ3zz(H9M   4s    
++stmtsIterable[Statement]Iterator[Statement]c              #     K   | D ]j}t          |t                    rOt          |j        d         t                    r/|j        d         j        dk    r|j        d         j        E d {V  f|V  kd S )Nr   ztyping.TYPE_CHECKING)rN   r   exprr   fullnamebody)r   stmts     r1   flatten_typecheckingr      s        tV$$	49Q<22	 	!%)???y|(((((((((JJJJ r3   calleer   #Optional[Union[Instance, TypeInfo]]c                   t          | t          t          f          rt          | j        t                    rb| j        j        rTt          | j        j        t                    r5t          | j        j        j                  }t          |t                    r|S d S t          | j        t                    r1t          | j        j                  }t          |t                    r|S n!t          | j        t                    r| j        S d S rE   )rN   r   r   noder   rF   r$   r%   ret_typer&   r   targetr   )r   r   target_types      r1   type_for_calleer     s    &:x011 fk7++ 	{ $Jv{/?$N$N $*6;+;+DEEh11 $#O4Y// 	)&+*<==K+x00 #""#X.. 	;4r3   r?   c                    t          |t                    s|S |j        dk    r>t           t	           fd|j        D             t                      gz                       S                      |j        |          }|Wt          |t                    rBt          |j	        t                    r(|j	        }t          | f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                0    g | ]}t          |          S rS   )unbound_to_instance)r/   typ_argrQ   s     r1   r2   z'unbound_to_instance.<locals>.<listcomp>+  s$    KKKw$S'22KKKr3   Nc                ^    g | ])}t          |t                    rt          |          n|*S rS   )rN   r)   r   )r/   argrQ   s     r1   r2   z'unbound_to_instance.<locals>.<listcomp>;  sM         "#{33'S111	  r3   )rN   r)   r;   r   r*   r   r'   lookup_qualifiedr   r   r   r&   )rQ   r?   r   
bound_types   `   r1   r   r     s    c;'' 

 x: #KKKK#(KKK::, 
 
 	
 #..D 	t_-- 	ty(++ 	 Y
    8  

 

 
	
 
r3   rV   r   Optional[TypeInfo]c                    | j         t          u rD|                    | j        |           }|d S |rt	          |j        t                    sJ |j        S | j         S rE   )rA   r   r   r;   rN   r   r   )rV   rQ   syms      r1   info_for_clsr   H  s^     x###""38S11;45z#(H55555x8Or3   Union[str, JsonDict]c                $   	 |                                  S # t          $ r Y nw xY wt          | d          r$t          d | j        D                       | _        n$t          | d          r|                                 } |                                  S )Nr   c              3  b   K   | ]*}t          |d           r|                                n|V  +dS )resolve_string_annotationN)hasattrr   )r/   as     r1   	<genexpr>z!serialize_type.<locals>.<genexpr>[  s\       
 
  19::++---	
 
 
 
 
 
r3   r   )rK   	Exceptionr   tupler   r   )r?   s    r1   rJ   rJ   U  s    }}   sF 
. 
 
 X
 
 
 
 
 
1	2	2 .++--==??s    
##)r;   r<   rB   r\   )rA   r   r_   r<   rP   r   rB   rC   )rA   r   r_   r<   rB   rg   )rA   r   rB   rC   )rA   r   rB   r\   )rA   r   rQ   r!   rB   r   )r   r   r   r   rB   r<   )rA   r   r   r   rB   rC   )rQ   r!   r   r<   r   r   rB   rC   )
r   r   r   r<   r   r<   r   r<   rB   rC   )r   r   r;   r<   r   rC   rB   r   )r   r   r;   r<   r   r   rB   r   )r   r   r;   r<   r   r   rB   rg   )r   r   rB   r   )r   r   rB   r   )rQ   r!   r?   r   rB   r   )rV   r   rQ   r!   rB   r   )r?   r   rB   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   r7   r:   r^   rf   rj   rn   rq   rv   rz   r|   r   r   r   r   r   r   r   r   r   r   r   rJ   rS   r3   r1   <module>r      s   # " " " " " 				                                           % % % % % %                   : : : : : :             ' ' ' ' ' '       ! ! ! ! ! !                   ! ! ! ! ! !                   & & & & & &                               ' ' ' ' ' ' . . . . . . 7 7 7 7 7 7 : : : : : : 0 0 0 0 0 0 # # # # # # & & & & & &                   " " " " " " " " " " " "            MMW(..s33MMM	 	 6/ GKuXx-?'@AAA	*/ */ */ */ */ */ */ */Z. . . .; ; ; ;> > > >   / / / /. . . .   
   
0 0 0 0   
   &' ' ' '      
, , , ,  
9<. . . . . 
.
 
   
 9=	     (	 	 	 	   &/ / / /d
 
 
 
     r3   