3 Re* @s2ddlZddlmZddlZddlmZmZmZddl Z ddl m Z m Z m Z ddlZddlmZddlmZyddljZdd ZWn ek red d ZYnXed d ZGd ddeZGdddeZGdddeZGdddeZdddZd ddZddZGddde Z!Gdddej"Z#dS)!N)contextmanager)dirnameabspathjoin) check_call check_outputSTDOUT)mkdtemp)compatcCs tjtdS)Nz_in_process.py) resourcespath __package__rr/builddir/build/BUILDROOT/alt-python36-pip-20.2.4-5.el9.x86_64/opt/alt/python36/lib/python3.6/site-packages/pip/_vendor/pep517/wrappers.py_in_proc_script_pathsrccsttttdVdS)Nz_in_process.py)pjoinrr__file__rrrrrsc cs"t}z |VWdtj|XdS)N)r shutilrmtree)tdrrrtempdirs rc@seZdZdZddZdS)BackendUnavailablezEWill be raised if the backend cannot be imported in the hook process.cCs ||_dS)N) traceback)selfrrrr__init__#szBackendUnavailable.__init__N)__name__ __module__ __qualname____doc__rrrrrr!src@seZdZdZddZdS)BackendInvalidz)Will be raised if the backend is invalid.cCs||_||_||_dS)N) backend_name backend_pathmessage)rr!r"r#rrrr)szBackendInvalid.__init__N)rrrrrrrrrr 'sr cs eZdZdZfddZZS) HookMissingz Will be raised on missing hooks.cstt|j|||_dS)N)superr$r hook_name)rr&) __class__rrr1szHookMissing.__init__)rrrrr __classcell__rr)r'rr$/sr$c@seZdZdZddZdS)UnsupportedOperationzDMay be raised by build_sdist if the backend indicates that it can't.cCs ||_dS)N)r)rrrrrr8szUnsupportedOperation.__init__N)rrrrrrrrrr)6sr)cCs*tjj}|r|j|t|||ddS)z5The default method of calling the wrapper subprocess.)cwdenvN)osenvironcopyupdater)cmdr* extra_environr+rrrdefault_subprocess_runner<s  r2cCs,tjj}|r|j|t|||tddS)zDA method of calling the wrapper subprocess while suppressing output.)r*r+stderrN)r,r-r.r/rr)r0r*r1r+rrrquiet_subprocess_runnerEs  r4cCsntjj|rtdtjj|}tjjtjj||}tjj|}tjj|}tjj||g|krjtd|S)zNormalise 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,r isabs ValueErrorrnormpathrnormcase commonprefix) source_tree requested abs_source abs_requested norm_sourcenorm_requestedrrrnorm_and_checkNs    r@c@s`eZdZdZdddZeddZdddZdd d Zdd d Z dddZ dddZ ddZ 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|_|_|r2fdd|D}|_|_dS)Ncsg|]}tj|qSr)r@ source_dir).0p)rrr sz-Pep517HookCaller.__init__..)r2rrB build_backendr"_subprocess_runner)rrBrFr"runnerr)rrrws zPep517HookCaller.__init__c cs$|j}||_z dVWd||_XdS)z\A context manager for temporarily overriding the default subprocess runner. N)rG)rrHprevrrrsubprocess_runners  z"Pep517HookCaller.subprocess_runnercCs|jdd|iS)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_wheelconfig_settings) _call_hook)rrLrrrrKs z-Pep517HookCaller.get_requires_for_build_wheelTcCs|jdt|||dS)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_directoryrL_allow_fallback)rMr)rrOrLrPrrrrNs z1Pep517HookCaller.prepare_metadata_for_build_wheelcCs(|dk rt|}|jdt|||dS)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_directoryrLrO)rrM)rrRrLrOrrrrQs zPep517HookCaller.build_wheelcCs|jdd|iS)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_sdistrL)rM)rrLrrrrSs z-Pep517HookCaller.get_requires_for_build_sdistcCs|jdt||dS)zBuild 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_directoryrL)rMr)rrUrLrrrrTszPep517HookCaller.build_sdistc CsJtjddkr|jjd}n|j}d|i}|jrbtjj|j}tjddkrZ|jtj}||d<t }d|i}t j |t |dddt &}|jtjt|||g|j|d WdQRXt jt |d } | jd rt| jd d | jdrt| jd d | jdr$t|j|j| jdd d| jdr8t|| dSQRXdS)NrASCIIPEP517_BUILD_BACKENDPEP517_BACKEND_PATHkwargsz input.json)indent)r*r1z output.json unsupportedr no_backendbackend_invalid backend_error)r!r"r# hook_missing return_val)sys version_inforFencoder"r,pathseprgetfilesystemencodingrr write_jsonrrrG executablestrrB read_jsongetr)rr r$) rr&rZrFr1r"r hook_inputscriptdatarrrrMs>    zPep517HookCaller._call_hook)NN)N)NT)NN)N)N) rrrrrrrJrKrNrQrSrTrMrrrrrAfs      rAc@s<eZdZdZddZddZeddZdd Zd d Z d S) LoggerWrapperzd Read messages from a pipe and redirect them to a logger (see python's logging module). cCsHtjj|d|_||_||_tj\|_|_ tj |j|_ |j dS)NT) threadingThreadrdaemonloggerlevelr,pipefd_readfd_writefdopenreaderstart)rrtrurrrrs zLoggerWrapper.__init__cCs|jS)N)rx)rrrrfileno(szLoggerWrapper.filenocCs|jtjr|ddS|S)Nr )endswithr,linesep)msgrrrremove_newline+szLoggerWrapper.remove_newlinecCs$x|jD]}|j|j|qWdS)N)rz_writer)rlinerrrrun/s zLoggerWrapper.runcCs|jj|j|dS)N)rtlogru)rr#rrrr3szLoggerWrapper._writeN) rrrrrr| staticmethodrrrrrrrrps   rp)NN)NN)$rq contextlibrr,os.pathrrrrr subprocessrrrrctempfiler r]r Zimportlib.resourcesr r ImportErrorr Exceptionrr r$r)r2r4r@objectrArrrprrrrs0       0