
    yIf+                    D   d Z ddlmZ ddlZddlZddlZddlmZmZ ddl	m
Z
mZmZmZmZ ddlmZ ddlmZmZ ddlmZmZmZ e
rdd	lmZ dd
lmZ  G d de          Z G d de          Z ej        dej                  Z  G d dee          Z! G d de          Z"dS )zUDeclare the abstract base class for tox environments that handle the Python language.    )annotationsN)ABCabstractmethod)TYPE_CHECKINGAnyList
NamedTuplecast)
PythonSpec)ToxEnvToxEnvCreateArgs)FailRecreateSkip)Path)Configc                  B    e Zd ZU ded<   ded<   ded<   ded<   ded<   dS )	VersionInfointmajorminormicrostrreleaselevelserialN)__name__
__module____qualname____annotations__     J/var/www/piapp/venv/lib/python3.11/site-packages/tox/tox_env/python/api.pyr   r      s@         JJJJJJJJJKKKKKr!   r   c                      e Zd ZU ded<   ded<   ded<   ded<   ded<   d	ed
<   edd            Zedd            Zedd            ZdS )
PythonInfor   implementationr   version_infoversionboolis_64platformdict[str, Any]extrareturnc                6    | j         j         | j         j         S Nr&   r   r   selfs    r"   version_no_dotzPythonInfo.version_no_dot&   s    #)D4+<+BDDDr!   c                4    | j                                         S r/   )r%   lowerr1   s    r"   
impl_lowerzPythonInfo.impl_lower*   s    "((***r!   c                8    | j         j         d| j         j         S )N.r0   r1   s    r"   version_dotzPythonInfo.version_dot.   s"    #)EED,=,CEEEr!   Nr-   r   )r   r   r   r   propertyr3   r6   r9   r    r!   r"   r$   r$      s         LLLKKKMMME E E XE + + + X+ F F F XF F Fr!   r$   aJ  
    ^(?!py$)                                               # don't match 'py' as it doesn't provide any info
    (?P<impl>py|pypy|cpython|jython|rustpython|ironpython) # the interpreter; most users will simply use 'py'
    (?P<version>[2-9]\.?[0-9]?[0-9]?)?$                    # the version; one of: MAJORMINOR, MAJOR.MINOR
    c                  |    e Zd Zd, fdZd- fdZd. fdZd/d
Zd/dZd0 fdZd1dZ	e
d2d            Ze
d3d            Zed4d            Zed4d            Zed4d            Zd- fdZd-dZed5d             Zed6d"            Zd- fd#Zd7d$Zed8d&            Zd7d'Zed9d*            Zed-d+            Z xZS ):Pythoncreate_argsr   r-   Nonec                f    d | _         d| _        t                                          |           d S NF)_base_python_base_python_searchedsuper__init__)r2   r>   	__class__s     r"   rE   zPython.__init__>   s1    /3+0"%%%%%r!   c                l    t                                                       d fd} j                            ddgt          t
                    j        d|            j                            d	d
gt          dd            j        	                    ddgd j
                    j        	                    ddgd j                    j        	                    ddgd j                    j        	                    dd j                    j        	                    dd j                   d S )Nvalue	list[str]r-   c                R                         j        | j        d                   S )Nignore_base_python_conflict)_validate_base_pythonnamecore)rH   r2   s    r"   validate_base_pythonz4Python.register_config.<locals>.validate_base_pythonF   s%    --di	Jg@hiiir!   base_python
basepythonz7environment identifier for python, first one found wins)keysof_typedefaultdescpost_processrK   ignore_basepython_conflictFzEdo not raise error if the environment name conflicts with base python)rR   rS   rT   rU   env_site_packages_direnvsitepackagesdirz$the python environments site package)rR   rU   rH   env_bin_dir	envbindirz%the python environments binary folder
env_python	envpythonz1python executable from within the tox environment)rU   rH   
py_dot_verz<python major>.<python minor>)rH   py_implzpython implementation)rH   rI   r-   rI   )rD   register_configconf
add_configr   r   default_base_pythonrN   r(   add_constantenv_site_package_dirrZ   r\   r^   r_   )r2   rO   rF   s   ` r"   r`   zPython.register_configC   s   !!!	j 	j 	j 	j 	j 	j 		.I,J- 	 	
 	
 	
 		/1MNX	 	 	
 	
 	
 		)+?@7+ 	 	
 	
 	

 		-8" 	 	
 	
 	

 		;'D/ 	 	
 	
 	

 		|-LTXTcddd	y*AVVVVVr!   dict[str, str]c                    t                                                      }t          | j        dd           }|t	          |          |d<   |S )N	hash_seedPYTHONHASHSEED)rD   _default_set_envgetattroptionsr   )r2   envrh   rF   s      r"   rj   zPython._default_set_envh   sG    gg&&(( 'k4 H H	 $'	NNC !
