a
    e0h                     @   s  d 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mZ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 erddlmZ ddlmZmZm Z m!Z!m"Z"m#Z# ddl$m%Z% e&e'Z(G dd dZ)G dd de*Z+G dd de+Z,dS )z;Build Environment used for isolation during sdist building
    N)OrderedDict)get_python_lib)	get_paths)RequirementVersionConflict
WorkingSet)__file__)open_spinner)call_subprocess)TempDirectorytempdir_kinds)MYPY_CHECK_RUNNING)TracebackType)IterableListOptionalSetTupleType)PackageFinderc                   @   s   e Zd Zdd ZdS )_Prefixc                 C   sj   || _ d| _ttjdkrdnd||ddd | _td|d}td|d}||kr\|g| _n
||g| _d S )	NFntposix_prefix)baseplatbase)varsscripts)plat_specificprefixT)pathsetupr   osnamebin_dirr   lib_dirs)selfr   purelibplatlib r(   E/var/www/auris/lib/python3.9/site-packages/pip/_internal/build_env.py__init__   s    
z_Prefix.__init__N)__name__
__module____qualname__r*   r(   r(   r(   r)   r      s   r   c                   @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )BuildEnvironmentzFCreates and manages an isolated environment to install build deps
    c                    s  t tjdd t fdddD | _g | _g | _tt| j	 D ] }| j
|j | j|j qDdd tdd	tdd	fD }tj jd
| _tj| jst| j ttj| jdd,}|tdj|| jd W d    n1 s0    Y  d S )NT)kindglobally_managedc                 3   s&   | ]}|t tj j|fV  qd S N)r   r!   r   join.0r"   temp_dirr(   r)   	<genexpr>;   s   z,BuildEnvironment.__init__.<locals>.<genexpr>)normaloverlayc                 S   s   h | ]}t j|qS r(   )r!   r   normcase)r4   siter(   r(   r)   	<setcomp>I   s   z,BuildEnvironment.__init__.<locals>.<setcomp>F)r   r;   zsitecustomize.pywa  
                import os, site, sys

                # First, drop system-sites related paths.
                original_sys_path = sys.path[:]
                known_paths = set()
                for path in {system_sites!r}:
                    site.addsitedir(path, known_paths=known_paths)
                system_paths = set(
                    os.path.normcase(path)
                    for path in sys.path[len(original_sys_path):]
                )
                original_sys_path = [
                    path for path in original_sys_path
                    if os.path.normcase(path) not in system_paths
                ]
                sys.path = original_sys_path

                # Second, add lib directories.
                # ensuring .pth file are processed.
                for path in {lib_dirs!r}:
                    assert not path in sys.path
                    site.addsitedir(path)
                )system_sitesr$   )r   r   	BUILD_ENVr   	_prefixes	_bin_dirs	_lib_dirsreversedlistvaluesappendr#   extendr$   r   r!   r   r2   	_site_direxistsmkdiropenwritetextwrapdedentformat)r%   r   r>   fpr(   r5   r)   r*   5   s2    
zBuildEnvironment.__init__c                 C   sn   dd dD | _ | jd d  }| j d }|r>||tj | jg}tjtj	|dtj	|d d S )Nc                 S   s   i | ]}|t j|d qS r1   )r!   environgetr3   r(   r(   r)   
<dictcomp>p   s   z.BuildEnvironment.__enter__.<locals>.<dictcomp>)PATHPYTHONNOUSERSITE
PYTHONPATHrT   1)
	_save_envrA   rG   splitr!   pathseprH   rQ   updater2   )r%   r   old_path
pythonpathr(   r(   r)   	__enter__n   s    


zBuildEnvironment.__enter__c                 C   s:   | j  D ]*\}}|d u r*tj|d  q
|tj|< q
d S r1   )rX   itemsr!   rQ   pop)r%   exc_typeexc_valexc_tbvarname	old_valuer(   r(   r)   __exit__   s    zBuildEnvironment.__exit__c                 C   s   t  }t  }|rt| j}|D ]r}z"|t|du rB|| W q ty } z2|t|j	d 
 t|j	d f W Y d}~qd}~0 0 q||fS )zReturn 2 sets:
            - conflicting requirements: set of (installed, wanted) reqs tuples
            - missing requirements: set of reqs
        Nr      )setr   rB   findr   parseaddr   strargsas_requirement)r%   reqsmissingconflictingwsreqer(   r(   r)   check_requirements   s    
z#BuildEnvironment.check_requirementsc                 C   s  | j | }|jrJ d|_|s"d S tjtjtdddd|jdg}t	 t
jkrZ|d dD ]:}t|j|}|d	|d
d dt|pdhf q^|j}	|	r|d|	d g |	dd  D ]}
|d|
g qn
|d |jD ]}|d|g q|jD ]}|d|g q|jr*|d |jr<|d |d	 || t|}t||d W d    n1 s|0    Y  d S )NTinstallz--ignore-installedz	--no-userz--prefixz--no-warn-script-locationz-v)	no_binaryonly_binaryz--_-,z:none:z-ir   rg   z--extra-index-urlz
--no-indexz--find-linksz--trusted-hostz--prez--prefer-binary)spinner)r@   r    sys
executabler!   r   dirnamepip_locationloggergetEffectiveLevelloggingDEBUGrF   getattrformat_controlrG   replacer2   sorted
index_urls
find_linkstrusted_hostsallow_all_prereleasesprefer_binaryr	   r
   )r%   finderrequirementsprefix_as_stringmessager   rm   r   formatsr   extra_indexlinkhostr|   r(   r(   r)   install_requirements   sD    











z%BuildEnvironment.install_requirementsN)	r+   r,   r-   __doc__r*   r^   rf   ru   r   r(   r(   r(   r)   r.   1   s   9r.   c                   @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )NoOpBuildEnvironmentz5A no-op drop-in replacement for BuildEnvironment
    c                 C   s   d S r1   r(   r%   r(   r(   r)   r*      s    zNoOpBuildEnvironment.__init__c                 C   s   d S r1   r(   r   r(   r(   r)   r^      s    zNoOpBuildEnvironment.__enter__c                 C   s   d S r1   r(   )r%   ra   rb   rc   r(   r(   r)   rf      s    zNoOpBuildEnvironment.__exit__c                 C   s   d S r1   r(   r   r(   r(   r)   cleanup   s    zNoOpBuildEnvironment.cleanupc                 C   s
   t  d S r1   )NotImplementedError)r%   r   r   r   r   r(   r(   r)   r      s    z)NoOpBuildEnvironment.install_requirementsN)	r+   r,   r-   r   r*   r^   rf   r   r   r(   r(   r(   r)   r      s   	r   )-r   r   r!   r}   rM   collectionsr   distutils.sysconfigr   	sysconfigr   Zpip._vendor.pkg_resourcesr   r   r   pipr   r   pip._internal.cli.spinnersr	   pip._internal.utils.subprocessr
   pip._internal.utils.temp_dirr   r   pip._internal.utils.typingr   typesr   typingr   r   r   r   r   r   "pip._internal.index.package_finderr   	getLoggerr+   r   r   objectr.   r   r(   r(   r(   r)   <module>   s,    
 !