U
    +|j«%  ã                   @   sT  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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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#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ƒZ0ej1ee2 dœdd„ƒZ3G dd„ dƒZ4G dd„ de4ƒZ5dS )z;Build Environment used for isolation during sdist building
é    N)ÚOrderedDict)Ú	get_paths)ÚTracebackType)ÚTYPE_CHECKINGÚIterableÚIteratorÚListÚOptionalÚSetÚTupleÚType)Úwhere)ÚRequirementÚVersionConflictÚ
WorkingSet)Ú__file__)Úopen_spinner)Úget_platlibÚget_prefixed_libsÚget_purelib)Úcall_subprocess)ÚTempDirectoryÚtempdir_kinds)ÚPackageFinderc                   @   s   e Zd Zdd„ ZdS )Ú_Prefixc                 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)ÚpathÚsetupr   ÚosÚnameÚbin_dirr   Úlib_dirs)Úselfr!   © r(   ú_C:\Users\snmko\Desktop\web_content\django_cbt\venv\Lib\site-packages\pip/_internal/build_env.pyÚ__init__!   s    þýz_Prefix.__init__N)Ú__name__Ú
__module__Ú__qualname__r*   r(   r(   r(   r)   r      s   r   )Úreturnc               
   c   s¬   t  t¡ ¡ j} |  ¡ s2| jjdkr2t| ƒV  dS tdd��f}t	j
 |j
d¡}t |d¡�.}|  d¡D ]}| || | j¡ ¡ ¡ qfW 5 Q R X t	j
 |d¡V  W 5 Q R X dS )z·Create a "standalone pip" zip file.

    The zip file's content is identical to the currently-running pip.
    It will be used to install requirements into the build environment.
    z__env_pip__.zipNzstandalone-pip)ÚkindÚwÚ*Úpip)ÚpathlibÚPathÚpip_locationÚresolveÚparentÚis_dirr$   Ústrr   r#   r!   ÚjoinÚzipfileÚZipFileÚrglobÚwriteÚrelative_toÚas_posix)ÚsourceÚtmp_dirÚpip_zipÚzfÚchildr(   r(   r)   Ú_create_standalone_pip,   s    
$rF   c                   @   sX   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Ze	e
dee
 ee
ddœ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ƒ tƒ fD ƒ}tj ˆ jd¡| _tj | j¡s¨t | j¡ ttj | jd	¡d
ƒ�"}| t d¡j|| jd�¡ W 5 Q R X d S )NT)r/   Úglobally_managedc                 3   s&   | ]}|t tj ˆ j|¡ƒfV  qd S ©N)r   r#   r!   r:   ©Ú.0r$   ©Útemp_dirr(   r)   Ú	<genexpr>M   s   ÿz,BuildEnvironment.__init__.<locals>.<genexpr>)ÚnormalÚoverlayc                 S   s   h | ]}t j |¡’qS r(   )r#   r!   Únormcase)rK   Úsiter(   r(   r)   Ú	<setcomp>[   s    z,BuildEnvironment.__init__.<locals>.<setcomp>rR   zsitecustomize.pyr0   aŸ  
                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Úopenr>   ÚtextwrapÚdedentÚformat)r'   ÚprefixrT   Úfpr(   rL   r)   r*   G   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 rI   )r#   ÚenvironÚgetrJ   r(   r(   r)   Ú
<dictcomp>   s   ÿ z.BuildEnvironment.__enter__.<locals>.<dictcomp>)ÚPATHÚPYTHONNOUSERSITEÚ
PYTHONPATHrj   Ú1)
Ú	_save_envrW   r]   Úsplitr#   Úpathsepr^   rg   Úupdater:   )r'   r!   Úold_pathÚ
pythonpathr(   r(   r)   Ú	__enter__}   s    þ


ýzBuildEnvironment.__enter__c                 C   s:   | j  ¡ D ]*\}}|d kr*tj |d ¡ q
|tj|< q
d S rI   )rn   Úitemsr#   rg   Úpop)r'   Úexc_typeÚexc_valÚexc_tbÚvarnameÚ	old_valuer(   r(   r)   Ú__exit__‘   s    zBuildEnvironment.__exit__c                 C   s˜   t ƒ }t ƒ }|r�t| jƒ}|D ]p}z"| t |¡¡dkrB| |¡ W q tk
rŒ } z*| t|j	d  
¡ ƒt|j	d ƒf¡ W 5 d}~X Y qX q||fS )z–Return 2 sets:
            - conflicting requirements: set of (installed, wanted) reqs tuples
            - missing requirements: set of reqs
        Nr   é   )Úsetr   rX   Úfindr   ÚparseÚaddr   r9   ÚargsÚas_requirement)r'   ÚreqsÚmissingÚconflictingÚwsÚreqÚer(   r(   r)   Úcheck_requirementsž   s    
