Ë
    ðmxiÓ1  ã                  óÄ   — d dl mZ d dlZd dlZd dlmZ d dlZd dlZd dl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 ej"                  j$                   G d„ de«      «       Zy)é    )ÚannotationsN)ÚPathé   )ÚTestBaseé   )Úconfig)Úeq_é   )Úutilc                  óî   — e Zd ZdZ ej
                  d¬«      d„ «       Z ej
                  d¬«      d„ «       Zd„ Z ej
                  «       d„ «       Z	ej
                  d	„ «       Z
ed
„ «       Zd„ Z	 	 dd„Zy)ÚMypyTest)Úno_sqlalchemy2_stubsÚfunction)Úscopec              #  ó@   K  — | j                  «       E d {  –—†  y 7 Œ­w©N©Ú	_cachedir©Úselfs    úW/home/htdocs/ttos/venv/lib/python3.12/site-packages/sqlalchemy/testing/fixtures/mypy.pyÚper_func_cachedirzMypyTest.per_func_cachedir   ó   è ø€ à—>‘>Ó#×#Ò#úó   ‚–—Úclassc              #  ó@   K  — | j                  «       E d {  –—†  y 7 Œ­wr   r   r   s    r   ÚcachedirzMypyTest.cachedir!   r   r   c              #  ór  K  — d}t        j                  «       5 }t        t        |«      dz  d«      5 }|j	                  d|› d�«       d d d «       t        t        |«      dz  d«      5 }|j	                  d|› d�«       d d d «       |–— d d d «       y # 1 sw Y   ŒLxY w# 1 sw Y   Œ"xY w# 1 sw Y   y xY w­w)	NÚ úsqla_mypy_config.cfgÚwz˜
                    [mypy]

                    plugins = sqlalchemy.ext.mypy.plugin

                    show_error_codes = True

                    z¡
                    disable_error_code = no-untyped-call

                    [mypy-sqlalchemy.*]
                    ignore_errors = True

                    úplain_mypy_config.cfgz^
                    [mypy]

                    show_error_codes = True

                    z®
                    disable_error_code = var-annotated,no-untyped-call
                    [mypy-sqlalchemy.*]
                    ignore_errors = True

                    )ÚtempfileÚTemporaryDirectoryÚopenr   Úwrite)r   Ú	mypy_pathr   Úconfig_files       r   r   zMypyTest._cachedir%   sá   è ø€ àˆ	ä×(Ñ(Ó*ð 	¨hÜÜ�X“Ð!7Ñ7¸óð àØ×!Ñ!ðð �Kð  ð	
ô÷ô  Ü�X“Ð!8Ñ8¸#óð àØ×!Ñ!ðð �Kð  ðô
÷ð ŠN÷?	ð 	÷ð ú÷ ð ú÷#	ð 	üsK   ‚B7™B+²BÁ B+Á(BÁ>B+Â
	B7ÂB	ÂB+ÂB(	Â$B+Â+B4Â0B7c                ó$   ‡‡— ddl mŠ dˆˆfd„	}|S )Nr   )Úapic           	     óª  •— |€‰
}ddd|dt         j                  j                  ||rdnd«      g}t         j                  j                  | «      }t         j                  j                  ||«      }| |k7  rt	        j
                  | |«       |j                  |«       t         j                  j                  dd «       ‰	j                  |«      \  }}}|||fS )Nz--strictz--raise-exceptionsz--cache-dirz--config-filer    r"   ÚMYPY_FORCE_COLOR)
