o
    Uh.-                     @  s  d Z ddlmZ ddlZddl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 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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rddl)m*Z* ddl+m,Z, e-e.Z/d)ddZ0G dd dZ1d*ddZ2d+dd Z3G d!d" d"eZ4G d#d$ d$Z5G d%d& d&Z6G d'd( d(e6Z7dS ),z:Build Environment used for isolation during sdist building    )annotationsN)OrderedDict)Iterable)TracebackType)TYPE_CHECKINGProtocol)Version)__file__)open_spinner)get_platlibget_purelib
get_scheme)get_default_environmentget_environment)VERBOSE)get_requirement)call_subprocess)TempDirectorytempdir_kinds)PackageFinder)InstallRequirementastrbreturntuple[str] | tuple[str, str]c                 C  s   | |kr| |fS | fS N )r   r   r   r   _/var/www/html/figdemos/bartoux_crm/venv/lib/python3.10/site-packages/pip/_internal/build_env.py_dedup"   s   r   c                   @  s   e Zd ZdddZdS )	_Prefixpathr   r   Nonec                 C  s4   || _ d| _td|d}|j| _t|j|j| _d S )NF )prefix)	r!   setupr   Zscriptsbin_dirr   ZpurelibZplatliblib_dirs)selfr!   Zschemer   r   r   __init__'   s
   z_Prefix.__init__N)r!   r   r   r"   )__name__
__module____qualname__r)   r   r   r   r   r    &   s    r    c                  C  s.   t t j} |  st| S t| d S )zGet a file to pass to a Python executable, to run the currently-running pip.

    This is used to run a pip subprocess, for installing requirements into the build
    environment.
    z__pip-runner__.py)	pathlibZPathpip_locationresolveparentis_dirr   osfsdecode)sourcer   r   r   get_runnable_pip/   s   r5   set[str]c                  C  s.   t tdr
t } nt t g} dd | D S )zGet system site packages

    Usually from site.getsitepackages,
    but fallback on `get_purelib()/get_platlib()` if unavailable
    (e.g. in a virtualenv created by virtualenv<20)

    Returns normalized set of strings.
    getsitepackagesc                 S  s   h | ]}t j|qS r   )r2   r!   normcase).0r!   r   r   r   	<setcomp>P   s    z+_get_system_sitepackages.<locals>.<setcomp>)hasattrsiter7   r   r   )system_sitesr   r   r   _get_system_sitepackages?   s   
	
r>   c                   @  s   e Zd ZdZdddZdS )BuildEnvironmentInstallerz]
    Interface for installing build dependencies into an isolated build
    environment.
    requirementsIterable[str]r$   r    kindr   for_reqInstallRequirement | Noner   r"   c                C     d S r   r   )r(   r@   r$   rB   rC   r   r   r   installY   s   z!BuildEnvironmentInstaller.installN
r@   rA   r$   r    rB   r   rC   rD   r   r"   )r*   r+   r,   __doc__rF   r   r   r   r   r?   S   s    r?   c                   @  s$   e Zd ZdZdddZdddZdS )#SubprocessBuildEnvironmentInstallerzD
    Install build dependencies by calling pip in a subprocess.
    finderr   r   r"   c                 C  s
   || _ d S r   )rJ   )r(   rJ   r   r   r   r)   h   s   
z,SubprocessBuildEnvironmentInstaller.__init__r@   rA   r$   r    rB   r   rC   rD   c                C  s  | j }tjt dddd|jddddd	g}t tjkr!|	d
 nt t