ÿz#BuildEnvironment.check_requirementsc              	   C   sp   | j | }|jrt‚d|_|s"d S t ¡ �<}tjdk rDtj 	t
¡}n| tƒ ¡}|  |||||¡ W 5 Q R X d S )NT)é   é   )rV   r"   ÚAssertionErrorÚ
contextlibÚ	ExitStackÚsysÚversion_infor#   r!   Údirnamer5   Úenter_contextrF   Ú_install_requirements)r'   ÚfinderÚrequirementsÚprefix_as_stringÚmessagere   ÚctxÚpip_runnabler(   r(   r)   Úinstall_requirements±   s     



ûz%BuildEnvironment.install_requirementsr   N)rš   r•   r–   re   r˜   r.   c              	   C   sR  t j| dddd|jdg}t ¡ tjkr0| d¡ dD ]:}t|j	|ƒ}| 
d| d	d
¡ d t|pddhƒ¡f¡ q4|j}|r®| 
d|d g¡ |dd … D ]}	| 
d|	g¡ q˜n
| d¡ |jD ]}
| 
d|
g¡ q¾|jD ]}| 
d|g¡ qØ|jrü| d¡ |j�r| d¡ | d¡ | 
|¡ dtƒ i}t|ƒ�}t|||d� W 5 Q R X d S )NÚinstallz--ignore-installedz	--no-userz--prefixz--no-warn-script-locationz-v)Ú	no_binaryÚonly_binaryz--Ú_ú-ú,z:none:z-ir   r}   z--extra-index-urlz
--no-indexz--find-linksz--trusted-hostz--prez--prefer-binaryÚ_PIP_STANDALONE_CERT)ÚspinnerÚextra_environ)r�   Ú
executabler!   ÚloggerÚgetEffectiveLevelÚloggingÚDEBUGr\   ÚgetattrÚformat_controlr]   Úreplacer:   ÚsortedÚ
index_urlsÚ
find_linksÚtrusted_hostsÚallow_all_prereleasesÚprefer_binaryr   r   r   )rš   r•   r–   re   r˜   r‚   r«   Úformatsr®   Úextra_indexÚlinkÚhostr¤   r£   r(   r(   r)   r”   Ï   sF    	     ý
ÿ








z&BuildEnvironment._install_requirements)r+   r,   r-   Ú__doc__r*   rt   r|   rŠ   r›   Ústaticmethodr9   r   r   r”   r(   r(   r(   r)   rG   C   s   6úrG   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 rI   r(   ©r'   r(   r(   r)   r*   þ   s    zNoOpBuildEnvironment.__init__c                 C   s   d S rI   r(   rº   r(   r(   r)   rt     s    zNoOpBuildEnvironment.__enter__c                 C   s   d S rI   r(   )r'   rw   rx   ry   r(   r(   r)   r|     s    zNoOpBuildEnvironment.__exit__c                 C   s   d S rI   r(   rº   r(   r(   r)   Úcleanup  s    zNoOpBuildEnvironment.cleanupc                 C   s
   t ƒ ‚d S rI   )ÚNotImplementedError)r'   r•   r–   r—   r˜   r(   r(   r)   r›     s    z)NoOpBuildEnvironment.install_requirementsN)	r+   r,   r-   r·   r*   rt   r|   r»   r›   r(   r(   r(   r)   r¹   ú   s   	r¹   )6r·   rŽ   r¨   r#   r3   r�   rb   r;   Úcollectionsr   Ú	sysconfigr   Útypesr   Útypingr   r   r   r   r	   r
   r   r   Úpip._vendor.certifir   Úpip._vendor.pkg_resourcesr   r   r   r2   r   r5   Úpip._internal.cli.spinnersr   Úpip._internal.locationsr   r   r   Úpip._internal.utils.subprocessr   Úpip._internal.utils.temp_dirr   r   Ú"pip._internal.index.package_finderr   Ú	getLoggerr+   r¦   r   Úcontextmanagerr9   rF   rG   r¹   r(   r(   r(   r)   Ú<module>   s6   (
 8