Commit 3ff5a39b by David Hotham Committed by GitHub

Misc cleanups (#6256)

No functional change or fixes here, just tidier code:
* prefer Path.exists()
* typechecking - NormalizedNames from poetry-core
* clean up some unnecessary duplication
* minor refactor
* gather the pyproject.toml parsing into one block, save a level of indentation
* remove more dead code
* simplify handling of extras at command line
* more abstract types 
parent 73e4bde8
......@@ -180,10 +180,7 @@ The add command adds required packages to your <comment>pyproject.toml</> and in
if self.option("extras"):
extras = []
for extra in self.option("extras"):
if " " in extra:
extras += [e.strip() for e in extra.split(" ")]
else:
extras.append(extra)
extras += extra.split()
constraint["extras"] = self.option("extras")
......
......@@ -46,7 +46,7 @@ class CacheClearCommand(Command):
f"Add the --all option if you want to clear all {parts[0]} caches"
)
if not os.path.exists(cache_dir):
if not cache_dir.exists():
self.line(f"No cache entries for {parts[0]}")
return 0
......
......@@ -65,10 +65,7 @@ class DebugResolveCommand(InitCommand):
assert isinstance(name, str)
extras = []
for extra in self.option("extras"):
if " " in extra:
extras += [e.strip() for e in extra.split(" ")]
else:
extras.append(extra)
extras += extra.split()
constraint["extras"] = extras
......
......@@ -120,10 +120,7 @@ dependencies and not including the current project, run the command with the
else:
extras = []
for extra in self.option("extras", []):
if " " in extra:
extras += [e.strip() for e in extra.split(" ")]
else:
extras.append(extra)
extras += extra.split()
self.installer.extras(extras)
......
from __future__ import annotations
import contextlib
import csv
import itertools
import json
......@@ -542,7 +543,12 @@ class Executor:
pyproject = PyProjectTOML(os.path.join(req, "pyproject.toml"))
package_poetry = None
if pyproject.is_poetry_project():
with contextlib.suppress(RuntimeError):
package_poetry = Factory().create_poetry(pyproject.file.path.parent)
if package_poetry is not None:
# Even if there is a build system specified
# some versions of pip (< 19.0.0) don't understand it
# so we need to check the version of pip to know
......@@ -552,12 +558,6 @@ class Executor:
< self._env.pip_version.__class__.from_parts(19, 0, 0)
)
try:
package_poetry = Factory().create_poetry(pyproject.file.path.parent)
except RuntimeError:
package_poetry = None
if package_poetry is not None:
builder: Builder
if package.develop and not package_poetry.package.build_script:
from poetry.masonry.builders.editable import EditableBuilder
......@@ -577,16 +577,10 @@ class Executor:
# build-systems
# We also need it for non-PEP-517 packages
builder = SdistBuilder(package_poetry)
with builder.setup_py():
if package.develop:
return self.pip_install(req, upgrade=True, editable=True)
return self.pip_install(req, upgrade=True)
if package.develop:
return self.pip_install(req, upgrade=True, editable=True)
return self.pip_install(req, upgrade=True, editable=package.develop)
return self.pip_install(req, upgrade=True)
return self.pip_install(req, upgrade=True, editable=package.develop)
def _install_git(self, operation: Install | Update) -> int:
from poetry.vcs.git import Git
......
......@@ -20,7 +20,6 @@ from poetry.utils.helpers import pluralize
if TYPE_CHECKING:
from collections.abc import Iterable
from collections.abc import Sequence
from cleo.io.io import IO
from poetry.core.packages.project_package import ProjectPackage
......@@ -465,7 +464,7 @@ class Installer:
self._installer.remove(operation.package)
def _populate_lockfile_repo(
self, repo: LockfileRepository, ops: Sequence[Operation]
self, repo: LockfileRepository, ops: Iterable[Operation]
) -> None:
for op in ops:
if isinstance(op, Uninstall):
......@@ -509,7 +508,7 @@ class Installer:
return ops
def _filter_operations(self, ops: Sequence[Operation], repo: Repository) -> None:
def _filter_operations(self, ops: Iterable[Operation], repo: Repository) -> None:
extra_packages = self._get_extra_packages(repo)
for op in ops:
if isinstance(op, Update):
......
from __future__ import annotations
import contextlib
import os
import tempfile
import urllib.parse
......@@ -225,19 +226,18 @@ class PipInstaller(BaseInstaller):
pyproject = PyProjectTOML(os.path.join(req, "pyproject.toml"))
package_poetry = None
if pyproject.is_poetry_project():
with contextlib.suppress(RuntimeError):
package_poetry = Factory().create_poetry(pyproject.file.path.parent)
if package_poetry is not None:
# Even if there is a build system specified
# some versions of pip (< 19.0.0) don't understand it
# so we need to check the version of pip to know
# if we can rely on the build system
legacy_pip = self._env.pip_version < Version.from_parts(19, 0, 0)
try:
package_poetry = Factory().create_poetry(pyproject.file.path.parent)
except RuntimeError:
package_poetry = None
if package_poetry is not None:
builder: Builder
if package.develop and not package_poetry.package.build_script:
from poetry.masonry.builders.editable import EditableBuilder
......@@ -259,22 +259,16 @@ class PipInstaller(BaseInstaller):
builder = SdistBuilder(package_poetry)
with builder.setup_py():
if package.develop:
return pip_install(
path=req,
environment=self._env,
upgrade=True,
editable=True,
)
return pip_install(
path=req, environment=self._env, deps=False, upgrade=True
editable=package.develop,
)
if package.develop:
return pip_install(
path=req, environment=self._env, upgrade=True, editable=True
path=req, environment=self._env, upgrade=True, editable=package.develop
)
return pip_install(path=req, environment=self._env, deps=False, upgrade=True)
def install_git(self, package: Package) -> None:
from poetry.core.packages.package import Package
......
......@@ -7,7 +7,7 @@ from poetry.packages.dependency_package import DependencyPackage
if TYPE_CHECKING:
from collections.abc import Sequence
from collections.abc import Iterable
from poetry.core.packages.dependency import Dependency
from poetry.core.packages.package import Package
......@@ -17,13 +17,10 @@ class PackageCollection(List[DependencyPackage]):
def __init__(
self,
dependency: Dependency,
packages: Sequence[Package | DependencyPackage] | None = None,
packages: Iterable[Package | DependencyPackage] = (),
) -> None:
self._dependency = dependency
if packages is None:
packages = []
super().__init__()
for package in packages:
......
......@@ -5,9 +5,7 @@ import logging
from typing import TYPE_CHECKING
from packaging.utils import canonicalize_name
from poetry.core.semver.helpers import parse_constraint
from poetry.core.semver.version import Version
from poetry.core.semver.version_constraint import VersionConstraint
from poetry.core.semver.version_range import VersionRange
from poetry.repositories.exceptions import PackageNotFound
......@@ -18,6 +16,7 @@ if TYPE_CHECKING:
from poetry.core.packages.dependency import Dependency
from poetry.core.packages.package import Package
from poetry.core.packages.utils.link import Link
from poetry.core.semver.version_constraint import VersionConstraint
class Repository:
......@@ -103,11 +102,6 @@ class Repository:
dependency: Dependency,
) -> tuple[VersionConstraint, bool]:
constraint = dependency.constraint
if constraint is None:
constraint = "*"
if not isinstance(constraint, VersionConstraint):
constraint = parse_constraint(constraint)
allow_prereleases = dependency.allows_prereleases()
if isinstance(constraint, VersionRange) and (
......
......@@ -4,9 +4,9 @@ from typing import TYPE_CHECKING
if TYPE_CHECKING:
from collections.abc import Collection
from collections.abc import Iterable
from collections.abc import Iterator
from collections.abc import Sequence
from typing import Mapping
from packaging.utils import NormalizedName
......@@ -14,10 +14,10 @@ if TYPE_CHECKING:
def get_extra_package_names(
packages: Sequence[Package],
packages: Iterable[Package],
extras: Mapping[str, list[str]],
extra_names: Sequence[str],
) -> Iterable[str]:
extra_names: Collection[str],
) -> Iterable[NormalizedName]:
"""
Returns all package names required by the given extras.
......
......@@ -296,5 +296,5 @@ def test_install_directory_fallback_on_poetry_create_error(
assert mock_sdist_builder.call_count == 0
assert mock_editable_builder.call_count == 0
assert mock_pip_install.call_count == 1
assert mock_pip_install.call_args[1].get("deps") is False
assert mock_pip_install.call_args[1].get("deps") is None
assert mock_pip_install.call_args[1].get("upgrade") is True
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment