From 015214acb82ef59eca71aa53e8dd13734f49adbe Mon Sep 17 00:00:00 2001 From: Benedikt Reinartz Date: Mon, 30 Nov 2020 15:14:32 +0100 Subject: [PATCH] Add build-system.requires entries to dev-dependencies --- poetry/core/factory.py | 7 +++++- poetry/core/packages/__init__.py | 37 +++++++++++++++++++++++--------- poetry/core/pyproject/tables.py | 10 ++++++--- 3 files changed, 40 insertions(+), 14 deletions(-) diff --git a/poetry/core/factory.py b/poetry/core/factory.py index d248dbb74..7843e4add 100644 --- a/poetry/core/factory.py +++ b/poetry/core/factory.py @@ -31,7 +31,8 @@ def create_poetry( self, cwd=None, with_dev=True ): # type: (Optional[Path]. bool) -> Poetry poetry_file = self.locate(cwd) - local_config = PyProjectTOML(path=poetry_file).poetry_config + config = PyProjectTOML(path=poetry_file) + local_config = config.poetry_config # Checking validity check_result = self.validate(local_config) @@ -114,6 +115,10 @@ def create_poetry( ) ) + if with_dev: + for dep in config.build_system.dependencies: + package.add_dependency(dep) + extras = local_config.get("extras", {}) for extra_name, requirements in extras.items(): package.extras[extra_name] = [] diff --git a/poetry/core/packages/__init__.py b/poetry/core/packages/__init__.py index f0819ebdc..a944c25f5 100644 --- a/poetry/core/packages/__init__.py +++ b/poetry/core/packages/__init__.py @@ -34,6 +34,7 @@ def _make_file_or_dir_dep( path, # type: Path base=None, # type: Optional[Path] extras=None, # type: Optional[List[str]] + category="main", # type: str ): # type: (...) -> Optional[Union[FileDependency, DirectoryDependency]] """ Helper function to create a file or directoru dependency with the given arguments. If @@ -45,15 +46,17 @@ def _make_file_or_dir_dep( _path = Path(base) / path if _path.is_file(): - return FileDependency(name, path, base=base, extras=extras) + return FileDependency(name, path, base=base, extras=extras, category=category) elif _path.is_dir(): - return DirectoryDependency(name, path, base=base, extras=extras) + return DirectoryDependency( + name, path, base=base, extras=extras, category=category + ) return None def dependency_from_pep_508( - name, relative_to=None + name, relative_to=None, category="main" ): # type: (str, Optional[Path]) -> Dependency """ Resolve a PEP-508 requirement string to a `Dependency` instance. If a `relative_to` @@ -124,30 +127,44 @@ def dependency_from_pep_508( if link.scheme.startswith("git+"): url = ParsedUrl.parse(link.url) - dep = VCSDependency(name, "git", url.url, rev=url.rev, extras=req.extras) + dep = VCSDependency( + name, "git", url.url, rev=url.rev, extras=req.extras, category=category + ) elif link.scheme == "git": dep = VCSDependency( - name, "git", link.url_without_fragment, extras=req.extras + name, + "git", + link.url_without_fragment, + extras=req.extras, + category=category, ) elif link.scheme in ["http", "https"]: - dep = URLDependency(name, link.url) + dep = URLDependency(name, link.url, category=category) elif is_file_uri: # handle RFC 8089 references path = url_to_path(req.url) dep = _make_file_or_dir_dep( - name=name, path=path, base=relative_to, extras=req.extras + name=name, + path=path, + base=relative_to, + extras=req.extras, + category=category, ) else: try: # this is a local path not using the file URI scheme dep = _make_file_or_dir_dep( - name=name, path=Path(req.url), base=relative_to, extras=req.extras, + name=name, + path=Path(req.url), + base=relative_to, + extras=req.extras, + category=category, ) except ValueError: pass if dep is None: - dep = Dependency(name, version or "*", extras=req.extras) + dep = Dependency(name, version or "*", extras=req.extras, category=category) if version: dep._constraint = parse_constraint(version) @@ -157,7 +174,7 @@ def dependency_from_pep_508( else: constraint = "*" - dep = Dependency(name, constraint, extras=req.extras) + dep = Dependency(name, constraint, extras=req.extras, category=category) if "extra" in markers: # If we have extras, the dependency is optional diff --git a/poetry/core/pyproject/tables.py b/poetry/core/pyproject/tables.py index f69b42ffe..e9557c7d1 100644 --- a/poetry/core/pyproject/tables.py +++ b/poetry/core/pyproject/tables.py @@ -30,18 +30,22 @@ def dependencies(self): for requirement in self.requires: dependency = None try: - dependency = dependency_from_pep_508(requirement) + dependency = dependency_from_pep_508(requirement, category="dev") except ValueError: # PEP 517 requires can be path if not PEP 508 path = Path(requirement) try: if path.is_file(): dependency = FileDependency( - name=canonicalize_name(path.name), path=path + name=canonicalize_name(path.name), + path=path, + category="dev", ) elif path.is_dir(): dependency = DirectoryDependency( - name=canonicalize_name(path.name), path=path + name=canonicalize_name(path.name), + path=path, + category="dev", ) except OSError: # compatibility Python < 3.8