
    hZ'f$              	         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  e5ejl                  jo                  d*      D  cg c]  }  ejp                  d+|       s e9|         c}       Z:e:d,k\  Z; ed-eeef   .      Z< G d/ d0      Z=dId1Z>dJd2Z?dKd3Z@dKd4ZAdLd5ZBdLd6ZCdMd7ZDdMd8ZEdLd9ZFdMd:ZG	 	 	 	 	 	 dNd;ZHdOd<Z	 	 	 	 	 	 dPd=ZIdQd>ZJ	 	 	 	 	 	 	 	 	 	 dRd?ZKe	d@dA	 	 	 	 	 	 	 dSdB       ZLe		 	 	 	 	 	 	 	 dTdC       ZLddA	 	 	 	 	 	 	 dUdDZLdVdEZMdWdFZN	 	 	 	 	 	 dXdGZO	 	 	 	 	 	 dYdHZPyc c} w )Z    )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)	UnionType.z^\d+$)      	_TArgType)boundc                  ^    e Zd Z	 	 	 	 	 	 	 	 	 	 	 	 ddZddZddZe	 	 	 	 	 	 	 	 d	d       Zy)
SQLAlchemyAttributec                J    || _         || _        || _        || _        || _        y N)namelinecolumntypeinfo)selfr4   r5   r6   typr8   s         g/var/www/html/tulostaulu.pesapallolive.fi/venv/lib/python3.12/site-packages/sqlalchemy/ext/mypy/util.py__init__zSQLAlchemyAttribute.__init__?   s'     				    c                    | j                   sJ | j                  | j                  | j                  | j                   j	                         dS )N)r4   r5   r6   r7   )r7   r4   r5   r6   	serialize)r9   s    r;   r?   zSQLAlchemyAttribute.serializeM   s;    yyIIIIkkII'')	
 	
r=   c                    t        | j                  t              syt        | j                  || j                        | _        y)zxExpands type vars in the context of a subtype when an attribute is
        inherited from a generic super type.
        N)
isinstancer7   r(   r#   r8   )r9   sub_types     r;   expand_typevar_from_subtypez/SQLAlchemyAttribute.expand_typevar_from_subtypeV   s-     $))[1+DIIxK	r=   c                n    |j                         }t        |j                  d      |      } | d||d|S )Nr7   )r:   r8    )copyr"   pop)clsr8   dataapir:   s        r;   deserializezSQLAlchemyAttribute.deserialize_   s9     yy{(&)93?.s...r=   N)r4   strr5   intr6   rM   r:   zOptional[Type]r8   r   returnNone)rN   r   )rB   r   rN   rO   )r8   r   rI   r   rJ   r!   rN   r1   )__name__
__module____qualname__r<   r?   rC   classmethodrK   rE   r=   r;   r1   r1   >   s      	
   

L // / -	/
 
/ /r=   r1   c                @    t        t        j                  d|             S )Nz	^__.+?__$)boolrematch)r4   s    r;   name_is_dunderrX   k   s    t,--r=   c                B    || j                   j                  di       |<   y N
sqlalchemymetadata
setdefault)r8   keyrI   s      r;   _set_info_metadatar`   o   s    6:DMM\2.s3r=   c                Z    | j                   j                  di       j                  |d       S rZ   )r]   get)r8   r_   s     r;   _get_info_metadatarc   s   s&    ==\2.223==r=   c                b    | j                   r#| j                   D ]  }t        ||      }||c S  y r3   )mrorc   )r8   r_   baser]   s       r;   _get_info_mro_metadatarg   w   s8    xxHH 	 D)$4H#	  r=   c                <    | j                   j                  di        y rZ   r\   r8   s    r;   establish_as_sqlalchemyrj      s    MM\2.r=   c                    t        | dd       y Nis_baseTr`   ri   s    r;   set_is_basero      s    tY-r=   c                "    t        | d      }|du S rl   rc   r8   rm   s     r;   get_is_basers      s     y1Gd?r=   c                "    t        | d      }|du S rl   )rg   rr   s     r;   has_declarative_baseru      s    $T95Gd?r=   c                    t        | dd       y N	has_tableTrn   ri   s    r;   set_has_tablery      s    t[$/r=   c                "    t        | d      }|du S rw   rq   rr   s     r;   get_has_tabler{      s     {3Gd?r=   c                    t        | d      }|y g }|D ];  }t        j                  | ||      }|j                  |        |j	                  |       = |S Nmapped_attributes)rc   r1   rK   rC   append)r8   rJ   r~   
attributesrI   attrs         r;   get_mapped_attributesr      sm     3E!3  ,.J!  "..tT3?((.$ 
 r=   c                <    t         rt        | |      S t        |       S r3   )mypy_14_mypy_format_type)typ_optionss     r;   r   r      s     w// &&r=   c           	     `    t        | d|D cg c]  }|j                          c}       y c c}w r}   )r`   r?   )r8   r   	attributes      r;   set_mapped_attributesr      s.     0:;9			; 	<s   +c                0    d|z  }| j                  ||      S )Nz[SQLAlchemy Mypy plugin] %s)fail)rJ   msgctxs      r;   r   r      s    
