U ��.eg)�@s ddlZddlmZddlZddlmZmZmZddl Z ddl m Z m Z m Z ddlZddlmZddlmZeeee��d�Zed d ��ZGd d �d e�ZGd d�de�ZGdd�de�ZGdd�de�Zddd�Zddd�Zdd�ZGdd�de�ZGdd�dej �Z!dS)�N)�contextmanager)�dirname�abspath�join)� check_call� check_output�STDOUT)�mkdtemp�)�compatz_in_process.pyc cs"t�}z |VW5t�|�XdS�N)r �shutilZrmtree)�td�r�?/usr/lib/python3.8/site-packages/pip/_vendor/pep517/wrappers.py�tempdirs rc@seZdZdZdd�ZdS)�BackendUnavailablezEWill be raised if the backend cannot be imported in the hook process.cCs ||_dSr �� traceback��selfrrrr�__init__szBackendUnavailable.__init__N��__name__� __module__� __qualname__�__doc__rrrrrrsrc@seZdZdZdd�ZdS)�BackendInvalidz)Will be raised if the backend is invalid.cCs||_||_||_dSr �� backend_name� backend_path�message)rrr r!rrrr szBackendInvalid.__init__Nrrrrrrsrcs eZdZdZ�fdd�Z�ZS)� HookMissingz Will be raised on missing hooks.cstt|��|�||_dSr )�superr"r� hook_name)rr$�� __class__rrr(szHookMissing.__init__)rrrrr� __classcell__rrr%rr"&sr"c@seZdZdZdd�ZdS)�UnsupportedOperationzDMay be raised by build_sdist if the backend indicates that it can't.cCs ||_dSr rrrrrr/szUnsupportedOperation.__init__Nrrrrrr(-sr(cCs*tj��}|r|�|�t|||d�dS)z5The default method of calling the wrapper subprocess.)�cwd�envN)�os�environ�copy�updater��cmdr)� extra_environr*rrr�default_subprocess_runner3s  r2cCs,tj��}|r|�|�t|||td�dS)zDA method of calling the wrapper subprocess while suppressing output.)r)r*�stderrN)r+r,r-r.rrr/rrr�quiet_subprocess_runner<s  r4cCsntj�|�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)Z source_treeZ requestedZ abs_sourceZ abs_requestedZ norm_sourceZnorm_requestedrrr�norm_and_checkEs    r;c@s`eZdZdZddd�Zedd��Zddd�Zdd d �Zdd d �Z ddd�Z ddd�Z dd�Z dS)�Pep517HookCalleraeA wrapper around a source directory to be built with a PEP 517 backend. source_dir : The path to the source directory, containing pyproject.toml. build_backend : The build backend spec, as per PEP 517, from pyproject.toml. backend_path : The backend path, as per PEP 517, from pyproject.toml. runner : A callable that invokes the wrapper subprocess. 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. NcsB|dkr t}t|��_|�_|r2�fdd�|D�}|�_|�_dS)Ncsg|]}t�j|��qSr)r;� source_dir)�.0�p�rrr� {sz-Pep517HookCaller.__init__..)r2rr=� build_backendr �_subprocess_runner)rr=rBr �runnerrr@rrns  �zPep517HookCaller.__init__ccs|j}||_dV||_dS)z\A context manager for temporarily overriding the default subprocess runner. N)rC)rrD�prevrrr�subprocess_runner�sz"Pep517HookCaller.subprocess_runnercCs|�dd|i�S)aGIdentify 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_settings�� _call_hook�rrHrrrrG�s �z-Pep517HookCaller.get_requires_for_build_wheelTcCs|�dt|�||d��S)aqPrepare 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_directoryrH�_allow_fallback�rJr)rrMrHrNrrrrL�s �z1Pep517HookCaller.prepare_metadata_for_build_wheelcCs(|dk rt|�}|�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_directoryrHrM)rrJ)rrQrHrMrrrrP�s �zPep517HookCaller.build_wheelcCs|�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_sdistrHrIrKrrrrR�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_directoryrHrO)rrTrHrrrrS�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�|j tjt||g|j|d �t �t |d ��}|�d �r�t|�d d ���|�d�r�t|�d d ���|�d��rt|j|j|�dd �d��|�d��r"t|��|dW5QR�SQRXdS)Nr��ASCIIZPEP517_BUILD_BACKENDZPEP517_BACKEND_PATH�kwargsz input.json)�indent)r)r1z output.jsonZ unsupportedr�Z no_backendZbackend_invalidZ backend_errorrZ hook_missingZ return_val)�sys� version_inforB�encoder r+�pathsepr�getfilesystemencodingrr Z write_json�pjoinrC� executable�_in_proc_scriptr=Z read_json�getr(rrr") rr$rWrBr1r rZ hook_input�datarrrrJ�sB� �    � zPep517HookCaller._call_hook)NN)N)NT)NN)N)N) rrrrrrrFrGrLrPrRrSrJrrrrr<]s �  � �   r<c@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�ThreadrZdaemon�logger�levelr+�pipeZfd_read�fd_write�fdopen�reader�start)rrgrhrrrrs zLoggerWrapper.__init__cCs|jSr )rjr@rrr�filenoszLoggerWrapper.filenocCs|�tj�r|dd�S|S)N�����)�endswithr+�linesep)�msgrrr�remove_newline!szLoggerWrapper.remove_newlinecCs |jD]}|�|�|��qdSr )rl�_writers)r�linerrr�run%s zLoggerWrapper.runcCs|j�|j|�dSr )rg�logrh)rr!rrrrt)szLoggerWrapper._writeN) rrrrrrn� staticmethodrsrvrtrrrrrd s  rd)NN)NN)"re� contextlibrr+Zos.pathrrrr_r � subprocessrrrrZZtempfiler rYr �__file__rar� Exceptionrrr"r(r2r4r;�objectr<rfrdrrrr�s*     /