o
    2g                     @  s   d dl mZ d dl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Zd dlZd dlmZmZmZmZ d dlmZmZ d dlmZmZ G dd	 d	eZeejfd'ddZd(ddZejdfd)ddZd*ddZd+dd Zd,d#d$Z d-d%d&Z!dS ).    )annotationsN)contextmanager)Iterator)package_pathpip_lockpip_timeouttest_temp_dir)DataDrivenTestCase	DataSuite)assert_string_arrays_equalperform_file_operationsc                   @  s    e Zd ZdgZdZd
ddZd	S )PEP561Suitezpep561.test.	test_caser	   returnNonec                 C  s   t | d S N)test_pep561)selfr    r   L/home/garg/my-data/venv/lib/python3.10/site-packages/mypy/test/testpep561.pyrun_case   s   zPEP561Suite.run_caseN)r   r	   r   r   )__name__
__module____qualname__files	base_pathr   r   r   r   r   r      s    r   python_executablestrr   Iterator[tuple[str, str]]c              	   c  s    t  Z}tj| dd|gt dd}|jdkr+|jd|j	d }t
d| tjdkr@|tjtj|d	d
fV  n|tjtj|dd
fV  W d   dS W d   dS 1 sbw   Y  dS )z~Context manager that creates a virtualenv in a temporary directory

    Returns the path to the created Python executable
    -mvenvT)cwdcapture_outputr   utf-8zFailed to create venv.
win32ScriptspythonbinN)tempfileTemporaryDirectory
subprocessrunosgetcwd
returncodestdoutdecodestderr	Exceptionsysplatformpathabspathjoin)r   venv_dirprocerrr   r   r   
virtualenv   s   


  "r<   r   c              
   C  s  t jdks+dt j  krdk s+n dt j  krdk s+n dt j  kr)dk r-dS  ndS | dd	d
dg}z"tjttd tj|dtj	d}W d   n1 sPw   Y  W n tj
yk } ztdt |d}~ww |jdkrt|jd|jd dS )zAInstall pip>=21.3.1. Required for editable installs with PEP 660.)      )r=   
   r=   )r=   	   r>   )r=   r?   )r=         )r=   r@   Nr    pipinstallzpip>=21.3.1timeoutT)r#   envFailed to acquire r   r$   )r4   version_infofilelockFileLockr   r   r+   r,   r-   environTimeoutr3   r/   r0   r1   r2   )r   install_cmdr:   r;   r   r   r   upgrade_pip1   s(   

rO   Fpkgeditableboolc           	      C  s  t jt| }t \}|dddg}|r|d |d d|i}|t j z"t	j
ttd tj||d|d	}W d
   n1 sDw   Y  W n t	jy_ } ztdt |d
}~ww W d
   n1 sjw   Y  |jdkrt|jd|jd d
S )z.Install a package from test-data/packages/pkg/r    rC   rD   z-er   	PIP_BUILDrE   T)r"   r#   rG   NrH   r   r$   )r-   r6   r8   r   r)   r*   appendupdaterL   rJ   rK   r   r   r+   r,   rM   r3   r/   r0   r1   r2   )	rP   r   rQ   working_dirdirrN   rG   r:   r;   r   r   r   install_packageG   s,   



rX   testcaser	   c                 C  s  | j dus	J dtj}|dusJ dt| jd \}}t| jd }d}|D ]}|dkr1d}q(td	| |s>J d
t|}|\}}	|rNt|	 |D ]}
t	|
|	| qPt
|}d|v pdd|v  }|r| jd }t|ddd}| jD ]
}|| d qxW d   n1 sw   Y  || |ddg |	tjkr|d|	  |  }|g gkrg g| }t|D ]y\}}t| g }tj|\}}}||  D ]/}|ttj r||tttj d d q|ttj td }||d q|dkrdnd|d  }|dkr| jn| j |d g }t!||d| j" d| j# d|  q|rGt$| W d   dS W d   dS 1 sSw   Y  dS )z;Test running mypy on files that depend on PEP 561 packages.Nztest was not properly set upzShould be impossibler      FrQ   TzUnknown pip argument: z(No packages to install for PEP 561 test?z-pz	--packagez.pywr$   )encoding
z--no-error-summaryz--hide-error-codesz--python-executable=z
/ z on iteration zInvalid output (z, line ))%old_cwdr4   
executable
parse_pkgsinputparse_mypy_args
ValueErrorr<   rO   rX   listnameopenwriterT   extend
find_steps	enumerater   mypyapir,   
splitlines
startswithr   r-   seplenrstripreplaceoutputoutput2getr   filelineremove)rY   r'   pkgspip_args	mypy_argsrQ   argr!   r9   r   rP   cmd_linehas_programprogramfsstepsi
operationsrv   outr;   r/   rz   
iter_countexpectedr   r   r   r   `   sl   





$"1$r   commenttuple[list[str], list[str]]c                 C  sJ   |  ds	g g fS | dd  d^}}dd |dD dd |D fS )Nz# pkgs:   ;c                 S     g | ]}|  qS r   strip).0rP   r   r   r   
<listcomp>       zparse_pkgs.<locals>.<listcomp>,c                 S  r   r   r   )r   r   r   r   r   r      r   )rq   split)r   pkgs_strargsr   r   r   rc      s   
"rc   rz   	list[str]c                 C  s"   t d| }|s
g S |d S )Nz# flags: (.*)$rZ   )rematchgroupr   )rz   mr   r   r   re      s   re   c                  C  s   J r   )r)   r*   r-   r.   chdirr6   r8   makedirsri   closerj   r<   r4   rb   rT   rk   rn   ro   r,   )packagespkg_nametemp_dirold_dirfull_pkg_namepkg_init_namemypy_config_path	mypy_filer!   r9   r   cmd_line_argsr   r;   r/   r   r   r   test_mypy_path_is_respected   s   r   )r   r   r   r   )r   r   r   r   )rP   r   r   r   rQ   rR   r   r   )rY   r	   r   r   )r   r   r   r   )rz   r   r   r   )r   r   )"
__future__r   r-   r   r+   r4   r)   
contextlibr   typingr   rJ   mypy.apirn   mypy.test.configr   r   r   r   mypy.test.datar	   r
   mypy.test.helpersr   r   r   rb   r<   rO   rX   r   rc   re   r   r   r   r   r   <module>   s.    


D
