
    yIf                    2   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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rd d
lmZ d dlmZmZmZmZ d dlmZ  G d de          Z	 d&d'dZ	 	 d&d(dZd)dZ G d d           Z d*d"Z! G d# d$e          Z"g d%Z#dS )+    )annotationsN)Path)TYPE_CHECKINGCallable)IS_WIN
fs_path_id   )Discover)
PythonInfo)
PythonSpec)ArgumentParser)	GeneratorIterableMappingSequence)AppDatac                  h     e Zd ZU ded<   ded<   ded<   d fdZedd            ZddZddZ xZ	S )BuiltinzSequence[str]python_specr   app_datatry_first_withreturnNonec                    t                                          |           |j        pt          j        g| _        |j        | _        |j        | _        d S N)super__init__pythonsys
executabler   r   r   )selfoptions	__class__s     P/var/www/piapp/venv/lib/python3.11/site-packages/virtualenv/discovery/builtin.pyr   zBuiltin.__init__   sJ    !!!">=cn-=(%4    parserr   c           
         |                     ddddt          dg d           |                     dd	d
t          dg 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&   s     r$   add_parser_argumentszBuiltin.add_parser_arguments!   sx    ^ 	 
	
 
	
 
	
 	!M 	 	
 	
 	
 	
 	
r%   PythonInfo | Nonec                h    | j         D ])}t          || j        | j        | j                  }||c S *d S r   )r   get_interpreterr   r   _env)r!   r   results      r$   runzBuiltin.run8   sI    + 	 	K$[$2Et}VZV_``F! "tr%   r2   c                |    t          | j                  dk    r| j        d         n| j        }| j        j         d|S )Nr	   r   z discover of python_spec=)lenr   r#   __name__)r!   specs     r$   __repr__zBuiltin.__repr__?   sE    &)$*:&;&;q&@&@t""dFV.)LLDLLLr%   )r   r   )r&   r   r   r   )r   r5   r   r2   )
r=   
__module____qualname____annotations__r   classmethodr4   r:   r?   __classcell__)r#   s   @r$   r   r      s         !!!!5 5 5 5 5 5 
 
 
 [
,   M M M M M M M Mr%   r   r   Iterable[str]r   AppData | NoneenvMapping[str, str] | Noner   r5   c                   t          j        |           }t          j        d|           t	                      }|t
          j        n|}t          ||||          D ]l\  }}|j        |f} | |v rt          j        d|           |	                    ||          rt          j
        d|           |c S |                    |            md S )Nzfind interpreter for spec %rzproposed %szaccepted %s)r   from_string_speclogginginfosetosenvironpropose_interpreterssystem_executable	satisfiesdebugadd)keyr   r   rH   r>   proposed_pathsinterpreterimpl_must_matchs           r$   r7   r7   D   s     &s++DL/666UUN"**C(<T>S[]`(a(a    $_+_<.  ]K000  77 	M-55534r%   r>   r   .Generator[tuple[PythonInfo, bool], None, None]c              #    K   |t           j        n|}t                      }|D ]}t           j                            |          }	 t          j        |           t           j                            |          }t          |          }||v ri|                    |           t          j	        |||          dfV  # t          $ r Y w xY w| j        	 t          j        | j                   t           j                            | j                  }t          |          }||vr0|                    |           t          j	        |||          dfV  n# t          $ r | j        r Y nw xY w| j        rd S nt          j        |          }	t          |	j                  }t          |          }||vr|                    |           |	dfV  t          rYddlm}
  |