r!   r   c                    | j         j        S r/   )rP   r9   r1   s    r"   r^   zPython.py_dot_vero   s    ++r!   c                    | j         j        S r/   )rP   r6   r1   s    r"   r_   zPython.py_implr   s    **r!   rI   c                    t                                                      }t          j        dk    r|                    g d           g d}|                    |           |                    dg           |S )Nwin32)	APPDATAPROGRAMDATAzPROGRAMFILES(x86)PROGRAMFILESSYSTEMDRIVE
SYSTEMROOTCOMSPECPROCESSOR_ARCHITECTURENUMBER_OF_PROCESSORS)
PKG_CONFIGPKG_CONFIG_PATHPKG_CONFIG_SYSROOT_DIRREQUESTS_CA_BUNDLE)rD   _default_pass_envsysr*   extend)r2   rm   binary_extension_buildrF   s      r"   r~   zPython._default_pass_envu   s    gg''))<7""JJ
 
 
   "]!\!\

)***

()***
r!   ra   r   env_name
str | Nonec                V    |d n|                      |          }|t          j        n|gS r/   )extract_base_pythonr   
executable)r2   ra   r   rP   s       r"   rc   zPython.default_base_python   s2    &.ddD4L4LX4V4V"-"5;GGr!   c                R   g }|                     d          D ]3}t                              |          }|r|                    |           4|rYt	          |          dk    r*dd                    |           d| }t          |          t          t          |                    S d S )N-   zconflicting factors , z in )	splitPY_FACTORS_REmatchappendlenjoin
ValueErrornextiter)clsr   
candidatesfactorr   msgs         r"   r   zPython.extract_base_python   s     "
nnS)) 	* 	*F!''//E *!!&))) 	*:""RTYYz-B-BRRRR oo%Z(()))tr!   base_pythonsrK   r(   c                   |                      |          }|gt          j        |          |D ]P}t          j        |          t          fddD                       rd| d| }|r|gc S t	          |          Q|S )Nc              3  |   K   | ]6}t          |          t          |          t          |          k    V  7d S r/   )rk   ).0key	spec_base	spec_names     r"   	<genexpr>z/Python._validate_base_python.<locals>.<genexpr>   sX        y#..: Is++wy#/F/FF:::: r!   )r%   r   r   r   architecturez	env name z conflicting with base python )r   r   from_string_specanyr   )	r   r   r   rK   env_base_pythonrP   r   r   r   s	          @@r"   rL   zPython._validate_base_python   s     11(;;&"3ODDI+ $ $&7DD	     \     	$
 \h[[k[[C2 1 /0000s))O	$ r!   r   c                    t           )z
        If we have the python we just need to look at the last path under prefix.
        E.g., Debian derivatives change the site-packages to dist-packages, so we need to fix it for site-packages.
        NotImplementedErrorr1   s    r"   re   zPython.env_site_package_dir   s
     "!r!   c                    t           )z1The python executable within the tox environment.r   r1   s    r"   r\   zPython.env_python   
     "!r!   c                    t           )z-The binary folder within the tox environment.r   r1   s    r"   rZ   zPython.env_bin_dir   r   r!   c                    t                                                       |                                  |                                 | _        dS )z#Setup a virtual python environment.N)rD   
_setup_envensure_python_envprepend_env_var_path_paths)r2   rF   s    r"   r   zPython._setup_env   sB       //11r!   c                ,   |                                  }| j                            |t          j                  5 \  }}||                                  n'|du r#t          |                     ||                    d d d            d S # 1 swxY w Y   d S rA   )python_cachecachecomparer=   r   create_python_envr   	_diff_msg)r2   ra   eqolds       r"   r   zPython.ensure_python_env   s      ""Zfo66 	:)2s{&&((((ut~~dC88999		: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:s   AB		BBr+   r   c                    g }fd                                  D             }|r+|                    dd                    |                       fd                                 D             }|r+|                    dd                    |                      fd                                  D             }|r+|                    dd                    |                      dd	                    |           S )
Nc                ,    g | ]\  }}|v	| d |S =r    r   kvr   s      r"   
<listcomp>z$Python._diff_msg.<locals>.<listcomp>   s,    GGG$!Q!3,,A,,,r!   zadded z | c                ,    g | ]\  }}|v	| d |S r   r    )r   r   r   ra   s      r"   r   z$Python._diff_msg.<locals>.<listcomp>   s,    IIIDAq1D==a<<!<<===r!   zremoved c                V    g | ]%\  }}|v 	||         k    | d |         d|&S )r   z->r    r   s      r"   r   z$Python._diff_msg.<locals>.<listcomp>   sQ    aaa1SUVZ]^_Z`U`U`a++#a&++a++U`U`U`r!   zchanged zpython r   )itemsr   r   )ra   r   resultaddedremovedchangeds   ``    r"   r   zPython._diff_msg   s   GGGG$**,,GGG 	8MM65::e#4#466777IIIICIIKKIII 	<MM:UZZ%8%8::;;;aaaa

