o
    Wi                     @  s   d dl m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 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 eeZG dd deZdgZ dS )    )annotationsN)copy)TYPE_CHECKING)
PythonInfo)handle_store_python)ProcessCallFailedError)
ensure_dir)run_cmd   )ViaGlobalRefApiViaGlobalRefMeta)is_mac_os_framework)CPython3macOsBrew)Pypy3Windows)Any)VirtualEnvOptionsc                      s   e Zd Zd! fddZd" fd
dZed#ddZd$ fddZd$ddZd$ddZ	d$ddZ
d%ddZd$ fddZd&dd Z  ZS )'Venvoptionsr   interpreterr   returnNonec                   s>   |j | _ t || t }||u o|j|jk| _d | _d S N)	describesuper__init__r   current
executablesystem_executablecan_be_inline_context)selfr   r   r   	__class__ Y/home/ubuntu/.local/lib/python3.10/site-packages/virtualenv/create/via_global_ref/venv.pyr      s
   
zVenv.__init__list[tuple[str, Any]]c                   s&   t   | jrd| jjjfg S g  S )Nr   )r   _argsr   r"   __name__)r    r!   r#   r$   r&   #   s   &z
Venv._argsViaGlobalRefMeta | Nonec                 C  sJ   |j r#t|rt|S t }|jdkrt||}t|r!d|_|S d S )Nwin32zEmacOS framework builds do not support copy-based virtual environments)	has_venvr   can_describe
setup_metar   platformr   r   
copy_error)clsr   metar#   r#   r$   
can_create&   s   



zVenv.can_createc                   sX   | j r|   n|   | jD ]}t| q| jd ur!| j|  t   | 	  d S r   )
r   create_inlinecreate_via_sub_processlibsr   r   install_venv_shared_libsr   create!executables_for_win_pypy_less_v37)r    libr!   r#   r$   r6   3   s   




zVenv.createc                 C  sB   | j }t|tr|jr|| jD ]}||| j qdS dS dS )zPyPy <= 3.6 (v7.3.3) for Windows contains only pypy3.exe and pypy3w.exe Venv does not handle non-existing exe sources, e.g. python.exe, so this patch does it.N)r   
isinstancer   less_v37executablesr   runsymlinks)r    creatorexer#   r#   r$   r7   ?   s   z&Venv.executables_for_win_pypy_less_v37c                 C  s4   ddl m} || jd| jdd}|t| j d S )Nr   )
EnvBuilderF)system_site_packagesclearr=   with_pip)venvr@   enable_system_site_packager=   r6   strdest)r    r@   builderr#   r#   r$   r2   F   s   zVenv.create_inlinec                 C  sB   |   }tdd| t|\}}}|dkrt||||d S )Nz)using host built-in venv to create via %s r   )get_host_create_cmdLOGGERinfojoinr	   r   )r    cmdcodeouterrr#   r#   r$   r3   Q   s   zVenv.create_via_sub_process	list[str]c                 C  sB   | j jdddg}| jr|d || jrdndt| jf |S )Nz-mrD   z--without-pipz--system-site-packagesz
--symlinksz--copies)r   r   rE   appendextendr=   rF   rG   )r    rN   r#   r#   r$   rJ   X   s
   
zVenv.get_host_create_cmdc                   s(   t | j }t   | j| d S r   )r   	pyenv_cfgrefreshr   set_pyenv_cfgupdate)r    venv_contentr!   r#   r$   rW   _   s   
zVenv.set_pyenv_cfgitemrF   objectc                 C  sH   t | d}|d urt||rt||}t|r|dkr|S t | |S )Nr   script)r[   __getattribute__hasattrgetattrcallable)r    rZ   r   elementr#   r#   r$   r]   e   s   
zVenv.__getattribute__)r   r   r   r   r   r   )r   r%   )r   r   r   r(   )r   r   )r   rR   )rZ   rF   r   r[   )r'   
__module____qualname__r   r&   classmethodr1   r6   r7   r2   r3   rJ   rW   r]   __classcell__r#   r#   r!   r$   r      s    



r   )!
__future__r   loggingr   typingr   python_discoveryr   &virtualenv.create.via_global_ref.storer   virtualenv.util.errorr   virtualenv.util.pathr   virtualenv.util.subprocessr	   apir   r   builtin.cpython.commonr   builtin.cpython.mac_osr   builtin.pypy.pypy3r   r   virtualenv.config.cli.parserr   	getLoggerr'   rK   r   __all__r#   r#   r#   r$   <module>   s(    
T