kr,|	d dD ]}t|j|}|d|dd dt|pFdhf q.|j}	|	rk|d|	d g |	dd  D ]	}
|d|
g q`n|	d |jD ]	}|d|g qs|jr|d|jg |jD ]	}|d|g q|jr|d|jg |jr|d|jg |jr|	d |jr|	d |	d || td| }t|d| |d  W d    d S 1 sw   Y  d S )!NrF   z--ignore-installedz	--no-userz--prefixz--no-warn-script-locationz--disable-pip-version-checkz--no-compilez--targetr#   z-vvz-v)Z	no_binaryZonly_binaryz--_-,z:none:z-ir      z--extra-index-urlz
--no-indexz--find-linksz--proxyz--trusted-hostz--certz--client-certz--prez--prefer-binaryzInstalling zpip subprocess to install )Zcommand_descspinner)rJ   sys
executabler5   r!   loggergetEffectiveLevelloggingDEBUGappendr   getattrformat_controlextendreplacejoinsorted
index_urlsZ
find_linksproxyZtrusted_hostsZcustom_certZclient_certZallow_all_prereleasesZprefer_binaryr
   r   )r(   r@   r$   rB   rC   rJ   argsrX   Zformatsr]   Zextra_indexlinkZhostrO   r   r   r   rF   k   sn   







"z+SubprocessBuildEnvironmentInstaller.installN)rJ   r   r   r"   rG   )r*   r+   r,   rH   r)   rF   r   r   r   r   rI   c   s    
rI   c                   @  sH   e Zd ZdZd!ddZd"dd	Zd#ddZd$ddZddd%dd ZdS )&BuildEnvironmentzACreates and manages an isolated environment to install build deps	installerr?   r   r"   c                   s   || _ ttjdd t fdddD | _g | _g | _tt	| j
 D ]}| j|j | j|j q%t }tj jd| _tj| jsOt| j ttj| jddd	d
}|tdj|| jd W d    d S 1 svw   Y  d S )NT)rB   Zglobally_managedc                 3  s(    | ]}|t tj j|fV  qd S r   )r    r2   r!   r[   r9   nameZtemp_dirr   r   	<genexpr>   s
    
z,BuildEnvironment.__init__.<locals>.<genexpr>)ZnormalZoverlayr<   zsitecustomize.pywzutf-8)encodinga  
                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)
                )r=   r'   )rb   r   r   Z	BUILD_ENVr   	_prefixes	_bin_dirs	_lib_dirsreversedlistvaluesrV   r&   rY   r'   r>   r2   r!   r[   	_site_direxistsmkdiropenwritetextwrapdedentformat)r(   rb   r$   r=   fpr   re   r   r)      s4   
"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 r   )r2   environgetrc   r   r   r   
<dictcomp>   s    z.BuildEnvironment.__enter__.<locals>.<dictcomp>)PATHZPYTHONNOUSERSITEZ
PYTHONPATHr{   1)
	_save_envrj   rY   splitr2   pathsepro   rx   updater[   )r(   r!   Zold_pathZ
pythonpathr   r   r   	__enter__   s   


zBuildEnvironment.__enter__exc_typetype[BaseException] | Noneexc_valBaseException | Noneexc_tbTracebackType | Nonec                 C  s:   | j  D ]\}}|d u rtj|d  q|tj|< qd S r   )r}   itemsr2   rx   pop)r(   r   r   r   Zvarname	old_valuer   r   r   __exit__  s
   zBuildEnvironment.__exit__reqsrA   %tuple[set[tuple[str, str]], set[str]]c           	      C  s   t  }t  }|rct| drt| jnt }|D ]K}t|}|jdur+|jddis+q||j	}|s9|
| qt|jtrI|j	 d|j }n	|j	 d|j }|jj|jddsb|
||f q||fS )	zReturn 2 sets:
        - conflicting requirements: set of (installed, wanted) reqs tuples
        - missing requirements: set of reqs
        rk   Nextrar#   z==z===T)Zprereleases)setr;   r   rk   r   r   ZmarkerZevaluateZget_distributionrd   add
isinstanceversionr   Z	specifiercontains)	r(   r   missingZconflictingenvZreq_strZreqdistZinstalled_req_strr   r   r   check_requirements  s,   
z#BuildEnvironment.check_requirementsNrC   r@   prefix_as_stringr   rB   rC   rD   c                C  s:   | j | }|jr
J d|_|sd S | jj||||d d S )NT)rB   rC   )ri   r%   rb   rF   )r(   r@   r   rB   rC   r$   r   r   r   install_requirements1  s   

z%BuildEnvironment.install_requirements)rb   r?   r   r"   r   r"   r   r   r   r   r   r   r   r"   )r   rA   r   r   
r@   rA   r   r   rB   r   rC   rD   r   r"   )	r*   r+   r,   rH   r)   r   r   r   r   r   r   r   r   ra      s    

7

(ra   c                   @  sH   e Zd ZdZdddZdddZdddZdddZdddddZdS ) NoOpBuildEnvironmentz0A no-op drop-in replacement for BuildEnvironmentr   r"   c                 C  rE   r   r   r(   r   r   r   r)   D     zNoOpBuildEnvironment.__init__c                 C  rE   r   r   r   r   r   r   r   G  r   zNoOpBuildEnvironment.__enter__r   r   r   r   r   r   c                 C  rE   r   r   )r(   r   r   r   r   r   r   r   J  s   zNoOpBuildEnvironment.__exit__c                 C  rE   r   r   r   r   r   r   cleanupR  r   zNoOpBuildEnvironment.cleanupNr   r@   rA   r   r   rB   rC   rD   c                C  s   t  r   )NotImplementedError)r(   r@   r   rB   rC   r   r   r   r   U  s   z)NoOpBuildEnvironment.install_requirementsr   r   r   )	r*   r+   r,   rH   r)   r   r   r   r   r   r   r   r   r   A  s    



	r   )r   r   r   r   r   r   )r   r   )r   r6   )8rH   
__future__r   rT   r2   r-   r<   rP   rt   collectionsr   collections.abcr   typesr   typingr   r   Zpip._vendor.packaging.versionr   pipr	   r.   Zpip._internal.cli.spinnersr
   Zpip._internal.locationsr   r   r   pip._internal.metadatar   r   Zpip._internal.utils.loggingr   Zpip._internal.utils.packagingr   Zpip._internal.utils.subprocessr   Zpip._internal.utils.temp_dirr   r   Z"pip._internal.index.package_finderr   Zpip._internal.req.req_installr   	getLoggerr*   rR   r   r    r5   r>   r?   rI   ra   r   r   r   r   r   <module>   sD    


	
Q 