o
    {ŸŽi¯(  ã                   @   sb  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 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+m,Z, erˆddl-m.Z. e /e0¡Z1G dd„ dƒZ2ej3dee4 fdd„ƒZ5G dd„ dƒZ6G dd„ de6ƒZ7d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)ÚVersion)Ú__file__)Úopen_spinner)Úget_platlibÚget_prefixed_libsÚget_purelib)Úget_environment)Ú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(   úaC:\Users\psant\Downloads\Anu Raj Backend\school\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} |  ¡ st| ƒV  dS tdd��R}tj	 
|j	d¡}i }tjdkr-d|d< tj|dfi |¤Ž�}|  d	¡D ]}| || | j¡ ¡ ¡ q=W d  ƒ n1 sVw   Y  tj	 
|d
¡V  W d  ƒ dS 1 snw   Y  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.
    Nzstandalone-pip)Úkindz__env_pip__.zip)é   é   FÚstrict_timestampsÚwÚ*Úpip)ÚpathlibÚPathÚpip_locationÚresolveÚparentÚis_dirÚstrr   r#   r!   ÚjoinÚsysÚversion_infoÚzipfileÚZipFileÚrglobÚwriteÚrelative_toÚas_posix)ÚsourceÚtmp_dirÚpip_zipÚkwargsÚzfÚchildr(   r(   r)   Ú_create_standalone_pip.   s"   €

ÿÿ"ørL   c                   @   sb   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Ze	de
dddee
 dede
ddf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¡ q"dd„ tƒ tƒ fD ƒ}tj ˆ jd¡| _tj | j¡sTt | j¡ ttj | jd	¡d
ƒ�}| t d¡j|| jd�¡ W d   ƒ d S 1 syw   Y  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>R   s
   € ÿ
ÿz,BuildEnvironment.__init__.<locals>.<genexpr>)ÚnormalÚoverlayc                 S   s   h | ]}t j |¡’qS r(   )r#   r!   Únormcase)rQ   Úsiter(   r(   r)   Ú	<setcomp>`   s    ÿz,BuildEnvironment.__init__.<locals>.<setcomp>rX   zsitecustomize.pyr3   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ÚopenrC   ÚtextwrapÚdedentÚformat)r'   ÚprefixrZ   Úfpr(   rR   r)   r*   L   s0   ÿ
þ
ÿÿ
ç"ÿ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 rO   )r#   ÚenvironÚgetrP   r(   r(   r)   Ú
<dictcomp>„   s    ÿÿz.BuildEnvironment.__enter__.<locals>.<dictcomp>)ÚPATHÚPYTHONNOUSERSITEÚ
PYTHONPATHrp   Ú1)
Ú	_save_envr]   rc   Úsplitr#   Úpathseprd   rm   Úupdater=   )r'   r!   Úold_pathÚ
pythonpathr(   r(   r)   Ú	__enter__‚   s   þ


ýzBuildEnvironment.__enter__c                 C   s:   | j  ¡ D ]\}}|d u rtj |d ¡ q|tj|< qd S rO   )rt   Úitemsr#   rm   Úpop)r'   Úexc_typeÚexc_valÚexc_tbÚvarnameÚ	old_valuer(   r(   r)   Ú__exit__–   s
   üzBuildEnvironment.__exit__c           	      C   sœ   t ƒ }t ƒ }|rJt| jƒ}|D ]:}t|ƒ}| |j¡}|s#| |¡ qt|jt	ƒr3|j› d|j› �}n	|j› d|j› �}|j|j
vrI| ||f¡ q||fS )z–Return 2 sets:
            - conflicting requirements: set of (installed, wanted) reqs tuples
            - missing requirements: set of reqs
        z==z===N)Úsetr   r^   r   Úget_distributionr$   ÚaddÚ
isinstanceÚversionr   Ú	specifier)	r'   ÚreqsÚmissingÚconflictingÚenvÚreq_strÚreqÚdistÚinstalled_req_strr(   r(   r)   Úcheck_requirements£   s"   

€z#BuildEnvironment.check_requirementsc                 C   s†   | j | }|jr
J ‚d|_|sd S t ¡ �$}tjdk r"tj t	¡}n| 
tƒ ¡}|  |||||¡ W d   ƒ d S 1 s<w   Y  d S )NT)r0   é   )r\   r"   Ú
contextlibÚ	ExitStackr>   r?   r#   r!   Údirnamer8   Úenter_contextrL   Ú_install_requirements)r'   ÚfinderÚrequirementsÚprefix_as_stringÚmessagerk   ÚctxÚpip_runnabler(   r(   r)   Úinstall_requirements¼   s"   



û"÷z%BuildEnvironment.install_requirementsr�   r˜   r   r™   rk   r›   r.   Nc                 C   sd  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}|rV| 
d|d g¡ |dd … D ]}	| 
d|	g¡ qL| d¡ |jD ]	}
| 
d|
g¡ q^|jD ]	}| 
d|g¡ qk|jr}| d¡ |jr…| d¡ | d¡ | 
|¡ dtƒ i}t|ƒ�}t|||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_CERT)ÚspinnerÚextra_environ)r>   Ú
executabler!   ÚloggerÚgetEffectiveLevelÚloggingÚDEBUGrb   ÚgetattrÚformat_controlrc   Úreplacer=   ÚsortedÚ
index_urlsÚ
find_linksÚtrusted_hostsÚallow_all_prereleasesÚprefer_binaryr   r   r   )r�   r˜   r™   rk   r›   Úargsr¯   Úformatsr²   Úextra_indexÚlinkÚhostr¨   r§   r(   r(   r)   r—   Ú   s>   	
ý
ÿ








"ÿz&BuildEnvironment._install_requirements)r+   r,   r-   Ú__doc__r*   rz   r‚   r‘   rž   Ústaticmethodr<   r   r   r—   r(   r(   r(   r)   rM   H   s*    6ÿþýüûúrM   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   ó   d S rO   r(   ©r'   r(   r(   r)   r*   	  ó   zNoOpBuildEnvironment.__init__c                 C   r¿   rO   r(   rÀ   r(   r(   r)   rz     rÁ   zNoOpBuildEnvironment.__enter__c                 C   r¿   rO   r(   )r'   r}   r~   r   r(   r(   r)   r‚     s   zNoOpBuildEnvironment.__exit__c                 C   r¿   rO   r(   rÀ   r(   r(   r)   Úcleanup  rÁ   zNoOpBuildEnvironment.cleanupc                 C   s   t ƒ ‚rO   )ÚNotImplementedError)r'   r˜   r™   rš   r›   r(   r(   r)   rž     s   z)NoOpBuildEnvironment.install_requirementsN)	r+   r,   r-   r¼   r*   rz   r‚   rÂ   rž   r(   r(   r(   r)   r¾     s    	r¾   )8r¼   r“   r¬   r#   r6   r>   rh   r@   Úcollectionsr   Ú	sysconfigr   Útypesr   Útypingr   r   r   r   r	   r
   r   r   Úpip._vendor.certifir   Z"pip._vendor.packaging.requirementsr   Zpip._vendor.packaging.versionr   r5   r   r8   Úpip._internal.cli.spinnersr   Úpip._internal.locationsr   r   r   Úpip._internal.metadatar   Úpip._internal.utils.subprocessr   Úpip._internal.utils.temp_dirr   r   Ú"pip._internal.index.package_finderr   Ú	getLoggerr+   rª   r   Úcontextmanagerr<   rL   rM   r¾   r(   r(   r(   r)   Ú<module>   s<    (
 >