Current File : //lib/python3.9/site-packages/pip/_vendor/pep517/__pycache__/wrappers.cpython-39.pyc
a

[��fu4�@s
ddlZddlmZddlZddlmZmZddlZddl	m
Z
mZmZddl
Z
ddlmZddlmZddlmZgd	�Zed
d��ZGdd
�d
e�ZGdd�de�ZGdd�de�ZGdd�de�Zddd�Zddd�Zdd�ZGdd�de�ZGdd�dej �Z!dS) �N)�contextmanager)�abspath�join)�
check_call�check_output�STDOUT)�mkdtemp�)�compat)�_in_proc_script_path)�BackendUnavailable�BackendInvalid�HookMissing�UnsupportedOperation�default_subprocess_runner�quiet_subprocess_runner�Pep517HookCallerc	cs,t�}z|VWt�|�nt�|�0dS�N)r�shutil�rmtree)�td�r�?/usr/lib/python3.9/site-packages/pip/_vendor/pep517/wrappers.py�tempdirsrc@seZdZdZdd�ZdS)rzEWill be raised if the backend cannot be imported in the hook process.cCs
||_dSr��	traceback��selfrrrr�__init__#szBackendUnavailable.__init__N��__name__�
__module__�__qualname__�__doc__rrrrrr!src@seZdZdZdd�ZdS)r
z)Will be raised if the backend is invalid.cCs||_||_||_dSr��backend_name�backend_path�message)rr%r&r'rrrr)szBackendInvalid.__init__Nrrrrrr
'sr
cs eZdZdZ�fdd�Z�ZS)rz Will be raised on missing hooks.cstt|��|�||_dSr)�superrr�	hook_name)rr)��	__class__rrr1szHookMissing.__init__)r r!r"r#r�
__classcell__rrr*rr/src@seZdZdZdd�ZdS)rzDMay be raised by build_sdist if the backend indicates that it can't.cCs
||_dSrrrrrrr8szUnsupportedOperation.__init__Nrrrrrr6srcCs*tj��}|r|�|�t|||d�dS)z5The default method of calling the wrapper subprocess.)�cwd�envN)�os�environ�copy�updater��cmdr-�
extra_environr.rrrr<s

rcCs,tj��}|r|�|�t|||td�dS)zDA method of calling the wrapper subprocess while suppressing output.)r-r.�stderrN)r/r0r1r2rrr3rrrrEs

rcCsntj�|�rtd��tj�|�}tj�tj�||��}tj�|�}tj�|�}tj�||g�|krjtd��|S)z�Normalise and check a backend path.

    Ensure that the requested backend path is specified as a relative path,
    and resolves to a location under the given source tree.

    Return an absolute version of the requested path.
    zpaths must be relativez paths must be inside source tree)	r/�path�isabs�
ValueErrorr�normpathr�normcase�commonprefix)Zsource_treeZ	requestedZ
abs_sourceZ
abs_requestedZnorm_sourceZnorm_requestedrrr�norm_and_checkNsr=c@s�eZdZdZddd�Zedd��Zdd�Zdd	d
�Zddd
�Z	ddd�Z
d dd�Zd!dd�Zd"dd�Z
d#dd�Zd$dd�Zdd�ZdS)%ra�A wrapper around a source directory to be built with a PEP 517 backend.

    :param source_dir: The path to the source directory, containing
        pyproject.toml.
    :param build_backend: The build backend spec, as per PEP 517, from
        pyproject.toml.
    :param backend_path: The backend path, as per PEP 517, from pyproject.toml.
    :param runner: A callable that invokes the wrapper subprocess.
    :param python_executable: The Python executable used to invoke the backend

    The 'runner', if provided, must expect the following:

    - cmd: a list of strings representing the command and arguments to
      execute, as would be passed to e.g. 'subprocess.check_call'.
    - cwd: a string representing the working directory that must be
      used for the subprocess. Corresponds to the provided source_dir.
    - extra_environ: a dict mapping environment variable names to values
      which must be set for the subprocess execution.
    NcsR|durt}t|��_|�_|r2�fdd�|D�}|�_|�_|sHtj}|�_dS)Ncsg|]}t�j|��qSr)r=�
source_dir)�.0�p�rrr�
<listcomp>�sz-Pep517HookCaller.__init__.<locals>.<listcomp>)	rrr>�
build_backendr&�_subprocess_runner�sys�
executable�python_executable)rr>rCr&�runnerrGrrArrzs

�zPep517HookCaller.__init__ccs*|j}||_zdVW||_n||_0dS)z\A context manager for temporarily overriding the default subprocess
        runner.
        N)rD)rrH�prevrrr�subprocess_runner�s
z"Pep517HookCaller.subprocess_runnercCs|�di�S)z>Return the list of optional features supported by the backend.�_supported_features��
_call_hookrArrrrK�sz$Pep517HookCaller._supported_featurescCs|�dd|i�S)aIIdentify packages required for building a wheel

        Returns a list of dependency specifications, e.g.::

            ["wheel >= 0.25", "setuptools"]

        This does not include requirements specified in pyproject.toml.
        It returns the result of calling the equivalently named hook in a
        subprocess.
        �get_requires_for_build_wheel�config_settingsrL�rrOrrrrN�s�z-Pep517HookCaller.get_requires_for_build_wheelTcCs|�dt|�||d��S)auPrepare a ``*.dist-info`` folder with metadata for this project.

        Returns the name of the newly created folder.

        If the build backend defines a hook with this name, it will be called
        in a subprocess. If not, the backend will be asked to build a wheel,
        and the dist-info extracted from that (unless _allow_fallback is
        False).
        � prepare_metadata_for_build_wheel��metadata_directoryrO�_allow_fallback�rMr�rrSrOrTrrrrQ�s