ÚosÚpathÚjoinÚbasenameÚshutilÚcopyfileÚappendÚenvironÚpopÚrun)r.   Ú
use_pluginÚuse_cachedirÚargsÚfilenameÚtest_programÚstdoutÚstderrÚexitcoder*   r   s            €€r   r6   z!MypyTest.mypy_runner.<locals>.runN   sÆ   ø€ ØÐ#Ø'�àØ$ØØØÜ—‘—‘Ø ñ &ñ /à4óðˆDô* —w‘w×'Ñ'¨Ó-ˆHÜŸ7™7Ÿ<™<¨°hÓ?ˆLØ�|Ò#Ü—‘  lÔ3Ø�K‰K˜Ô%ô �J‰J�N‰NÐ-¨tÔ4à'*§w¡w¨t£}Ñ$ˆF�F˜HØ˜6 8Ð+Ð+ó    )FN)Úmypyr*   )r   r   r6   r*   s    ` @r   Úmypy_runnerzMypyTest.mypy_runnerJ   s   ù€ åö#	,ðJ ˆ
r?   c                ó   ‡ ‡— dˆˆ fd„	}|S )Nc                ón   •— ‰j                  | «      } ‰| |¬«      \  }}}‰j                  | ||||«       y )N)r7   )Ú_collect_messagesÚ_check_output)r.   r7   Úexpected_messagesr<   r=   r>   rA   r   s         €€r   r6   z)MypyTest.mypy_typecheck_file.<locals>.runw   sA   ø€ Ø $× 6Ñ 6°tÓ <ÐÙ'2°4ÀJÔ'OÑ$ˆF�F˜HØ×ÑØÐ'¨°¸õr?   )F© )r   rA   r6   s   `` r   Úmypy_typecheck_filezMypyTest.mypy_typecheck_fileu   s   ù€ ö	ð ˆ
r?   c                ó(  — t         j                  j                  | «      r| }n^t        j                  «       d   j
                  }t         j                  j                  t         j                  j                  |«      | «      }t        t        |«      j                  d«      «      }t        j                  j                  D ]Q  }|sŒt         j                  j                  |«      sŒ&|j                  t        |«      | z  j                  d«      «       ŒS |S )Nr   z**/*.py)r-   r.   ÚisabsÚinspectÚstackr:   r/   ÚdirnameÚlistr   Úglobr   ÚoptionsÚmypy_extra_test_pathsÚisdirÚextend)rM   r.   Úcaller_pathÚfilesÚ	extra_dirs        r   Úfile_combinationszMypyTest.file_combinations€   s¹   € ä�7‰7�=‰=˜Ô!Ø‰Dä!Ÿ-™-›/¨!Ñ,×5Ñ5ˆKÜ—7‘7—<‘<¤§¡§¡°Ó <¸gÓFˆDÜ”T˜$“Z—_‘_ YÓ/Ó0ˆäŸ™×=Ñ=ò 	JˆIÚœRŸW™WŸ]™]¨9Õ5Ø—‘œd 9›o°Ñ7×=Ñ=¸iÓHÕIð	Jð ˆr?   c           
     ó¾  ‡— ddl m} g }t        j                  d«      }t        j                  d«      }t	        |«      5 }g }t        |d«      D �]u  \  Š}|j                  |«      }	|	rs|	j                  d«      j                  d«      \  }
}}t        j                  t        |
«      t        |«      fk  r't        j                  d|	j                  d«      z  «       Œ�|j                  |«      }	|	�r²t        |	j                  d«      «      }t        |	j                  d«      «      }t        |	j                  d	«      «      }t        |	j                  d
«      «      }t        j                  dd|	j                  d«      «      }|r0t        j                  dd„ |«      }t        j                  dd„ |«      }|rk|s_t        j                  dd„ |«      }t        j                  dd„ |«      }t        j                  dd|«      }t        j                  dd„ |«      }dx}}d|› d�}|r5t         j"                  r%|d   t        j                  |rdndd„ |dd  «      z   }|r(t         j$                  rt        j                  d d!„ |«      }|j'                  |||j)                  «       f«       �ŒS|s�ŒW|j+                  ˆfd"„|D «       «       g |d d  �Œx 	 d d d «       |S # 1 sw Y   |S xY w)#Nr   )Úmypy_14z0\s*# EXPECTED(_MYPY)?(_RE)?(_ROW)?(_TYPE)?: (.+)z%^#\s*PYTHON_VERSION\s?>=\s?(\d+\.\d+)r   ú.zRequires python >= %sr   r
   é   z# noqa[:]? ?.*r   é   zRow\[([^\]]+)\]c                óP   — d| j                  d«      › d| j                  d«      › d�S )Nztuple[r   z!, fallback=sqlalchemy.engine.row.r   ú]©Úgroup©Úms    r   ú<lambda>z,MypyTest._collect_messages.<locals>.<lambda>­   s,   € ¨¨q¯w©w°q«z¨lð ;4Ø45·G±G¸A³J°<¸qð'B€ r?   zOptional\[(.*)\]c                ó,   — d| j                  d«      › d�S )NzUnion[r   z, None]r_   ra   s    r   rc   z,MypyTest._collect_messages.<locals>.<lambda>´   s   € ¨¨q¯w©w°q«z¨l¸'Ð&B€ r?   z([\[\]])c                ó*   — d| j                  d«      › �S )Nú\r   r_   ra   s    r   rc   z,MypyTest._collect_messages.<locals>.<lambda>À   s   € ¨Q¨q¯w©w°q«z¨lÐ*;€ r?   z([\w_]+)c                ó,   — d| j                  d«      › d�S )Nz	(?:.*\.)?r   ú\*?r_   ra   s    r   rc   z,MypyTest._collect_messages.<locals>.<lambda>É   ó   € ¨Y°q·w±w¸q³z°lÀ#Ð*F€ r?   ÚListzbuiltins.listz\b(int|str|float|bool)\bc                ó,   — d| j                  d«      › d�S )Nz	builtins.r   rh   r_   ra   s    r   rc   z,MypyTest._collect_messages.<locals>.<lambda>Ó   ri   r?   TzRevealed type is "ú"z\b(List|Tuple|Dict|Set)\bz\b(List|Tuple|Dict|Set|Type)\bc                ó@   — | j                  d«      j                  «       S )Nr   )r`   Úlowerra   s    r   rc   z,MypyTest._collect_messages.<locals>.<lambda>ë   s   €  a§g¡g¨a£j×&6Ñ&6Ó&8€ r?   zOptional\[(.*?)\]c                ó*   — | j                  d«      › d�S )Nr   z | Noner_   ra   s    r   rc   z,MypyTest._collect_messages.<locals>.<lambda>ô   s   € ¨¯©°«¨°GÐ&<€ r?   c              3  ó2   •K  — | ]  \  }}}‰|||f–— Œ y ­wr   rG   )Ú.0Úis_mypyÚis_reÚexpected_msgÚnums       €r   ú	<genexpr>z-MypyTest._collect_messages.<locals>.<genexpr>û   s-   øè ø€ ò -ñØ#Ø!Ø(ð	 ˜g u¨lÔ;ñ-ùs   ƒ)Úsqlalchemy.ext.mypy.utilrY   ÚreÚcompiler%   Ú	enumerateÚmatchr`   Ú	partitionÚsysÚversion_infoÚintr   Ú	skip_testÚboolÚsubr   Úpy39Úpy310r3   ÚstriprS   )r   r.   rY   rF   Úexpected_reÚ	py_ver_reÚfile_Úcurrent_assert_messagesÚlinerb   ÚmajorÚ_Úminorrr   rs   Úis_rowÚis_typert   ru   s                     @r   rD   zMypyTest._collect_messagesŽ   sÑ  ø€ Ý4àÐÜ—j‘jØ?ó
ˆô —J‘JÐGÓHˆ	Ü�$‹Zð m	4˜5Ø&(Ð#Ü& u¨aÓ0ó k4‘	��TØ—O‘O DÓ)�ÙØ&'§g¡g¨a£j×&:Ñ&:¸3Ó&?‘O�E˜1˜eÜ×'Ñ'¬3¨u«:´s¸5³zÐ*BÒBÜ×(Ñ(Ø3°q·w±w¸q³zÑBôð à×%Ñ% dÓ+�ÚÜ" 1§7¡7¨1£:Ó.�GÜ  §¡¨£Ó,�EÜ! !§'¡'¨!£*Ó-�FÜ" 1§7¡7¨1£:Ó.�Gä#%§6¡6Ð*;¸RÀÇÁÈÃÓ#L�LÙÜ')§v¡vØ.ñBà(ó	(˜ô (*§v¡vØ/ÙBØ(ó(˜ñ Ù$ô
 ,.¯6©6Ø +Ù ;Ø ,ó,˜Lô ,.¯6©6Ø +Ù FØ ,ó,˜Lô ,.¯6©6Ø &¨¸ó,˜Lô ,.¯6©6Ø ;Ù FØ ,ó,˜Lð +/Ð.˜ %Ø);¸L¸>ÈÐ'K˜á¤4§9¢9ð (4°A¡¼¿¹ñ $+ñ !=à%Fá8Ø(¨¨Ð,ó:ñ (˜ñ ¤4§:¢:ô (*§v¡vØ0Ù<Ø(ó(˜ð
 ,×2Ñ2Ø  %¨×);Ñ);Ó)=Ð>öó -Ø%×,Ñ,ó -ð 5ô-ô ð 24Ð+©AÒ.ñWk4÷m	4ð^ !Ð ÷_m	4ð^ !Ð ús   ¿I$KÊ%"KËKc                óØ  — g }t         j                  j                  |«      }|�r%g }|j                  d«      }	|	rã|	j	                  d«      }
t        j                  d|
«      r|j                  d|
f«       n¥t        j                  d|
«      r@|	r�|	j	                  d«      }t        j                  d|«      s|	j                  d|«       nS|	rŒ=nOt        j                  d|
t
        j                  «      rn)t        j                  d|
«      r|j                  d	|
f«       |	rŒã|D ]–  \  }}}}|j                  d
d«      }|sdnd}t        |«      D ]T  \  }\  }}|r't        j                  d|› d|› d|› d|› |› �	|«      sŒ0 n7|› d|› d|› d|› |› �|j                  d
d«      v sŒT n |j                  |«       Œ”||= Œ˜ |rNdj                  |«      }t        d|d¬«       |r&dj                  d„ |D «       «      }t        d|d¬«       J d«       ‚|r?t        t        |«      › d�«       t        dj                  d„ |D «       «      «       J d«       ‚y |dk7  rt        ||d¬«       t        |d|¬«       y )Nú
r   z.+\.py:\d+: error: .*Úerrorz/.+\.py:\d+: note: +(?:Possible overload|def ).*z.+\.py:\d+: note: +def .*z*.+\.py:\d+: note: .*(?:perhaps|suggestion)z.+\.py:\d+: note: .*Únoteú'rl   z[SQLAlchemy Mypy plugin] r   z.*z\:z\: ú:z: z"Couldn't locate expected messages:)Úsepc              3  ó&   K  — | ]	  \  }}|–— Œ y ­wr   rG   ©rq   rŒ   Úmsgs      r   rv   z)MypyTest._check_output.<locals>.<genexpr>?  s   è ø€ Ò%?©f¨a°¤cÑ%?ùó   ‚zRemaining messages:z'expected messages not found, see stdoutz& messages from mypy were not consumed:c              3  ó&   K  — | ]	  \  }}|–— Œ y ­wr   rG   r˜   s      r   rv   z)MypyTest._check_output.<locals>.<genexpr>E  s   è ø€ Ò9©¨¨3¤Ñ9ùrš   z&errors and/or notes remain, see stdout)r™   )r-   r.   r0   Úsplitr5   rx   r{   r3   ÚinsertÚIÚreplacerz   r/   ÚprintÚlenr	   )r   r.   rF   r<   r=   r>   Únot_locatedr:   ÚoutputÚ	raw_linesÚeÚolru   rr   rs   r™   ÚprefixÚidxÚtypÚerrmsgÚmissingÚextras                         r   rE   zMypyTest._check_output  sx  € ð ˆÜ—7‘7×#Ñ# DÓ)ˆÚð
 ˆFàŸ™ TÓ*ˆIÙØ—M‘M !Ó$�Ü—8‘8Ð4°aÔ8Ø—M‘M 7¨A ,Õ/Ü—X‘XØFÈôñ $Ø&Ÿ]™]¨1Ó-˜Ü!Ÿx™xÐ(DÀbÔIØ%×,Ñ,¨Q°Ô3Ø!ó	 $ô
 —X‘XØAÀ1ÄbÇdÁdôð Ü—X‘XÐ5°qÔ9Ø—M‘M 6¨1 +Ô.ò# ð& ->ò  Ñ(��W˜e SØ—k‘k # sÓ+�Ù<CÑ4È�Ü*3°FÓ*;ò Ñ&�C™˜#˜vÙÜŸ8™8Ø! ( ¨2¨c¨U°#°c°U¸#¸f¸XÀcÀUÐKØ"õñ "à#˜* A c U¨"¨S¨E°°F°8¸C¸5ÐAØ!Ÿ>™>¨#¨sÓ3ò4ñ ðð  ×&Ñ& sÔ+ØØ˜3‘Kð% ñ( ØŸ)™) KÓ0�ÜÐ:¸GÈÕNÙØ ŸI™IÑ%?¸Ô%?Ó?�EÜÐ/°¸DÕAØGÐGÓG�uáÜœ˜V›˜Ð%KÐLÔMÜ�d—i‘iÑ9°&Ô9Ó9Ô:ØFÐFÓF�uð ð ˜1Š}Ü�f˜f¨$Õ/ä�˜! Ö(r?   N)r<   Ústr)Ú__name__Ú
__module__Ú__qualname__Ú__requires__r   Úfixturer   r   r   rA   rH   ÚstaticmethodrW   rD   rE   rG   r?   r   r   r      s©   „ à,€Là€V‡^�^˜*Ô%ñ$ó &ð$ð €V‡^�^˜'Ô"ñ$ó #ð$ò#ðJ €V‡^�^Óñ(ó ð(ðT ‡^�^ñó ðð ñó ðòw!ðrE)Ø/2ôE)r?   r   )Ú
__future__r   rK   r-   Úpathlibr   rx   r1   r}   r#   Úbaser   r   r   Ú
assertionsr	   r   Úadd_to_markerr@   r   rG   r?   r   ú<module>r¹      sU   ðõ #ã Û 	Ý Û 	Û Û 
Û å Ý Ý Ý ð ×Ñ×Ñôr)ˆxó r)ó ñr)r?   