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j6 7d,¡D ƒƒZ8e8d-kZ9ed.eeef d/�Z:G d0d1„ d1ƒZ;d�d6d7„Z<dŽd>d?„Z=d�dAdB„Z>d�dCdD„Z?d�dEdF„Z@d�dGdH„ZAd‘dIdJ„ZBd‘dKdL„ZCd�dMdN„ZDd‘dOdP„ZEd’dTdU„ZFd“dZd[„Zd”d^d_„ZGd•dcdd„ZHd–didj„ZIe	dkdlœd—dqdr„ƒZJe	d˜dudr„ƒZJddlœd™dwdr„ZJdšd{d|„ZKd›d€d�„ZLdœdƒd„„ZMd�dˆd‰„ZNdžd‹dŒ„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/   úT/var/www/html/flaskapp/venv/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 )zÔTake 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