def _generate_metadata(self): # type: () -> str """Invokes metadata generator functions, with the required arguments. """ if not self.use_pep517: assert self.unpacked_source_directory if not self._check_setup_py_or_cfg_exists(): raise InstallationError( f'File "setup.py" or "setup.cfg" not found for legacy ' f'project {self}.') return generate_metadata_legacy( build_env=self.build_env, setup_py_path=self.setup_py_path, source_dir=self.unpacked_source_directory, isolated=self.isolated, details=self.name or f"from {self.link}") assert self.pep517_backend is not None return generate_metadata( build_env=self.build_env, backend=self.pep517_backend, )
def _generate_metadata(self): # type: () -> str """Invokes metadata generator functions, with the required arguments. """ if not self.use_pep517: assert self.unpacked_source_directory return generate_metadata_legacy( build_env=self.build_env, setup_py_path=self.setup_py_path, source_dir=self.unpacked_source_directory, isolated=self.isolated, details=self.name or "from {}".format(self.link), ) assert self.pep517_backend is not None return generate_metadata(build_env=self.build_env, backend=self.pep517_backend)
def prepare_metadata(self) -> None: """Ensure that project metadata is available. Under PEP 517 and PEP 660, call the backend hook to prepare the metadata. Under legacy processing, call setup.py egg-info. """ assert self.source_dir details = self.name or f"from {self.link}" if self.use_pep517: assert self.pep517_backend is not None if ( self.editable and self.permit_editable_wheels and self.supports_pyproject_editable() ): self.metadata_directory = generate_editable_metadata( build_env=self.build_env, backend=self.pep517_backend, details=details, ) else: self.metadata_directory = generate_metadata( build_env=self.build_env, backend=self.pep517_backend, details=details, ) else: self.metadata_directory = generate_metadata_legacy( build_env=self.build_env, setup_py_path=self.setup_py_path, source_dir=self.unpacked_source_directory, isolated=self.isolated, details=details, ) # Act on the newly generated metadata, based on the name and version. if not self.name: self._set_requirement() else: self.warn_on_mismatching_name() self.assert_source_matches_version()
def _generate_editable_metadata(self) -> str: """Invokes metadata generator functions, with the required arguments.""" if self.use_pep517: assert self.pep517_backend is not None try: metadata_directory = generate_editable_metadata( build_env=self.build_env, backend=self.pep517_backend, ) except HookMissing as e: self.supports_pyproject_editable = False if not os.path.exists( self.setup_py_path) and not os.path.exists( self.setup_cfg_path): raise InstallationError( f"Project {self} has a 'pyproject.toml' and its build " f"backend is missing the {e} hook. Since it does not " f"have a 'setup.py' nor a 'setup.cfg', " f"it cannot be installed in editable mode. " f"Consider using a build backend that supports PEP 660." ) # At this point we have determined that the build_editable hook # is missing, and there is a setup.py or setup.cfg # so we fallback to the legacy metadata generation logger.info("Build backend does not support editables, " "falling back to setup.py egg_info.") else: self.supports_pyproject_editable = True return metadata_directory elif not os.path.exists(self.setup_py_path) and not os.path.exists( self.setup_cfg_path): raise InstallationError( f"File 'setup.py' or 'setup.cfg' not found " f"for legacy project {self}. " f"It cannot be installed in editable mode.") return generate_metadata_legacy( build_env=self.build_env, setup_py_path=self.setup_py_path, source_dir=self.unpacked_source_directory, isolated=self.isolated, details=self.name or f"from {self.link}", )
def _generate_metadata(self) -> str: """Invokes metadata generator functions, with the required arguments.""" if self.use_pep517: assert self.pep517_backend is not None try: return generate_metadata( build_env=self.build_env, backend=self.pep517_backend, ) except HookMissing as e: raise InstallationError( f"Project {self} has a pyproject.toml but its build " f"backend is missing the required {e} hook.") elif not os.path.exists(self.setup_py_path): raise InstallationError( f"File 'setup.py' not found for legacy project {self}.") return generate_metadata_legacy( build_env=self.build_env, setup_py_path=self.setup_py_path, source_dir=self.unpacked_source_directory, isolated=self.isolated, details=self.name or f"from {self.link}", )