o
    ñ‘Oj?%  ã                   @   sH  d 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mZmZ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 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)m*Z* er€ddl+m,Z, e -e.¡Z/G dd„ dƒZ0de1fdd„Z2G dd„ dƒZ3G dd„ de3ƒZ4dS )z;Build Environment used for isolation during sdist building
é    N)ÚOrderedDict)Ú	get_paths)ÚTracebackType)ÚTYPE_CHECKINGÚIterableÚListÚOptionalÚSetÚTupleÚType)Úwhere)ÚRequirement)ÚVersion)Ú__file__)Úopen_spinner)Úget_platlibÚget_prefixed_libsÚget_purelib)Úget_default_environmentÚget_environment)Úcall_subprocess)ÚTempDirectoryÚtempdir_kinds)ÚPackageFinderc                   @   s   e Zd Zdeddfdd„ZdS )Ú_PrefixÚpathÚreturnNc                 C   s@   || _ d| _ttjdkrdnd||dœd�d | _t|ƒ| _d S )NFÚntÚposix_prefix)ÚbaseÚplatbase)ÚvarsÚscripts)r   Úsetupr   ÚosÚnameÚbin_dirr   Úlib_dirs)Úselfr   © r)   ú]/var/www/html/pharmsmart-cdr-gen/venv/lib/python3.10/site-packages/pip/_internal/build_env.pyÚ__init__    s   þýz_Prefix.__init__)Ú__name__Ú
__module__Ú__qualname__Ústrr+   r)   r)   r)   r*   r      s    r   r   c                  C   s.   t  t¡ ¡ j} |  ¡ st| ƒS t | d ¡S )z¸Get 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)	ÚpathlibÚPathÚpip_locationÚresolveÚparentÚis_dirr/   r$   Úfsdecode)Úsourcer)   r)   r*   Ú_get_runnable_pip*   s   r8   c                   @   sÈ   e Zd ZdZddd„Zddd„Zdeee  d	ee d
ee	 ddfdd„Z
dee deeeeef  ee f fdd„Zdddee dededdf
dd„Zededddee dededdfdd„ƒZdS )ÚBuildEnvironmentzACreates and manages an isolated environment to install build depsr   Nc                    s  t tjdd�‰ t‡ fdd„dD ƒƒ| _g | _g | _tt| j 	¡ ƒƒD ]}| j 
|j¡ | j |j¡ q"dd„ tƒ tƒ fD ƒ}tj ˆ jd¡| _tj | j¡sTt | j¡ ttj | jd	¡d
dd��}| t d¡j|| jd�¡ W d   ƒ d S 1 s{w   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)r?   Úsiter)   r)   r*   Ú	<setcomp>N   s    ÿz,BuildEnvironment.__init__.<locals>.<setcomp>rF   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)
                )Úsystem_sitesr'   )r   r   Ú	BUILD_ENVr   Ú	_prefixesÚ	_bin_dirsÚ	_lib_dirsÚreversedÚlistÚvaluesÚappendr&   Úextendr'   r   r   r$   r   r=   Ú	_site_dirÚexistsÚmkdirÚopenÚwriteÚtextwrapÚdedentÚformat)r(   ÚprefixrJ   Úfpr)   r@   r*   r+   =   s6   
þ
ÿÿÿçÿ"ý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<   )r$   ÚenvironÚgetr>   r)   r)   r*   Ú
<dictcomp>u   s    ÿÿz.BuildEnvironment.__enter__.<locals>.<dictcomp>)ÚPATHÚPYTHONNOUSERSITEÚ
PYTHONPATHra   Ú1)
Ú	_save_envrM   rS   Úsplitr$   ÚpathseprT   r^   Úupdater=   )r(   r   Úold_pathÚ
pythonpathr)   r)   r*   Ú	__enter__t   s   þ


ýÿzBuildEnvironment.__enter__Úexc_typeÚexc_valÚexc_tbc                 C   s:   | j  ¡ D ]\}}|d u rtj |d ¡ q|tj|< qd S r<   )re   Úitemsr$   r^   Úpop)r(   rl   rm   rn   ÚvarnameÚ	old_valuer)   r)   r*   Ú__exit__‰   s
   üzBuildEnvironment.__exit__Úreqsc           	      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 )	zŽReturn 2 sets:
        - conflicting requirements: set of (installed, wanted) reqs tuples
        - missing requirements: set of reqs
        rN   NÚextraÚ z==z===T)Úprereleases)ÚsetÚhasattrr   rN   r   r   ÚmarkerÚevaluateÚget_distributionr%   ÚaddÚ
