
    +h!                        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*m-Z- d d$l*m.Z. d d%l*m/Z/  e0ejb                  je                  d&      D  cg c]  }  e jf                  d'|       s e4|         c}       Z5e5d(k\  Z6 ed)eeef   *      Z7 G d+ d,      Z8d- Z9d.ed/e:d0ed1dfd2Z;d.ed/e:d1ee   fd3Z<d.ed/e:d1ee   fd4Z=d.ed1dfd5Z>d.ed1dfd6Z?d.ed1e@fd7ZAd.ed1e@fd8ZBd.ed1dfd9ZCd.ed1e@fd:ZDd.ed;e%d1eee8      fd<ZEd=e	d>e!d1e:fd?Zd.ed@ee8   d1dfdAZFd;e%dBe:dCed1dfdDZGdCee#e$f   dEe:dFe:dGe:d1df
dHZHedIdJdKedLe:dMdd1eeeef      fdN       ZIedKedLe:dMee
e7   dIf   d1ee7   fdO       ZIddJdKedLe:dMeee
e   dIf      d1ee   fdPZIdQee   d1ee   fdRZJd;e%dSe	d1e	fdTZKdUed;e%d1ee   fdVZLdWed1efdXZMyc c} w )Y    N)Any)Iterable)Iterator)List)Optional)overload)Tuple)Type)TypeVar)Union)version)format_type)ARG_POS)CallExpr)ClassDef)CLASSDEF_NO_INFO)Context)
Expression)IfStmt)JsonDict)
MemberExpr)NameExpr)	Statement)SymbolTableNode)TypeInfo)Options)ClassDefContext)DynamicClassDefContext)SemanticAnalyzerPluginInterface)deserialize_and_fixup_type)map_type_from_supertype)Instance)NoneType)TypeVarType)UnboundType)	UnionType.z^\d+$)      	_TArgType)boundc                   p    e Zd Zdedededee   deddfdZde	fd	Z
d
eddfdZedede	dedd fd       Zy)SQLAlchemyAttributenamelinecolumntypinforeturnNc                 J    || _         || _        || _        || _        || _        y N)r.   r/   r0   typer2   )selfr.   r/   r0   r1   r2   s         K/var/www/html/venv/lib/python3.12/site-packages/sqlalchemy/ext/mypy/util.py__init__zSQLAlchemyAttribute.__init__3   s'     				    c                     | j                   sJ | j                  | j                  | j                  | j                   j	                         dS )N)r.   r/   r0   r6   )r6   r.   r/   r0   	serialize)r7   s    r8   r<   zSQLAlchemyAttribute.serializeA   s=    yyyIIIIkkII'')	
 	
r:   sub_typec                     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)
isinstancer6   r$   r!   r2   )r7   r=   s     r8   expand_typevar_from_subtypez/SQLAlchemyAttribute.expand_typevar_from_subtypeJ   s-     $))[1+DIIxK	r:   dataapic                 n    |j                         }t        |j                  d      |      } | d||d|S )Nr6   )r1   r2    )copyr    pop)clsr2   rA   rB   r1   s        r8   deserializezSQLAlchemyAttribute.deserializeS   s9     yy{(&)93?.s...r:   )__name__
__module____qualname__strintr   r
   r   r9   r   r<   r@   classmethodr   rH   rD   r:   r8   r-   r-   2   s      	
 d^  

8 
LH L L // / -	/
 
/ /r:   r-   c                 @    t        t        j                  d|             S )Nz	^__.+?__$)boolrematch)r.   s    r8   name_is_dunderrS   _   s    t,--r:   r2   keyrA   r3   c                 B    || j                   j                  di       |<   y N
sqlalchemymetadata
setdefault)r2   rT   rA   s      r8   _set_info_metadatar[   c   s    6:DMM\2.s3r:   c                 Z    | j                   j                  di       j                  |d       S rV   )rY   get)r2   rT   s     r8   _get_info_metadatar^   g   s&    ==\2.223==r:   c                 b    | j                   r#| j                   D ]  }t        ||      }||c S  y r5   )mror^   )r2   rT   baserY   s       r8   _get_info_mro_metadatarb   k   s8    xxHH 	 D)$4H#	  r:   c                 <    | j                   j                  di        y rV   rX   r2   s    r8   establish_as_sqlalchemyre   t   s    MM\2.r:   c                     t        | dd       y Nis_baseTr[   rd   s    r8   set_is_baserj   x   s    tY-r:   c                 "    t        | d      }|du S rg   r^   r2   rh   s     r8   get_is_basern   |   s     y1Gd?r:   c                 "    t        | d      }|du S rg   )rb   rm   s     r8   has_declarative_baserp      s    $T95Gd?r:   c                     t        | dd       y N	has_tableTri   rd   s    r8   set_has_tablert      s    t[$/r:   c                 "    t        | d      }|du S rr   rl   rm   s     r8   get_has_tablerv      s     {3Gd?r:   rB   c                     t        | d      }|y g }|D ];  }t        j                  | ||      }|j                  |        |j	                  |       = |S Nmapped_attributes)r^   r-   rH   r@   append)r2   rB   ry   
attributesrA   attrs         r8   get_mapped_attributesr}      sm     3E!3  ,.J!  "..tT3?((.$ 
 r:   typ_optionsc                 <    t         rt        | |      S t        |       S r5   )mypy_14_mypy_format_type)r~   r   s     r8   r   r      s     w// &&r:   r{   c           	      `    t        | d|D cg c]  }|j                          c}       y c c}w rx   )r[   r<   )r2   r{   	attributes      r8   set_mapped_attributesr      s.     0:;9			; 	<s   +msgctxc                 0    d|z  }| j                  ||      S )Nz[SQLAlchemy Mypy plugin] %s)fail)rB   r   r   s      r8   r   r      s    