'#
-C88Cr=   c                    | j                   j                  | j                   j                     j                  }||vr,| j                   j                  |   j                  |   }|||<   y y r3   )rJ   modules
cur_mod_idnames)r   modulesymbol_nameasnamemodule_globals
lookup_syms         r;   
add_globalr      s_     WW__SWW%7%78>>N^#&)ggoof&=&C&C'

 ",v $r=   .)
expr_typesc                    y r3   rE   callexprr4   r   s      r;   get_callexpr_kwargr      s     +.r=   c                    y r3   rE   r   s      r;   r   r      s     r=   c                   	 | j                   j                  |      }| j                  |   }t	        |||nt
        t        f      r|S y # t        $ r Y y w xY wr3   )	arg_namesindex
ValueErrorargsrA   r   r   )r   r4   r   arg_idxkwargs        r;   r   r      sd    $$**40 MM'"EZ3z(H9M   s   A	 		AAc              #     K   | D ]q  }t        |t              r[t        |j                  d   t              r>|j                  d   j                  dk(  r"|j
                  d   j
                  E d {    n| s y 7 w)Nr   ztyping.TYPE_CHECKING)rA   r   exprr   fullnamebody)stmtsstmts     r;   flatten_typecheckingr      si      tV$499Q<2		!%%)??yy|((((J )s   A+A<-A:.A<c                6   t        | t        t        f      rt        | j                  t              rv| j                  j
                  r_t        | j                  j
                  t              r;t        | j                  j
                  j                        }t        |t              r|S y t        | j                  t              r2t        | j                  j                        }t        |t              r|S y t        | j                  t              r| j                  S y r3   )rA   r   r   noder   r7   r$   r%   ret_typer&   r   targetr   )calleer   target_types      r;   type_for_calleer     s    &:x01fkk7+{{Jv{{/?/?$N*6;;+;+;+D+DEh1#OY/)&++*<*<=K+x0""  X.;;r=   c                
   t        |t              s|S |j                  dk(  rCt        | t	        |j
                  D cg c]  }t        | |       c}t               gz               S | j                  |j                  |      }|vt        |t              rft        |j                  t              rL|j                  }t        ||j
                  D cg c]   }t        |t              rt        | |      n|" c}      S |S c c}w c c}w )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   )rA   r)   r4   unbound_to_instancer*   r   r'   lookup_qualifiedr   r   r   r&   )rJ   r:   typ_argr   
bound_typeargs         r;   r   r     s     c;'

 xx: #BE((Kw$S'2K:,
 	
 #.D 	t_-tyy(+YY
 88  "#{3 (S1

 
	
 
5 L s   C;%D 
c                    | j                   t        u rI|j                  | j                  |       }|y |rt	        |j
                  t              sJ |j
                  S | j                   S r3   )r8   r   r   r4   rA   r   r   )rH   rJ   syms      r;   info_for_clsr   H  sT     xx##""388S1;z#((H55xx88Or=   )r4   rL   rN   rU   )r8   r   r_   rL   rI   r   rN   rO   )r8   r   r_   rL   rN   Optional[Any])r8   r   rN   rO   )r8   r   rN   rU   )r8   r   rJ   r!   rN   z#Optional[List[SQLAlchemyAttribute]])r   r   r   r   rN   rL   )r8   r   r   zList[SQLAlchemyAttribute]rN   rO   )rJ   r!   r   rL   r   r   rN   rO   )
r   z.Union[ClassDefContext, DynamicClassDefContext]r   rL   r   rL   r   rL   rN   rO   )r   r   r4   rL   r   rO   rN   z#Optional[Union[CallExpr, NameExpr]])r   r   r4   rL   r   z!Tuple[TypingType[_TArgType], ...]rN   zOptional[_TArgType])r   r   r4   rL   r   z%Optional[Tuple[TypingType[Any], ...]]rN   r   )r   zIterable[Statement]rN   zIterator[Statement])r   r   rN   z#Optional[Union[Instance, TypeInfo]])rJ   r!   r:   r   rN   r   )rH   r   rJ   r!   rN   zOptional[TypeInfo])Q
__future__r   rV   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*   tuple__version__splitrW   rM   _versr   r.   r1   rX   r`   rc   rg   rj   ro   rs   ru   ry   r{   r   r   r   r   r   r   r   r   r   )xs   0r;   <module>r      s   # 	        %    :   '  !    !    &      ' . 7 : 0 # &    " "  ((..s3Mxrxx!7LSVM	 6/ KuXx-?'@A	*/ */Z.;>/.

0

8(&'
 9	
,	7,, , 	,
 
,  
9<..!.26.(. 
.
 

 2	
  
 9=	
 6	
 (	&/	(//3/	/d
	
7

e Ns   H3
H