| ||          D ]E}t          |j                  }t          |          }||v r*|                    |           |dfV  Ft%          |           }t'          t)          |                    D ]\  }}t+          j        t/          |||                      ||          D ]c\  }}t          |          }t          |          }||v r(|                    |           t0          	                    ||d|          }|||fV  dd S )N)rH   Tr	   )rQ   F)raise_on_errorrH   )rO   rP   rN   pathabspathlstatr   rU   r   from_exeOSErroris_abscurrent_systemr2   r    r   windowsrQ   path_exe_finder	enumerate	get_pathsrL   rT   LazyPathDumpPathPythonInfo)r>   r   r   rH   tested_exesr0   r]   exe_rawexe_idcurrent_pythonrQ   rX   find_candidatesposexerY   s                   r$   rQ   rQ   W   s      "**CEEK  H Hwv&&
	HHTNNN good++G((F$$OOF###%gxSAAA4GGGGG  	 	 	D	 y
	LHTY
 goodi00G((F[((''' )'8EEEtKKKK  	 	 	{  	 ; 	F	 $28<<n/00G$$$$OOF### $&&&&  		(55555533D(CHH ( (k455#G,,[(('''!4'''''%d++Oy~~.. 
3 
3	Tl3c22333$3OD$9$9 	3 	3 C#hhG((F$$OOF###(11'8TY_b1ccK&!?2222	3
3 
3s$   B==
C
	C
E E+*E+Mapping[str, str]Generator[Path, None, None]c              #  N  K   |                      dd           }|9	 t          j        d          }n## t          t          f$ r t          j        }Y nw xY w|sd S t          t          |                    t          j	                            D ]}|
                                r|V  d S )NPATHCS_PATH)getrO   confstrAttributeError
ValueErrordefpathmapr   splitpathsepexists)rH   r]   ps      r$   rg   rg      s      7764  D|	:i((DD
+ 	 	 	:DDD	 ttzz"*--..  88:: 	GGG s   1 AAc                      e Zd Zdd	ZddZdS )rh   ro   intr]   r   rH   rq   r   r   c                0    || _         || _        || _        d S r   )ro   r]   rH   )r!   ro   r]   rH   s       r$   r   zLazyPathDump.__init__   s    	r%   r2   c                X   d| j          d| j         }| j                            d          r}|dz  }| j                                        D ]^}	 |                                s&|                                j        t          j	        z  s>n# t          $ r Y nw xY w|dz  }||j        z  }_|S )Nzdiscover PATH[z]=_VIRTUALENV_DEBUGz with => )ro   r]   rH   rv   iterdiris_dirstatst_moderO   X_OKra   name)r!   content	file_paths      r$   r?   zLazyPathDump.__repr__   s    :48::ty::8<<+,, 		*z!G!Y..00 * *	 '')) !)..2B2B2JRW2T ! !   D39>)s   :B


BBN)ro   r   r]   r   rH   rq   r   r   r@   )r=   rA   rB   r   r?    r%   r$   rh   rh      s<           
     r%   rh   :Callable[[Path], Generator[tuple[Path, bool], None, None]]c                    |                      t          j        dk              | j        t          j        dk    r dd	fd}|S )
z^Given a spec, return a function that can be called on a path to find all matching files in it.win32)rd   z.exer]   r   r   (Generator[tuple[Path, bool], None, None]c              3     K   | z  }|                                 r|dfV  |                                 D ]@}                    |j                  }|r"|                                |d         dk    fV  Ad S )NFimplr   )r~   r   	fullmatchr   absolute)r]   direct_pathrp   matchdirectpats       r$   	path_exesz"path_exe_finder.<locals>.path_exes   s      Vm 	%u$$$$ <<>> 	@ 	@CMM#(++E @llnneFmx&?????		@ 	@r%   )r]   r   r   r   )generate_rer   platformstr_spec)r>   r   r   r   s     @@r$   re   re      sr    


3<7#:

;
;C]F
|w@ @ @ @ @ @ @ r%   c                      e Zd ZdZdS )ri   zpython info from path.N)r=   rA   rB   __doc__r   r%   r$   ri   ri      s            r%   ri   )r   ri   r7   )NN)r   rF   r   rG   rH   rI   r   r5   )
r>   r   r   rF   r   rG   rH   rI   r   rZ   )rH   rq   r   rr   )r>   r   r   r   )$
__future__r   rL   rO   r   pathlibr   typingr   r   virtualenv.infor   r   discoverr
   py_infor   py_specr   argparser   collections.abcr   r   r   r   virtualenv.app_data.baser   r   r7   rQ   rg   rh   re   ri   __all__r   r%   r$   <module>r      s   " " " " " "  				 



       * * * * * * * * . . . . . . . .                   1''''''FFFFFFFFFFFF000000+M +M +M +M +Mh +M +M +M^ jn    ,  $$(	F3 F3 F3 F3 F3R          *   .! ! ! ! !Z ! ! !  r%   