'#
-C88Cr:   modulesymbol_nameasnamec                     | j                   j                  | j                   j                     j                  }||vr,| j                   j                  |   j                  |   }|||<   y y r5   )rB   modules
cur_mod_idnames)r   r   r   r   module_globals
lookup_syms         r8   
add_globalr      s_     WW__SWW%7%78>>N^#&)ggoof&=&C&C'

 ",v $r:   .)
expr_typescallexprr.   r   c                     y r5   rD   r   r.   r   s      r8   get_callexpr_kwargr      s     r:   c                     y r5   rD   r   s      r8   r   r      s     r:   c                    	 | j                   j                  |      }| j                  |   }t	        |||nt
        t        f      r|S y # t        $ r Y y w xY wr5   )	arg_namesindex
ValueErrorargsr?   r   r   )r   r.   r   arg_idxkwargs        r8   r   r      sd    $$**40 MM'"EZ3z(H9M   s   A	 		AAstmtsc              #      K   | D ]r  }t        |t              r\t        |j                  d   t              r?|j                  d   j                  dk(  r#|j
                  d   j
                  D ]  }|  o| t y w)Nr   ztyping.TYPE_CHECKING)r?   r   exprr   fullnamebody)r   stmtsubstmts      r8   flatten_typecheckingr      sq      	tV$499Q<2		!%%)??99Q<,,  J	s   A9A;r1   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   )r?   r%   r.   unbound_to_instancer&   r   r#   lookup_qualifiedr   noder   r"   )rB   r1   typ_argr   
bound_typeargs         r8   r   r      s     c;'

 xx: #BE((Kw$S'2K:,
 	
 #.D 	t_-tyy(+YY

 88	  c;/ $C-
 	
 
1 L s   C;%D 
rG   c                     | j                   t        u rI|j                  | j                  |       }|y |rt	        |j
                  t              sJ |j
                  S | j                   S r5   )r2   r   r   r.   r?   r   r   )rG   rB   syms      r8   info_for_clsr   *  sW     xx##""388S1;z#((H555xx88Or:   r   c                 h    t        d      }d|_        t        |d      }t        || gt        gdg      S )N__sa_Mappedz sqlalchemy.orm.attributes.Mapped_empty_constructorarg1)r   r   r   r   r   )r   column_descriptormember_exprs      r8   expr_to_mapped_constructorr   7  sC     /!C.0DEK					 r:   )NrQ   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   mypy.optionsr   mypy.pluginr   r   r   mypy.plugins.commonr    mypy.typeopsr!   
mypy.typesr"   r#   r$   r%   r&   tuple__version__splitrR   rM   _versr   r*   r-   rS   rL   r[   r^   rb   re   rj   rP   rn   rp   rt   rv   r}   r   r   r   r   r   r   r   r   )xs   0r8   <module>r      s   	        %    :    '  !   !    &    ' . 7 : 0    " "  ((..s3Mxrxx!7LSVM	 6/ KuXx-?'@A	*/ */Z.;X ;C ;s ;t ;>X >C >HSM >   /( /t /.h .4 .h 4 
x D 
0 0T 0 T 

8d&'(&'d 'W ' '
 $%8 9	- C g $ 
,	 66	7,, , 	,
 
,  
9<!26eHh&'( 
 

 j+S01	
 i 
 9=	
 z#345	
 c](
 3 
8K 
-	(-/3-	-`
	
7
h
	Z 	H 	[ Ns   I,
I,