aaa 	<MM:UZZ%8%8::;;;,6**,,,r!   
list[Path]c                    t           r/   r   r1   s    r"   r   zPython.prepend_env_var_path       !!r!   c                0   t                                                       | j        s| j        j        r_| j                                        }| j        r
|| j        d<   | j        j        r+t          j        d	                    |                     dS dS dS )zCalled when setup is done.installed_packages,N)
rD   _done_with_setupjournalrl   list_dependencies	installer	installedloggingwarningr   )r2   outcomerF   s     r"   r   zPython._done_with_setup   s      """< 	34<9 	3n..00G| =5<12|- 3 1 122222	3 	33 3r!   c                8    dt          | j        j                  iS )Nr&   )listrP   r&   r1   s    r"   r   zPython.python_cache   s    D!1!>??
 	
r!   r$   c                   | j         d         }| j        du rMd| _        |                     |          | _        | j        %| j        r|                                 }|| j        d<   | j        C| j        d         r'dd                    |           }t          |          t          |          t          t          | j                  S )	zResolve base python.rP   FTNpythonskip_missing_interpretersz0could not find python interpreter with spec(s): r   )ra   rC   _get_pythonrB   r   _get_env_journal_pythonrN   r   r   NoInterpreterr
   r$   )r2   r   rH   r   s       r"   rP   zPython.base_python   s     #')M":%..)-D& $ 0 0 > >D ,,4466).X&$y45  bS_I`I`bb3ii---J 1222r!   c                    | j         j        t          | j         j                  | j         j        | j         j        | j         j        d dS )N)r%   r&   r'   r)   sysplatformextra_version_info)rP   r%   tupler&   r'   r)   r*   r1   s    r"   r   zPython._get_env_journal_python	  sI    ".=!$"2"?@@'/%++4"&
 
 	
r!   rP   PythonInfo | Nonec                    t           r/   r   )r2   rP   s     r"   r   zPython._get_python  r   r!   c                    t           r/   r   r1   s    r"   r   zPython.create_python_env  r   r!   )r>   r   r-   r?   )r-   r?   )r-   rf   r:   )r-   rI   )ra   r   r   r   r-   rI   )r   r   r-   r   )r   r   r   rI   rK   r(   r-   rI   )r-   r   )ra   r+   r   r+   r-   r   )r-   r   )r-   r+   )r-   r$   )rP   rI   r-   r   )r   r   r   rE   r`   rj   r^   r_   r~   rc   classmethodr   rL   r   re   r\   rZ   r   r   staticmethodr   r   r   r   r;   rP   r   r   r   __classcell__)rF   s   @r"   r=   r=   =   s       & & & & & &
#W #W #W #W #W #WJ     , , , ,+ + + +     *H H H H    [    [. " " " ^" " " " ^" " " " ^"2 2 2 2 2 2: : : : - - - \- " " " ^"3 3 3 3 3 3
 
 
 

 3 3 3 X3&
 
 
 
 " " " ^" " " " ^" " " " "r!   r=   c                  "    e Zd ZdZd
dZddZd	S )r   zcould not find interpreter.r   rI   r-   r?   c                    || _         d S r/   )r   )r2   r   s     r"   rE   zNoInterpreter.__init__  s    (r!   r   c                <    dd                     | j                   S )Nz<could not find python interpreter matching any of the specs r   )r   r   r1   s    r"   __str__zNoInterpreter.__str__"  s     ldiiX\XiNjNjlllr!   N)r   rI   r-   r?   r:   )r   r   r   __doc__rE   r   r    r!   r"   r   r     sH        %%) ) ) )m m m m m mr!   r   )#r   
__future__r   r   rer   abcr   r   typingr   r   r   r	   r
   virtualenv.discovery.py_specr   tox.tox_env.apir   r   tox.tox_env.errorsr   r   r   pathlibr   tox.config.mainr   r   r$   compileVERBOSEr   r=   r   r    r!   r"   <module>r      s   [ [ " " " " " "  				 



 # # # # # # # # = = = = = = = = = = = = = = 3 3 3 3 3 3 4 4 4 4 4 4 4 4 3 3 3 3 3 3 3 3 3 3 '&&&&&&    *   F F F F F F F F* 

 J \" \" \" \" \"VS \" \" \"~m m m m mD m m m m mr!   