o
    ­—Žjú  ã                   @  s®   d dl m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 d dlmZmZmZ d dlmZmZ erHd d	lmZ ddd„ZG dd„ deƒZdS )é    )ÚannotationsN)ÚOrderedDict)ÚIterable)ÚTracebackType)ÚTYPE_CHECKING)ÚBuildEnvironmentÚBuildEnvironmentInstallerÚPrefix)ÚTempDirectoryÚtempdir_kinds)ÚInstallRequirementÚreturnúset[str]c                  C  s   t  ¡ } dd„ | D ƒS )z9Get system site packages, as a normalized set of strings.c                 S  s   h | ]}t j |¡’qS © )ÚosÚpathÚnormcase)Ú.0r   r   r   ú\/var/www/kodo/Anonymous/send/lib/python3.10/site-packages/pip/_internal/build_env/virtual.pyÚ	<setcomp>   s    z*get_system_sitepackages.<locals>.<setcomp>)ÚsiteÚgetsitepackages)Úsystem_sitesr   r   r   Úget_system_sitepackages   s   r   c                   @  s>   e Zd ZdZddd„Zddd	„Zddd„Zddœd dd„ZdS )!ÚVirtualBuildEnvironmenta  Legacy build environment implementation.

    Patches sys.path and uses sitecustomize.py to isolate Python processes. It has
    known bugs and weird edge cases, but it exists as a fallback for platforms where
    the venv module is unavailable or dysfunctional.
    Ú	installerr   r   ÚNonec                   s  t j| _|| _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¡sSt | j¡ ttj | jd¡dd	d
��}| t d¡j|| j
d�¡ W d   ƒ d S 1 szw   Y  d S )NT)ÚkindÚglobally_managedc                 3  s(   � | ]}|t tj ˆ j|¡ƒfV  qd S ©N)r	   r   r   Újoin©r   Úname©Útemp_dirr   r   Ú	<genexpr>*   s
   € ÿ
ÿz3VirtualBuildEnvironment.__init__.<locals>.<genexpr>)ÚnormalÚoverlayr   zsitecustomize.pyÚwzutf-8)ÚencodingaÖ  
                import os, site, sys

                # First, discover all system-sites related paths.
                original_sys_path = sys.path[:]
                # Clear sys.path so addsitedir() will add system site paths and paths
                # added by contained .pth files to sys.path reliably. This is necessary
                # since Python 3.15, which notably no longer re-executes .pth files for
                # known paths.
                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)

                # Drop discovered system-sites related paths.
                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   Úlib_dirs)ÚsysÚ
executableÚpython_executabler   r
   r   Ú	BUILD_ENVr   Ú	_prefixesÚ	_bin_dirsr*   ÚreversedÚlistÚvaluesÚappendÚbin_dirÚextendr   r   r   r    Ú	_site_dirÚexistsÚmkdirÚopenÚwriteÚtextwrapÚdedentÚformat)Úselfr   Úprefixr   Úfpr   r#   r   Ú__init__%   s.   
þÿ
å"ýz VirtualBuildEnvironment.__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>^   s    ÿÿz5VirtualBuildEnvironment.__enter__.<locals>.<dictcomp>)ÚPATHÚPYTHONNOUSERSITEÚ
PYTHONPATHrF   Ú1)
Ú	_save_envr0   r6   Úsplitr   Úpathsepr7   rC   Úupdater    )r?   r   Úold_pathÚ
pythonpathr   r   r   Ú	__enter__]   s   þ


ýÿz!VirtualBuildEnvironment.__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   )rJ   Úitemsr   rC   Úpop)r?   rQ   rS   rU   ÚvarnameÚ	old_valuer   r   r   Ú__exit__r   s
   üz VirtualBuildEnvironment.__exit__N)Úfor_reqÚrequirementsúIterable[str]Úprefix_as_stringÚstrr   r\   úInstallRequirement | Nonec                C  s:   | j | }|jr
J ‚d|_|sd S | jj||||d� d S )NT)r   r\   )r/   Úsetupr   Úinstall)r?   r]   r_   r   r\   r@   r   r   r   Úinstall_requirements~   s   

z,VirtualBuildEnvironment.install_requirements)r   r   r   r   )r   r   )rQ   rR   rS   rT   rU   rV   r   r   )
r]   r^   r_   r`   r   r`   r\   ra   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rB   rP   r[   rd   r   r   r   r   r      s    

8
úr   )r   r   )Ú
__future__r   r   r   r+   r<   Úcollectionsr   Úcollections.abcr   Útypesr   Útypingr   Úpip._internal.build_env.baser   r   r	   Úpip._internal.utils.temp_dirr
   r   Úpip._internal.req.req_installr   r   r   r   r   r   r   Ú<module>   s    
