a
    b3jc                  	   @  sF  U 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	m
Z
 d dlmZmZ d dlmZ ddlmZmZmZ eeZee Zeed	dZd
ed< ddddZddddZddddZddddZ g dZ!e"ddure!#d d%ddddddddddZ$dddd Z%ddd!d"Z&ddd#d$Z'dS )&    )annotationsN)Callable)InvalidSchemeCombinationUserInstallationInvalid)SCHEME_KEYSScheme)running_under_virtualenv   )change_rootget_major_minor_versionis_osx_frameworkZget_preferred_schemezCallable[[str], str] | None_PREFERRED_SCHEME_APIbool)returnc                   C  s   dt v ot  ot S )a  Check for Apple's ``osx_framework_library`` scheme.

    Python distributed by Apple's Command Line Tools has this special scheme
    that's used when:

    * This is a framework build.
    * We are installing into the system prefix.

    This does not account for ``pip install --prefix`` (also means we're not
    installing to the system prefix), which should use ``posix_prefix``, but
    logic here means ``_infer_prefix()`` outputs ``osx_framework_library``. But
    since ``prefix`` is not available for ``sysconfig.get_default_scheme()``,
    which is the stdlib replacement for ``_infer_prefix()``, presumably Apple
    wouldn't be able to magically switch between ``osx_framework_library`` and
    ``posix_prefix``. ``_infer_prefix()`` returning ``osx_framework_library``
    means its behavior is consistent whether we use the stdlib implementation
    or our own, and we deal with this special case in ``get_scheme()`` instead.
    osx_framework_library)_AVAILABLE_SCHEMESr   r    r   r   /www/wwwroot/dpstar/app/297b3aabda72fedb274352021c2dd8b5_venv/lib/python3.9/site-packages/pip/_internal/locations/_sysconfig.py _should_use_osx_framework_prefix!   s
    r   strc                  C  sv   t rt dS t rdS tjj dtj } | tv r6| S tjjtv rJtjjS tj d}|tv rb|S tjtv rrtjS dS )a!  Try to find a prefix scheme for the current platform.

    This tries:

    * A special ``osx_framework_library`` for Python distributed by Apple's
      Command Line Tools, when not running in a virtual environment.
    * Implementation + OS, used by PyPy on Windows (``pypy_nt``).
    * Implementation without OS, used by PyPy on POSIX (``pypy``).
    * OS + "prefix", used by CPython on POSIX (``posix_prefix``).
    * Just the OS name, used by CPython on Windows (``nt``).

    If none of the above works, fall back to ``posix_prefix``.
    prefixr   __prefixposix_prefix)r   r   sysimplementationnameosr   )implementation_suffixedsuffixedr   r   r   _infer_prefix;   s    
r    c                  C  sH   t rt dS t rt sd} ntj d} | tv r6| S dtvrDt dS )z3Try to find a user scheme for the current platform.userosx_framework_user_user
posix_user)r   r   r   r   r   r   r   r   r   r   r   _infer_userZ   s    r&   c                  C  s(   t rt dS tj d} | tv r$| S dS )z,Try to find a home for the current platform.home_home
posix_home)r   r   r   r   r%   r   r   r   _infer_homei   s    r*   )installed_basebaseinstalled_platbaseplatbaser   exec_prefixuserbaseFz
str | Noner   )	dist_namer!   r'   rootisolatedr   r   c                   sh  |rrt dd r$r$t dd dur4t }n|r@t }nt }durZ|dkrZd} durv fddtD }n durfd	dtD }ni }tj||d
}t r|r|dt	j
}	n|dt	j
}	dt  }
tj|	dd|
|d< n| sd} t|d |d tj|d | |d |d d}|durdi }tD ]}t|t||||< q:tf i |}|S )a\  
    Get the "scheme" corresponding to the input parameters.

    :param dist_name: the name of the package to retrieve the scheme for, used
        in the headers scheme path
    :param user: indicates to use the "user" scheme
    :param home: indicates to use the "home" scheme
    :param root: root under which other directories are re-based
    :param isolated: ignored, but kept for distutils compatibility (where
        this controls whether the user-site pydistutils.cfg is honored)
    :param prefix: indicates to use the "prefix" scheme and provides the
        base directory for the same
    z--userz--prefixz--homeNr   r   c                   s   i | ]
}| qS r   r   .0k)r'   r   r   
<dictcomp>       zget_scheme.<locals>.<dictcomp>c                   s   i | ]
}| qS r   r   r4   )r   r   r   r7      r8   )schemevarsr0   r,   pythonincludesiteUNKNOWNplatlibpurelibscriptsdata)r?   r@   headersrA   rB   )r   r*   r&   r    
_HOME_KEYS	sysconfig	get_pathsr   getr   r   r   r   pathjoinr   r   r
   getattr)r1   r!   r'   r2   r3   r   scheme_name	variablespathsr,   	python_xyr9   Zconverted_keyskeyr   )r'   r   r   
get_scheme   sL    


rP   c                   C  s4   t jd d dkr(t jd d dkr(dS t d S )N   darwin   z/System/Library/z/usr/local/binrA   )r   platformr   rE   rF   r   r   r   r   get_bin_prefix   s    $rU   c                   C  s   t  d S )Nr@   rE   rF   r   r   r   r   get_purelib   s    rW   c                   C  s   t  d S )Nr?   rV   r   r   r   r   get_platlib   s    rX   )FNNFN)(
__future__r   loggingr   r   rE   typingr   pip._internal.exceptionsr   r   pip._internal.models.schemer   r   pip._internal.utils.virtualenvr   r,   r
   r   r   	getLogger__name__loggersetget_scheme_namesr   rJ   r   __annotations__r   r    r&   r*   rD   get_config_varappendrP   rU   rW   rX   r   r   r   r   <module>   s<   

     N