isinstanceÚversionr   Ú	specifierÚcontains)	r(   rt   ÚmissingÚconflictingÚenvÚreq_strÚreqÚdistÚinstalled_req_strr)   r)   r*   Úcheck_requirements•   s,   ÿý
€z#BuildEnvironment.check_requirementsÚfinderr   ÚrequirementsÚprefix_as_stringr:   c                C   s<   | j | }|jr
J ‚d|_|sd S | jtƒ ||||d� d S )NT)r:   )rL   r#   Ú_install_requirementsr8   )r(   rŠ   r‹   rŒ   r:   r\   r)   r)   r*   Úinstall_requirements·   s   


ûz%BuildEnvironment.install_requirementsÚpip_runnabler\   c                C   st  t j| dddd|jdg}t ¡ tjkr| d¡ dD ]}t|j	|ƒ}| 
d| d	d
¡ d t|p2dhƒ¡f¡ q|j}|rW| 
d|d g¡ |dd … D ]	}	| 
d|	g¡ qLn| d¡ |jD ]	}
| 
d|
g¡ q_|jD ]	}| 
d|g¡ ql|jr~| d¡ |jr†| d¡ | d¡ | 
|¡ dtƒ i}td|› �ƒ�}t|d|› �||d� W d   ƒ d S 1 s³w   Y  d S )NÚinstallz--ignore-installedz	--no-userz--prefixz--no-warn-script-locationz-v)Ú	no_binaryÚonly_binaryz--Ú_ú-ú,z:none:z-ir   é   z--extra-index-urlz
--no-indexz--find-linksz--trusted-hostz--prez--prefer-binaryÚ_PIP_STANDALONE_CERTzInstalling zpip subprocess to install )Úcommand_descÚspinnerÚextra_environ)ÚsysÚ
executabler   ÚloggerÚgetEffectiveLevelÚloggingÚDEBUGrR   ÚgetattrÚformat_controlrS   Úreplacer=   ÚsortedÚ
index_urlsÚ
find_linksÚtrusted_hostsÚallow_all_prereleasesÚprefer_binaryr   r   r   )r�   rŠ   r‹   r\   r:   Úargsr¢   Úformatsr¥   Úextra_indexÚlinkÚhostrš   r™   r)   r)   r*   r�   Ì   sX   
ø

þÿÿ







ü"ÿz&BuildEnvironment._install_requirements©r   N)r,   r-   r.   Ú__doc__r+   rk   r   r   ÚBaseExceptionr   rs   r   r/   r
   r	   r‰   rŽ   Ústaticmethodr   r�   r)   r)   r)   r*   r9   :   sV    

7
þýü
ûÿ
þ"þýüú
ùÿþýüúùr9   c                
   @   sz   e Zd ZdZddd„Zddd„Zdeee  d	ee d
ee	 ddfdd„Z
ddd„Zdddee dededdf
dd„ZdS )ÚNoOpBuildEnvironmentz0A no-op drop-in replacement for BuildEnvironmentr   Nc                 C   ó   d S r<   r)   ©r(   r)   r)   r*   r+   	  ó   zNoOpBuildEnvironment.__init__c                 C   r´   r<   r)   rµ   r)   r)   r*   rk     r¶   zNoOpBuildEnvironment.__enter__rl   rm   rn   c                 C   r´   r<   r)   )r(   rl   rm   rn   r)   r)   r*   rs     s   zNoOpBuildEnvironment.__exit__c                 C   r´   r<   r)   rµ   r)   r)   r*   Úcleanup  r¶   zNoOpBuildEnvironment.cleanuprŠ   r   r‹   rŒ   r:   c                C   s   t ƒ ‚r<   )ÚNotImplementedError)r(   rŠ   r‹   rŒ   r:   r)   r)   r*   rŽ     s   z)NoOpBuildEnvironment.install_requirementsr¯   )r,   r-   r.   r°   r+   rk   r   r   r±   r   rs   r·   r   r/   rŽ   r)   r)   r)   r*   r³     s2    


þýü
û
þýüúùr³   )5r°   rŸ   r$   r0   r›   rY   Úcollectionsr   Ú	sysconfigr   Útypesr   Útypingr   r   r   r   r	   r
   r   Úpip._vendor.certifir   Ú"pip._vendor.packaging.requirementsr   Úpip._vendor.packaging.versionr   Úpipr   r2   Úpip._internal.cli.spinnersr   Úpip._internal.locationsr   r   r   Úpip._internal.metadatar   r   Úpip._internal.utils.subprocessr   Úpip._internal.utils.temp_dirr   r   Ú"pip._internal.index.package_finderr   Ú	getLoggerr,   r�   r   r/   r8   r9   r³   r)   r)   r)   r*   Ú<module>   s6    $
 M