�z1Pep517HookCaller.prepare_metadata_for_build_wheelcCs(|durt|�}|�dt|�||d��S)avBuild a wheel from this project.

        Returns the name of the newly created file.

        In general, this will call the 'build_wheel' hook in the backend.
        However, if that was previously called by
        'prepare_metadata_for_build_wheel', and the same metadata_directory is
        used, the previously built wheel will be copied to wheel_directory.
        N�build_wheel��wheel_directoryrOrS�rrM�rrYrOrSrrrrW�s�zPep517HookCaller.build_wheelcCs|�dd|i�S)aSIdentify packages required for building an editable wheel

        Returns a list of dependency specifications, e.g.::

            ["wheel >= 0.25", "setuptools"]

        This does not include requirements specified in pyproject.toml.
        It returns the result of calling the equivalently named hook in a
        subprocess.
        �get_requires_for_build_editablerOrLrPrrrr\�s�z0Pep517HookCaller.get_requires_for_build_editablecCs|�dt|�||d��S)aPrepare a ``*.dist-info`` folder with metadata for this project.

        Returns the name of the newly created folder.

        If the build backend defines a hook with this name, it will be called
        in a subprocess. If not, the backend will be asked to build an editable
        wheel, and the dist-info extracted from that (unless _allow_fallback is
        False).
        �#prepare_metadata_for_build_editablerRrUrVrrrr]�s
�z4Pep517HookCaller.prepare_metadata_for_build_editablecCs(|durt|�}|�dt|�||d��S)a�Build an editable wheel from this project.

        Returns the name of the newly created file.

        In general, this will call the 'build_editable' hook in the backend.
        However, if that was previously called by
        'prepare_metadata_for_build_editable', and the same metadata_directory
        is used, the previously built wheel will be copied to wheel_directory.
        N�build_editablerXrZr[rrrr^�s�zPep517HookCaller.build_editablecCs|�dd|i�S)a>Identify packages required for building a wheel

        Returns a list of dependency specifications, e.g.::

            ["setuptools >= 26"]

        This does not include requirements specified in pyproject.toml.
        It returns the result of calling the equivalently named hook in a
        subprocess.
        �get_requires_for_build_sdistrOrLrPrrrr_s�z-Pep517HookCaller.get_requires_for_build_sdistcCs|�dt|�|d��S)z�Build an sdist from this project.

        Returns the name of the newly created file.

        This calls the 'build_sdist' backend hook in a subprocess.
        �build_sdist)�sdist_directoryrOrU)rrarOrrrr`s�zPep517HookCaller.build_sdistc	Cs�tjddkr|j�d�}n|j}d|i}|jrbtj�|j�}tjddkrZ|�t���}||d<t	���}d|i}t
j|t|d�dd�t
��8}|j}	|j|	tt|��||g|j|d	�Wd�n1s�0Yt
�t|d
��}
|
�d��rt|
�dd
���|
�d��r t|
�dd
���|
�d��rFt|j|j|
�dd
�d��|
�d��rft|
�d��pb|��|
dWd�S1�s�0YdS)Nr��ASCIIZPEP517_BUILD_BACKENDZPEP517_BACKEND_PATH�kwargsz
input.json)�indent)r-r5zoutput.jsonZunsupportedr�Z
no_backendZbackend_invalidZ
backend_errorr$Zhook_missingZmissing_hook_nameZ
return_val)rE�version_inforC�encoder&r/�pathsepr�getfilesystemencodingrr
Z
write_json�pjoinrrGrDr�strr>Z	read_json�getrrr
r)rr)rdrCr5r&rZ
hook_inputZscriptZpython�datarrrrM&sF
��$
�zPep517HookCaller._call_hook)NNN)N)NT)NN)N)NT)NN)N)N)r r!r"r#rrrJrKrNrQrWr\r]r^r_r`rMrrrrrfs2�


�
�

�
�


rc@s<eZdZdZdd�Zdd�Zedd��Zdd	�Zd
d�Z	dS)
�
LoggerWrapperzd
    Read messages from a pipe and redirect them
    to a logger (see python's logging module).
    cCsHtj�|�d|_||_||_t��\|_|_	t�
|j�|_|��dS)NT)
�	threading�Threadr�daemon�logger�levelr/�pipeZfd_read�fd_write�fdopen�reader�start)rrsrtrrrr^szLoggerWrapper.__init__cCs|jSr)rvrArrr�filenokszLoggerWrapper.filenocCs|�tj�r|dd�S|S)N���)�endswithr/�linesep)�msgrrr�remove_newlinenszLoggerWrapper.remove_newlinecCs |jD]}|�|�|��qdSr)rx�_writer)r�linerrr�runrs
zLoggerWrapper.runcCs|j�|j|�dSr)rs�logrt)rr'rrrr�vszLoggerWrapper._writeN)
r r!r"r#rrz�staticmethodrr�r�rrrrroXs

ro)NN)NN)"rp�
contextlibrr/Zos.pathrrrkr�
subprocessrrrrEZtempfilerrfr
Z
in_processr�__all__r�	Exceptionrr
rrrrr=�objectrrqrorrrr�<module>s,

	
	s