o
    Uh                      @  s*  d dl m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mZ ddlmZ dd	lmZ dd
lmZ e
rZd dlmZ d dlmZmZmZmZmZ d dlmZ eeZ G dd deZ!	d+d,ddZ"		d+d-ddZ#d.d!d"Z$G d#d$ d$Z%d/d&d'Z&G d(d) d)eZ'g d*Z(dS )0    )annotationsN)suppress)Path)TYPE_CHECKING)IS_WIN
fs_path_id   )Discover)
PythonInfo)
PythonSpec)ArgumentParser)Callable	GeneratorIterableMappingSequence)AppDatac                      sZ   e Zd ZU ded< ded< ded< d fdd	ZedddZdddZdddZ  Z	S )BuiltinzSequence[str]python_specr   app_datatry_first_withreturnNonec                   sZ   t  | |jptjg| _| jdr#| jdd  | jd d  | _|j| _|j	| _	d S )NVIRTUALENV_PYTHONr   )
super__init__pythonsys
executabler   _envgetr   r   )selfoptions	__class__ p/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/virtualenv/discovery/builtin.pyr      s   zBuiltin.__init__parserr   c              
   C  s6   |j ddddtdg dd |j dd	d
tdg dd d S )Nz-pz--pythonr   pyappendzinterpreter based on what to create environment (path/identifier) - by default use the interpreter where the tool is installed - first found wins)destmetavartypeactiondefaulthelpz--try-first-withr   py_exez:try first these interpreters before starting the discovery)add_argumentstr)clsr'   r%   r%   r&   add_parser_arguments%   s&   
zBuiltin.add_parser_argumentsPythonInfo | Nonec                 C  s4   | j D ]}t|| j| j| j}|d ur|  S qd S N)r   get_interpreterr   r   r   )r!   r   resultr%   r%   r&   run<   s   
zBuiltin.runr2   c                 C  s0   t | jdkr| jd n| j}| jj d|S )Nr   r   z discover of python_spec=)lenr   r$   __name__)r!   specr%   r%   r&   __repr__C   s   zBuiltin.__repr__)r   r   )r'   r   r   r   )r   r5   r   r2   )
r;   
__module____qualname____annotations__r   classmethodr4   r9   r=   __classcell__r%   r%   r#   r&   r      s   
 
r   r   Iterable[str]r   AppData | NoneenvMapping[str, str] | Noner   r5   c                 C  s   t | }td| t }|d u rtjn|}t||||D ])\}}|j|f} | |v r,qtd| |	||rBt
d| |  S ||  qd S )Nzfind interpreter for spec %rzproposed %szaccepted %s)r   from_string_specLOGGERinfosetosenvironpropose_interpreterssystem_executable	satisfiesdebugadd)keyr   r   rF   r<   proposed_pathsinterpreterimpl_must_matchr%   r%   r&   r7   H   s   

r7   r<   r   .Generator[tuple[PythonInfo, bool], None, None]c              	   c  s*   |d u rt jn|}t }|D ]8}t j|}zt | W n	 ty'   Y qw t j|}t|}||v r7q|| t	j
|||ddfV  q| jd urzt | j W n tyb   | jr` Y n w t j| j}t|}||vr|| t	j
|||ddfV  | jrd S nEt	|}	t|	j}t|}||vr|| |	dfV  trddlm}
 |
| ||D ]}t|j}t|}||v rq|| |dfV  qt| }tt|D ];\}}tt||| ||D ])\}}t|}t|}||v rq|| tj
||d|d}|d ur||fV  qqd S )N)rF   Tr   )rN   F)raise_on_errorrF   )rL   rM   rK   pathabspathlstatOSErrorr   rR   r
   from_exeis_abscurrent_systemr2   r   r   windowsrN   path_exe_finder	enumerate	get_pathsrI   rQ   LazyPathDumpPathPythonInfo)r<   r   r   rF   tested_exesr0   rY   exe_rawexe_idcurrent_pythonrN   rU   find_candidatesposexerV   r%   r%   r&   rN   [   s|   











rN   Mapping[str, str]Generator[Path, None, None]c              	   c  s    |  dd }|d u r!ztd}W n ttfy    tj}Y nw |rMtt|tj	D ]"}t
t t| d r=|V  W d    n1 sGw   Y  q,d S d S )NPATHCS_PATH)r    rL   confstrAttributeError
ValueErrordefpathmapr   splitpathsepr   r\   nextiterdir)rF   rY   pr%   r%   r&   rc      s$   

rc   c                   @  s    e Zd Zdd	d
ZdddZdS )rd   rk   intrY   r   rF   rm   r   r   c                 C  s   || _ || _|| _d S r6   )rk   rY   rF   )r!   rk   rY   rF   r%   r%   r&   r      s   
zLazyPathDump.__init__r2   c              	   C  s   d| j  d| j }| jdr?|d7 }| j D ]%}z| s(| jtj	@ s*W qW n	 t
y4   Y nw |d7 }||j7 }q|S )Nzdiscover PATH[z]=_VIRTUALENV_DEBUGz with => )rk   rY   rF   r    ry   is_dirstatst_moderL   X_OKr\   name)r!   content	file_pathr%   r%   r&   r=      s   zLazyPathDump.__repr__N)rk   r{   rY   r   rF   rm   r   r   r>   )r;   r?   r@   r   r=   r%   r%   r%   r&   rd      s    
rd   :Callable[[Path], Generator[tuple[Path, bool], None, None]]c                   s@   | j tjdkd| j tjdkr  d d fdd	}|S )z^Given a spec, return a function that can be called on a path to find all matching files in it.win32)r`   z.exerY   r   r   (Generator[tuple[Path, bool], None, None]c                 3  sT    |   }|  r|dfV  |  D ]}|j}|r'| |d dkfV  qd S )NFimplr   )existsry   	fullmatchr   absolute)rY   direct_pathrl   matchdirectpatr%   r&   	path_exes   s   
z"path_exe_finder.<locals>.path_exesN)rY   r   r   r   )generate_rer   platformstr_spec)r<   r   r%   r   r&   ra      s   

ra   c                   @  s   e Zd ZdZdS )re   zpython info from path.N)r;   r?   r@   __doc__r%   r%   r%   r&   re      s    re   )r   re   r7   )NN)r   rD   r   rE   rF   rG   r   r5   )
r<   r   r   rD   r   rE   rF   rG   r   rW   )rF   rm   r   rn   )r<   r   r   r   ))
__future__r   loggingrL   r   
contextlibr   pathlibr   typingr   virtualenv.infor   r   discoverr	   py_infor
   py_specr   argparser   collections.abcr   r   r   r   r   virtualenv.app_data.baser   	getLoggerr;   rI   r   r7   rN   rc   rd   ra   re   __all__r%   r%   r%   r&   <module>   s6    
1
I
