U o a*@s4ddlZddlmZddlZddlmZmZmZddl Z ddl m Z m Z m Z ddlZddlmZddlmZzddlmZdd ZWn ek red d ZYnXed d ZGd ddeZGdddeZGdddeZGdddeZdddZd ddZddZGddde Z!Gdddej"Z#dS)!N)contextmanager)dirnameabspathjoin) check_call check_outputSTDOUT)mkdtemp)compatcCs ttdSNz_in_process.py) resourcespath __package__rr\C:\Users\vtejo\AppData\Local\Temp\pip-unpacked-wheel-6mt8ur68\pip\_vendor\pep517\wrappers.py_in_proc_script_pathsrccsttttdVdSr )pjoinrr__file__rrrrrsc cs"t}z |VW5t|XdSN)r shutilrmtree)tdrrrtempdirs rc@seZdZdZddZdS)BackendUnavailablezEWill be raised if the backend cannot be imported in the hook process.cCs ||_dSr tracebackselfrrrr__init__#szBackendUnavailable.__init__N__name__ __module__ __qualname____doc__rrrrrr!src@seZdZdZddZdS)BackendInvalidz)Will be raised if the backend is invalid.cCs||_||_||_dSr backend_name backend_pathmessage)rr'r(r)rrrr)szBackendInvalid.__init__Nr rrrrr%'sr%cs eZdZdZfddZZS) HookMissingz Will be raised on missing hooks.cstt||||_dSr)superr*r hook_name)rr, __class__rrr1szHookMissing.__init__)r!r"r#r$r __classcell__rrr-rr*/sr*c@seZdZdZddZdS)UnsupportedOperationzDMay be raised by build_sdist if the backend indicates that it can't.cCs ||_dSrrrrrrr8szUnsupportedOperation.__init__Nr rrrrr06sr0cCs*tj}|r||t|||ddS)z5The default method of calling the wrapper subprocess.)cwdenvN)osenvironcopyupdatercmdr1 extra_environr2rrrdefault_subprocess_runner<s  r:cCs,tj}|r||t|||tddS)zDA method of calling the wrapper subprocess while suppressing output.)r1r2stderrN)r3r4r5r6rrr7rrrquiet_subprocess_runnerEs  r<cCsntj|rtdtj|}tjtj||}tj|}tj|}tj||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) r3risabs ValueErrorrnormpathrnormcase commonprefix) source_tree requested abs_source abs_requested norm_sourcenorm_requestedrrrnorm_and_checkNs    rHc@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)rH source_dir).0prrr sz-Pep517HookCaller.__init__..)r:rrJ build_backendr(_subprocess_runner)rrJrOr(runnerrrMrrws  zPep517HookCaller.__init__ccs$|j}||_z dVW5||_XdS)z\A context manager for temporarily overriding the default subprocess runner. N)rP)rrQprevrrrsubprocess_runners  z"Pep517HookCaller.subprocess_runnercCs|dd|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_hookrrUrrrrTs z-Pep517HookCaller.get_requires_for_build_wheelTcCs|dt|||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_directoryrU_allow_fallbackrWr)rrZrUr[rrrrYs z1Pep517HookCaller.prepare_metadata_for_build_wheelcCs(|dk rt|}|dt|||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_directoryrUrZ)rrW)rr^rUrZrrrr]s zPep517HookCaller.build_wheelcCs|dd|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_sdistrUrVrXrrrr_s z-Pep517HookCaller.get_requires_for_build_sdistcCs|dt||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_directoryrUr\)rrarUrrrr`szPep517HookCaller.build_sdistc CsVtjddkr|jd}n|j}d|i}|jrbtj|j}tjddkrZ|t}||d<t }d|i}t j |t |dddt &}|jtjt|||g|j|d W5QRXt t |d } | d rt| d d | drt| d d | dr$t|j|j| dd d| dr8t|| dW5QRSQRXdS)NrASCIIPEP517_BUILD_BACKENDPEP517_BACKEND_PATHkwargsz input.json)indent)r1r9z output.json unsupportedr no_backendbackend_invalid backend_errorr& hook_missing return_val)sys version_inforOencoder(r3pathseprgetfilesystemencodingrr write_jsonrrrP executablestrrJ read_jsongetr0rr%r*) rr,rfrOr9r(r hook_inputscriptdatarrrrWsD     zPep517HookCaller._call_hook)NN)N)NT)NN)N)N) r!r"r#r$rrrSrTrYr]r_r`rWrrrrrIfs       rIc@s<eZdZdZddZddZeddZdd 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) threadingThreadrdaemonloggerlevelr3pipefd_readfd_writefdopenreaderstart)rrrrrrrs zLoggerWrapper.__init__cCs|jSr)rrMrrrfileno(szLoggerWrapper.filenocCs|tjr|ddS|S)N)endswithr3linesep)msgrrrremove_newline+szLoggerWrapper.remove_newlinecCs |jD]}|||qdSr)r_writer)rlinerrrrun/s zLoggerWrapper.runcCs|j|j|dSr)rlogr)rr)rrrr3szLoggerWrapper._writeN) r!r"r#r$rr staticmethodrrrrrrrr|s  r|)NN)NN)$r} contextlibrr3os.pathrrrrr subprocessrrrrotempfiler rir importlib.resourcesr r ImportErrorr Exceptionrr%r*r0r:r<rHobjectrIr~r|rrrrs4       0