o
    LK&h                     @  s   U d dl mZ d dlZd dlZd dlZd dlmZmZmZ d dl	m
Z
 er+d dlmZ eeeje f Zded< edeeeje f d	Zd
d ZdddZdddZdddZejdd ZdS )    )annotationsN)TYPE_CHECKINGTypeVarUnion)unique_everseen)	TypeAliasr   StrPathStrPathT)boundc                 C  s   t j| }t j|dd dS )z1Ensure that the parent directory of `path` existsT)exist_okN)ospathdirnamemakedirs)r   r    r   C/var/www/html/venv/lib/python3.10/site-packages/setuptools/_path.pyensure_directory   s   r   p1p2returnboolc                 C  s   t | t |kS )a  Differs from os.path.samefile because it does not require paths to exist.
    Purely string based (no comparison between i-nodes).
    >>> same_path("a/b", "./a/b")
    True
    >>> same_path("a/b", "a/./b")
    True
    >>> same_path("a/b", "././a/b")
    True
    >>> same_path("a/b", "./a/b/c/..")
    True
    >>> same_path("a/b", "../a/b/c")
    False
    >>> same_path("a", "a/b")
    False
    )normpath)r   r   r   r   r   	same_path   s   r   filenamec                 C  s   t jdkrtj| S | S )a  
    Contrary to POSIX 2008, on Cygwin, getcwd (3) contains
    symlink components. Using
    os.path.abspath() works around this limitation. A fix in os.getcwd()
    would probably better, in Cygwin even more so, except
    that this seems to be by design...
    cygwin)sysplatformr   r   abspathr   r   r   r   _cygwin_patch*   s   r   strc                 C  s    t jt jt jt| S )z2Normalize a file/dir name for comparison purposes.)r   r   normcaserealpathr   r   r   r   r   r   r   5   s    r   c              
   c  s    t  }tjd|}tjdd}z4tjt| }td||g}tj|}|r/|tjd< dV  W ||u r@tjdd dS |tjd< dS ||u rStjdd w |tjd< w )a  
    Add the indicated paths to the head of the PYTHONPATH environment
    variable so that subprocesses will also see the packages at
    these paths.

    Do this in a context that restores the value on exit.

    >>> getfixture('monkeypatch').setenv('PYTHONPATH', 'anything')
    >>> with paths_on_pythonpath(['foo', 'bar']):
    ...     assert 'foo' in os.environ['PYTHONPATH']
    ...     assert 'anything' in os.environ['PYTHONPATH']
    >>> os.environ['PYTHONPATH']
    'anything'

    >>> getfixture('monkeypatch').delenv('PYTHONPATH')
    >>> with paths_on_pythonpath(['foo', 'bar']):
    ...     assert 'foo' in os.environ['PYTHONPATH']
    >>> os.environ.get('PYTHONPATH')
    
PYTHONPATH N)	objectr   environgetpathsepjoinr   filterpop)pathsnothingorig_pythonpathcurrent_pythonpathprefixto_joinnew_pathr   r   r   paths_on_pythonpath:   s"   
r3   )r   r   r   r   r   r   )r   r   )r   r   r   r    )
__future__r   
contextlibr   r   typingr   r   r   more_itertoolsr   typing_extensionsr   r    PathLiker   __annotations__r	   r   r   r   r   contextmanagerr3   r   r   r   r   <module>   s     


