<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
B
    a                 @   s   d Z ddlmZ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 ddlmZ dd	lmZ dd
lmZmZ e	 Ze eeej< dddZdddZdd Zdd ZG dd deZdd ZdZ dS )z

We acquire the python information by running an interrogation script via subprocess trigger. This operation is not
cheap, especially not on Windows. To not have to pay this hefty cost every time we apply multiple levels of
caching.
    )absolute_importunicode_literalsN)OrderedDict)AppDataDisabled)
PythonInfo)PY2)Path)ensure_text)Popen
subprocessTFc             C   sP   |d krt jn|}t| ||||d}t|trL|r8|ntdt| d }|S )N)ignore_cachez%s)osenviron_get_from_cache
isinstance	Exceptionlogginginfostr)clsapp_dataexeenvZraise_on_errorr   result r   T/opt/alt/python37/lib/python3.7/site-packages/virtualenv/discovery/cached_py_info.pyfrom_exe   s    
r   c             C   sN   t |}|s|tkrt| }nt| ||||}| }t|< t|trJ||_|S )N)r   _CACHE_get_via_file_cacher   r   
executable)r   r   r   r   r   Zexe_pathr   py_infor   r   r   r   &   s    

r   c          	   C   s4  t t|}y| j}W n tk
r2   d}Y nX |d krBt }d || }}|  | r|	 }	|	d |	d |	d   }
}}|
|kr||kr| 
dd | D }|j}|d k	rtj|s|  d }n|  |d kr&t| |||\}}|d kr"||| d}	||	 n|}W d Q R X |S )Npathst_mtimecontentc             S   s   i | ]\}}||qS r   r   ).0kvr   r   r   
<dictcomp>C   s    z'_get_via_file_cache.<locals>.<dictcomp>)r#   r"   r$   )r	   r   statr#   OSErrorr   r    lockedexistsreadZ
_from_dictitemsZsystem_executabler   r"   remove_run_subprocessZ_to_dictwrite)r   r   r"   r   r   Z	path_textZpath_modifiedr    Zpy_info_storedataZof_pathZof_st_mtimeZ
of_contentZsys_exefailurer   r   r   r   5   s4    



r   c             C   s$  t tjtjd }||}|t|g}| }|	dd  t
dt| y0t|dtjtjtj|d}| \}}|j}	W n6 tk
r }
 zd|
j|
j  }}}	W d d }
~
X Y nX W d Q R X d\}}|	dkr| |}||_n6d	||	|rd
|nd|rd|nd}t|}||fS )Nz
py_info.py__PYVENV_LAUNCHER__z get interpreter info via cmd: %sT)universal_newlinesstdinstderrstdoutr    )NNr   z#failed to query {} with code {}{}{}z
 out: {!r}z
 err: {!r})r   r   r"   abspath__file__parentZensure_extractedr   copypopr   debugLogCmdr
   r   PIPEcommunicate
returncoder*   strerrorerrnoZ
_from_jsonr   formatRuntimeError)r   r   r   r   Zpy_info_scriptcmdprocessouterrcodeZos_errorr   r3   msgr   r   r   r0   T   s:    
0
r0   c               @   s&   e Zd ZdddZdd Zdd ZdS )	r@   Nc             C   s   || _ || _d S )N)rH   r   )selfrH   r   r   r   r   __init__y   s    zLogCmd.__init__c                sV   dd   d  fdd| jD }| jd k	rD| d| j7 }trR|dS |S )Nc             S   s   t | tr| dS | S )Nzutf-8)r   bytesdecode)r'   r   r   r   e~   s    zLogCmd.__repr__.<locals>.e c             3   s   | ]}t  |V  qd S )N)pipesquote)r%   c)rR   r   r   	<genexpr>   s    z"LogCmd.__repr__.<locals>.<genexpr>z env of {!r}zutf-8)joinrH   r   rF   r   encode)rN   Zcmd_reprr   )rR   r   __repr__}   s    

zLogCmd.__repr__c             C   s   t | }tr|dS |S )Nzutf-8)reprr   rQ   )rN   rawr   r   r   __unicode__   s    
zLogCmd.__unicode__)N)__name__
__module____qualname__rO   rZ   r]   r   r   r   r   r@   x   s   
r@   c             C   s   |    t  d S )N)Zpy_info_clearr   clear)r   r   r   r   ra      s    ra   )r   ra   r@   )NTF)T)!__doc__
__future__r   r   r   r   rT   syscollectionsr   Zvirtualenv.app_datar   Zvirtualenv.discovery.py_infor   Zvirtualenv.infor   Zvirtualenv.util.pathr   Zvirtualenv.util.sixr	   Zvirtualenv.util.subprocessr
   r   r   r   r   r   r   r0   objectr@   ra   Z	___all___r   r   r   r   <module>   s*   

$