From 2c35cecac436f6a0d64ad260fc46fca74565d06d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Randy=20D=C3=B6ring?= <30527984+radoering@users.noreply.github.com> Date: Fri, 23 Sep 2022 13:59:28 +0200 Subject: [PATCH 1/4] refactor: move poetry.core.packages.constraints to poetry.core.constraints.generic --- .../poetry/core}/constraints/__init__.py | 0 .../constraints => constraints/generic}/__init__.py | 13 ++++++------- .../generic}/any_constraint.py | 4 ++-- .../generic}/base_constraint.py | 0 .../generic}/constraint.py | 12 +++++------- .../generic}/empty_constraint.py | 2 +- .../generic}/multi_constraint.py | 4 ++-- .../generic}/union_constraint.py | 8 ++++---- src/poetry/core/factory.py | 2 +- src/poetry/core/packages/dependency.py | 4 +--- src/poetry/core/packages/utils/utils.py | 8 ++++---- src/poetry/core/version/markers.py | 4 ++-- tests/constraints/__init__.py | 0 tests/constraints/generic/__init__.py | 0 .../generic}/test_constraint.py | 12 ++++++------ .../generic}/test_main.py | 10 +++++----- .../generic}/test_multi_constraint.py | 4 ++-- .../generic}/test_union_constraint.py | 4 ++-- tests/packages/utils/test_utils.py | 5 +++-- 19 files changed, 46 insertions(+), 50 deletions(-) rename {tests/packages => src/poetry/core}/constraints/__init__.py (100%) rename src/poetry/core/{packages/constraints => constraints/generic}/__init__.py (78%) rename src/poetry/core/{packages/constraints => constraints/generic}/any_constraint.py (86%) rename src/poetry/core/{packages/constraints => constraints/generic}/base_constraint.py (100%) rename src/poetry/core/{packages/constraints => constraints/generic}/constraint.py (90%) rename src/poetry/core/{packages/constraints => constraints/generic}/empty_constraint.py (92%) rename src/poetry/core/{packages/constraints => constraints/generic}/multi_constraint.py (95%) rename src/poetry/core/{packages/constraints => constraints/generic}/union_constraint.py (93%) create mode 100644 tests/constraints/__init__.py create mode 100644 tests/constraints/generic/__init__.py rename tests/{packages/constraints => constraints/generic}/test_constraint.py (92%) rename tests/{packages/constraints => constraints/generic}/test_main.py (80%) rename tests/{packages/constraints => constraints/generic}/test_multi_constraint.py (89%) rename tests/{packages/constraints => constraints/generic}/test_union_constraint.py (87%) diff --git a/tests/packages/constraints/__init__.py b/src/poetry/core/constraints/__init__.py similarity index 100% rename from tests/packages/constraints/__init__.py rename to src/poetry/core/constraints/__init__.py diff --git a/src/poetry/core/packages/constraints/__init__.py b/src/poetry/core/constraints/generic/__init__.py similarity index 78% rename from src/poetry/core/packages/constraints/__init__.py rename to src/poetry/core/constraints/generic/__init__.py index d61a2cb79..1c1beeb8f 100644 --- a/src/poetry/core/packages/constraints/__init__.py +++ b/src/poetry/core/constraints/generic/__init__.py @@ -2,12 +2,12 @@ import re -from poetry.core.packages.constraints.any_constraint import AnyConstraint -from poetry.core.packages.constraints.base_constraint import BaseConstraint -from poetry.core.packages.constraints.constraint import Constraint -from poetry.core.packages.constraints.empty_constraint import EmptyConstraint -from poetry.core.packages.constraints.multi_constraint import MultiConstraint -from poetry.core.packages.constraints.union_constraint import UnionConstraint +from poetry.core.constraints.generic.any_constraint import AnyConstraint +from poetry.core.constraints.generic.base_constraint import BaseConstraint +from poetry.core.constraints.generic.constraint import Constraint +from poetry.core.constraints.generic.empty_constraint import EmptyConstraint +from poetry.core.constraints.generic.multi_constraint import MultiConstraint +from poetry.core.constraints.generic.union_constraint import UnionConstraint BASIC_CONSTRAINT = re.compile(r"^(!?==?)?\s*([^\s]+?)\s*$") @@ -69,5 +69,4 @@ def parse_single_constraint(constraint: str) -> Constraint: "MultiConstraint", "UnionConstraint", "parse_constraint", - "parse_single_constraint", ] diff --git a/src/poetry/core/packages/constraints/any_constraint.py b/src/poetry/core/constraints/generic/any_constraint.py similarity index 86% rename from src/poetry/core/packages/constraints/any_constraint.py rename to src/poetry/core/constraints/generic/any_constraint.py index 7bbea514f..db230869f 100644 --- a/src/poetry/core/packages/constraints/any_constraint.py +++ b/src/poetry/core/constraints/generic/any_constraint.py @@ -1,7 +1,7 @@ from __future__ import annotations -from poetry.core.packages.constraints.base_constraint import BaseConstraint -from poetry.core.packages.constraints.empty_constraint import EmptyConstraint +from poetry.core.constraints.generic.base_constraint import BaseConstraint +from poetry.core.constraints.generic.empty_constraint import EmptyConstraint class AnyConstraint(BaseConstraint): diff --git a/src/poetry/core/packages/constraints/base_constraint.py b/src/poetry/core/constraints/generic/base_constraint.py similarity index 100% rename from src/poetry/core/packages/constraints/base_constraint.py rename to src/poetry/core/constraints/generic/base_constraint.py diff --git a/src/poetry/core/packages/constraints/constraint.py b/src/poetry/core/constraints/generic/constraint.py similarity index 90% rename from src/poetry/core/packages/constraints/constraint.py rename to src/poetry/core/constraints/generic/constraint.py index 013449fdc..3180efb1a 100644 --- a/src/poetry/core/packages/constraints/constraint.py +++ b/src/poetry/core/constraints/generic/constraint.py @@ -2,9 +2,9 @@ import operator -from poetry.core.packages.constraints import AnyConstraint -from poetry.core.packages.constraints.base_constraint import BaseConstraint -from poetry.core.packages.constraints.empty_constraint import EmptyConstraint +from poetry.core.constraints.generic.any_constraint import AnyConstraint +from poetry.core.constraints.generic.base_constraint import BaseConstraint +from poetry.core.constraints.generic.empty_constraint import EmptyConstraint class Constraint(BaseConstraint): @@ -78,7 +78,7 @@ def difference(self, other: BaseConstraint) -> Constraint | EmptyConstraint: return self def intersect(self, other: BaseConstraint) -> BaseConstraint: - from poetry.core.packages.constraints.multi_constraint import MultiConstraint + from poetry.core.constraints.generic.multi_constraint import MultiConstraint if isinstance(other, Constraint): if other == self: @@ -99,9 +99,7 @@ def intersect(self, other: BaseConstraint) -> BaseConstraint: def union(self, other: BaseConstraint) -> BaseConstraint: if isinstance(other, Constraint): - from poetry.core.packages.constraints.union_constraint import ( - UnionConstraint, - ) + from poetry.core.constraints.generic.union_constraint import UnionConstraint if other == self: return self diff --git a/src/poetry/core/packages/constraints/empty_constraint.py b/src/poetry/core/constraints/generic/empty_constraint.py similarity index 92% rename from src/poetry/core/packages/constraints/empty_constraint.py rename to src/poetry/core/constraints/generic/empty_constraint.py index 147c43707..83d0d148d 100644 --- a/src/poetry/core/packages/constraints/empty_constraint.py +++ b/src/poetry/core/constraints/generic/empty_constraint.py @@ -1,6 +1,6 @@ from __future__ import annotations -from poetry.core.packages.constraints.base_constraint import BaseConstraint +from poetry.core.constraints.generic.base_constraint import BaseConstraint class EmptyConstraint(BaseConstraint): diff --git a/src/poetry/core/packages/constraints/multi_constraint.py b/src/poetry/core/constraints/generic/multi_constraint.py similarity index 95% rename from src/poetry/core/packages/constraints/multi_constraint.py rename to src/poetry/core/constraints/generic/multi_constraint.py index b62c5876e..0a1f05f8e 100644 --- a/src/poetry/core/packages/constraints/multi_constraint.py +++ b/src/poetry/core/constraints/generic/multi_constraint.py @@ -1,7 +1,7 @@ from __future__ import annotations -from poetry.core.packages.constraints.base_constraint import BaseConstraint -from poetry.core.packages.constraints.constraint import Constraint +from poetry.core.constraints.generic.base_constraint import BaseConstraint +from poetry.core.constraints.generic.constraint import Constraint class MultiConstraint(BaseConstraint): diff --git a/src/poetry/core/packages/constraints/union_constraint.py b/src/poetry/core/constraints/generic/union_constraint.py similarity index 93% rename from src/poetry/core/packages/constraints/union_constraint.py rename to src/poetry/core/constraints/generic/union_constraint.py index dba84af70..8db1bd87c 100644 --- a/src/poetry/core/packages/constraints/union_constraint.py +++ b/src/poetry/core/constraints/generic/union_constraint.py @@ -1,9 +1,9 @@ from __future__ import annotations -from poetry.core.packages.constraints.base_constraint import BaseConstraint -from poetry.core.packages.constraints.constraint import Constraint -from poetry.core.packages.constraints.empty_constraint import EmptyConstraint -from poetry.core.packages.constraints.multi_constraint import MultiConstraint +from poetry.core.constraints.generic.base_constraint import BaseConstraint +from poetry.core.constraints.generic.constraint import Constraint +from poetry.core.constraints.generic.empty_constraint import EmptyConstraint +from poetry.core.constraints.generic.multi_constraint import MultiConstraint class UnionConstraint(BaseConstraint): diff --git a/src/poetry/core/factory.py b/src/poetry/core/factory.py index 0698e466f..bca114aa6 100644 --- a/src/poetry/core/factory.py +++ b/src/poetry/core/factory.py @@ -227,7 +227,7 @@ def create_dependency( groups: list[str] | None = None, root_dir: Path | None = None, ) -> Dependency: - from poetry.core.packages.constraints import ( + from poetry.core.constraints.generic import ( parse_constraint as parse_generic_constraint, ) from poetry.core.packages.dependency import Dependency diff --git a/src/poetry/core/packages/dependency.py b/src/poetry/core/packages/dependency.py index 6f97f2ad0..853c31a5a 100644 --- a/src/poetry/core/packages/dependency.py +++ b/src/poetry/core/packages/dependency.py @@ -10,9 +10,7 @@ from typing import Iterable from typing import TypeVar -from poetry.core.packages.constraints import ( - parse_constraint as parse_generic_constraint, -) +from poetry.core.constraints.generic import parse_constraint as parse_generic_constraint from poetry.core.packages.dependency_group import MAIN_GROUP from poetry.core.packages.specification import PackageSpecification from poetry.core.packages.utils.utils import contains_group_without_marker diff --git a/src/poetry/core/packages/utils/utils.py b/src/poetry/core/packages/utils/utils.py index 3e9bcab97..e1bb0a2af 100644 --- a/src/poetry/core/packages/utils/utils.py +++ b/src/poetry/core/packages/utils/utils.py @@ -22,7 +22,7 @@ if TYPE_CHECKING: - from poetry.core.packages.constraints import BaseConstraint + from poetry.core.constraints.generic import BaseConstraint from poetry.core.semver.version_constraint import VersionConstraint from poetry.core.version.markers import BaseMarker @@ -203,9 +203,9 @@ def create_nested_marker( name: str, constraint: BaseConstraint | VersionConstraint, ) -> str: - from poetry.core.packages.constraints.constraint import Constraint - from poetry.core.packages.constraints.multi_constraint import MultiConstraint - from poetry.core.packages.constraints.union_constraint import UnionConstraint + from poetry.core.constraints.generic import Constraint + from poetry.core.constraints.generic import MultiConstraint + from poetry.core.constraints.generic import UnionConstraint from poetry.core.semver.version_union import VersionUnion if constraint.is_any(): diff --git a/src/poetry/core/version/markers.py b/src/poetry/core/version/markers.py index abf3cc28b..28a1c83f5 100644 --- a/src/poetry/core/version/markers.py +++ b/src/poetry/core/version/markers.py @@ -16,7 +16,7 @@ if TYPE_CHECKING: from lark import Tree - from poetry.core.packages.constraints import BaseConstraint + from poetry.core.constraints.generic import BaseConstraint class InvalidMarker(ValueError): @@ -184,7 +184,7 @@ class SingleMarker(BaseMarker): def __init__( self, name: str, constraint: str | BaseConstraint | VersionConstraint ) -> None: - from poetry.core.packages.constraints import ( + from poetry.core.constraints.generic import ( parse_constraint as parse_generic_constraint, ) from poetry.core.semver.helpers import parse_constraint diff --git a/tests/constraints/__init__.py b/tests/constraints/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/constraints/generic/__init__.py b/tests/constraints/generic/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/packages/constraints/test_constraint.py b/tests/constraints/generic/test_constraint.py similarity index 92% rename from tests/packages/constraints/test_constraint.py rename to tests/constraints/generic/test_constraint.py index 27d3c089e..c96ef4d98 100644 --- a/tests/packages/constraints/test_constraint.py +++ b/tests/constraints/generic/test_constraint.py @@ -4,15 +4,15 @@ import pytest -from poetry.core.packages.constraints import AnyConstraint -from poetry.core.packages.constraints.constraint import Constraint -from poetry.core.packages.constraints.empty_constraint import EmptyConstraint -from poetry.core.packages.constraints.multi_constraint import MultiConstraint -from poetry.core.packages.constraints.union_constraint import UnionConstraint +from poetry.core.constraints.generic import AnyConstraint +from poetry.core.constraints.generic import Constraint +from poetry.core.constraints.generic import EmptyConstraint +from poetry.core.constraints.generic import MultiConstraint +from poetry.core.constraints.generic import UnionConstraint if TYPE_CHECKING: - from poetry.core.packages.constraints import BaseConstraint + from poetry.core.constraints.generic import BaseConstraint def test_allows() -> None: diff --git a/tests/packages/constraints/test_main.py b/tests/constraints/generic/test_main.py similarity index 80% rename from tests/packages/constraints/test_main.py rename to tests/constraints/generic/test_main.py index e95c04cad..2707fd92f 100644 --- a/tests/packages/constraints/test_main.py +++ b/tests/constraints/generic/test_main.py @@ -2,11 +2,11 @@ import pytest -from poetry.core.packages.constraints import parse_constraint -from poetry.core.packages.constraints.any_constraint import AnyConstraint -from poetry.core.packages.constraints.constraint import Constraint -from poetry.core.packages.constraints.multi_constraint import MultiConstraint -from poetry.core.packages.constraints.union_constraint import UnionConstraint +from poetry.core.constraints.generic import AnyConstraint +from poetry.core.constraints.generic import Constraint +from poetry.core.constraints.generic import MultiConstraint +from poetry.core.constraints.generic import UnionConstraint +from poetry.core.constraints.generic import parse_constraint @pytest.mark.parametrize( diff --git a/tests/packages/constraints/test_multi_constraint.py b/tests/constraints/generic/test_multi_constraint.py similarity index 89% rename from tests/packages/constraints/test_multi_constraint.py rename to tests/constraints/generic/test_multi_constraint.py index 5d8cb36b6..583305d86 100644 --- a/tests/packages/constraints/test_multi_constraint.py +++ b/tests/constraints/generic/test_multi_constraint.py @@ -1,7 +1,7 @@ from __future__ import annotations -from poetry.core.packages.constraints.constraint import Constraint -from poetry.core.packages.constraints.multi_constraint import MultiConstraint +from poetry.core.constraints.generic import Constraint +from poetry.core.constraints.generic import MultiConstraint def test_allows() -> None: diff --git a/tests/packages/constraints/test_union_constraint.py b/tests/constraints/generic/test_union_constraint.py similarity index 87% rename from tests/packages/constraints/test_union_constraint.py rename to tests/constraints/generic/test_union_constraint.py index 6545dae5b..59d3a9d32 100644 --- a/tests/packages/constraints/test_union_constraint.py +++ b/tests/constraints/generic/test_union_constraint.py @@ -1,7 +1,7 @@ from __future__ import annotations -from poetry.core.packages.constraints.constraint import Constraint -from poetry.core.packages.constraints.union_constraint import UnionConstraint +from poetry.core.constraints.generic import Constraint +from poetry.core.constraints.generic import UnionConstraint def test_allows() -> None: diff --git a/tests/packages/utils/test_utils.py b/tests/packages/utils/test_utils.py index 408835399..0e83661c9 100644 --- a/tests/packages/utils/test_utils.py +++ b/tests/packages/utils/test_utils.py @@ -4,7 +4,7 @@ import pytest -from poetry.core.packages.constraints import parse_constraint +from poetry.core.constraints.generic import parse_constraint as parse_generic_constraint from poetry.core.packages.utils.utils import convert_markers from poetry.core.packages.utils.utils import create_nested_marker from poetry.core.packages.utils.utils import get_python_constraint_from_marker @@ -100,7 +100,8 @@ def test_convert_markers( ) def test_create_nested_marker_base_constraint(constraint: str, expected: str) -> None: assert ( - create_nested_marker("sys_platform", parse_constraint(constraint)) == expected + create_nested_marker("sys_platform", parse_generic_constraint(constraint)) + == expected ) From 6885c83d5bd85c34ee6c8bcc36715edfb2d23dd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Randy=20D=C3=B6ring?= <30527984+radoering@users.noreply.github.com> Date: Fri, 23 Sep 2022 14:21:14 +0200 Subject: [PATCH 2/4] refactor: move poetry.core.semver to poetry.core.constraints.version --- .../core/constraints/version/__init__.py | 24 +++++++++++++++++++ .../version}/empty_constraint.py | 8 ++++--- .../version}/exceptions.py | 0 .../version}/helpers.py | 24 +++++++++---------- .../version}/patterns.py | 0 .../{semver => constraints/version}/util.py | 4 ++-- .../version}/version.py | 14 ++++++----- .../version}/version_constraint.py | 6 +++-- .../version}/version_range.py | 22 +++++++++-------- .../version}/version_range_constraint.py | 4 ++-- .../version}/version_union.py | 20 +++++++++------- src/poetry/core/factory.py | 6 +++-- src/poetry/core/masonry/builders/wheel.py | 2 +- src/poetry/core/packages/dependency.py | 12 +++++----- src/poetry/core/packages/package.py | 10 ++++---- src/poetry/core/packages/project_package.py | 4 ++-- src/poetry/core/packages/utils/utils.py | 14 +++++------ src/poetry/core/version/helpers.py | 8 +++---- src/poetry/core/version/markers.py | 12 +++++----- src/poetry/core/version/requirements.py | 4 ++-- .../constraints/version}/__init__.py | 0 .../version}/test_helpers.py | 8 +++---- .../version}/test_parse_constraint.py | 8 +++---- .../version}/test_utils.py | 10 ++++---- .../version}/test_version.py | 8 +++---- .../version}/test_version_range.py | 6 ++--- tests/packages/test_dependency.py | 2 +- tests/packages/test_main.py | 2 +- tests/packages/test_package.py | 2 +- tests/packages/utils/test_utils.py | 2 +- tests/semver/__init__.py | 0 tests/test_factory.py | 2 +- tests/version/test_requirements.py | 2 +- 33 files changed, 143 insertions(+), 107 deletions(-) create mode 100644 src/poetry/core/constraints/version/__init__.py rename src/poetry/core/{semver => constraints/version}/empty_constraint.py (80%) rename src/poetry/core/{semver => constraints/version}/exceptions.py (100%) rename src/poetry/core/{semver => constraints/version}/helpers.py (81%) rename src/poetry/core/{semver => constraints/version}/patterns.py (100%) rename src/poetry/core/{semver => constraints/version}/util.py (89%) rename src/poetry/core/{semver => constraints/version}/version.py (90%) rename src/poetry/core/{semver => constraints/version}/version_constraint.py (87%) rename src/poetry/core/{semver => constraints/version}/version_range.py (94%) rename src/poetry/core/{semver => constraints/version}/version_range_constraint.py (93%) rename src/poetry/core/{semver => constraints/version}/version_union.py (95%) rename {src/poetry/core/semver => tests/constraints/version}/__init__.py (100%) rename tests/{semver => constraints/version}/test_helpers.py (98%) rename tests/{semver => constraints/version}/test_parse_constraint.py (96%) rename tests/{semver => constraints/version}/test_utils.py (89%) rename tests/{semver => constraints/version}/test_version.py (98%) rename tests/{semver => constraints/version}/test_version_range.py (98%) delete mode 100644 tests/semver/__init__.py diff --git a/src/poetry/core/constraints/version/__init__.py b/src/poetry/core/constraints/version/__init__.py new file mode 100644 index 000000000..14a4ae181 --- /dev/null +++ b/src/poetry/core/constraints/version/__init__.py @@ -0,0 +1,24 @@ +from __future__ import annotations + +from poetry.core.constraints.version.empty_constraint import EmptyConstraint +from poetry.core.constraints.version.helpers import parse_constraint +from poetry.core.constraints.version.util import constraint_regions +from poetry.core.constraints.version.version import Version +from poetry.core.constraints.version.version_constraint import VersionConstraint +from poetry.core.constraints.version.version_range import VersionRange +from poetry.core.constraints.version.version_range_constraint import ( + VersionRangeConstraint, +) +from poetry.core.constraints.version.version_union import VersionUnion + + +__all__ = [ + "EmptyConstraint", + "Version", + "VersionConstraint", + "VersionRange", + "VersionRangeConstraint", + "VersionUnion", + "constraint_regions", + "parse_constraint", +] diff --git a/src/poetry/core/semver/empty_constraint.py b/src/poetry/core/constraints/version/empty_constraint.py similarity index 80% rename from src/poetry/core/semver/empty_constraint.py rename to src/poetry/core/constraints/version/empty_constraint.py index 5cd7ea73b..5fd1733cb 100644 --- a/src/poetry/core/semver/empty_constraint.py +++ b/src/poetry/core/constraints/version/empty_constraint.py @@ -2,12 +2,14 @@ from typing import TYPE_CHECKING -from poetry.core.semver.version_constraint import VersionConstraint +from poetry.core.constraints.version.version_constraint import VersionConstraint if TYPE_CHECKING: - from poetry.core.semver.version import Version - from poetry.core.semver.version_range_constraint import VersionRangeConstraint + from poetry.core.constraints.version.version import Version + from poetry.core.constraints.version.version_range_constraint import ( + VersionRangeConstraint, + ) class EmptyConstraint(VersionConstraint): diff --git a/src/poetry/core/semver/exceptions.py b/src/poetry/core/constraints/version/exceptions.py similarity index 100% rename from src/poetry/core/semver/exceptions.py rename to src/poetry/core/constraints/version/exceptions.py diff --git a/src/poetry/core/semver/helpers.py b/src/poetry/core/constraints/version/helpers.py similarity index 81% rename from src/poetry/core/semver/helpers.py rename to src/poetry/core/constraints/version/helpers.py index 0ce090d89..6e55b984d 100644 --- a/src/poetry/core/semver/helpers.py +++ b/src/poetry/core/constraints/version/helpers.py @@ -6,12 +6,12 @@ if TYPE_CHECKING: - from poetry.core.semver.version_constraint import VersionConstraint + from poetry.core.constraints.version.version_constraint import VersionConstraint def parse_constraint(constraints: str) -> VersionConstraint: if constraints == "*": - from poetry.core.semver.version_range import VersionRange + from poetry.core.constraints.version.version_range import VersionRange return VersionRange() @@ -44,20 +44,20 @@ def parse_constraint(constraints: str) -> VersionConstraint: if len(or_groups) == 1: return or_groups[0] else: - from poetry.core.semver.version_union import VersionUnion + from poetry.core.constraints.version.version_union import VersionUnion return VersionUnion.of(*or_groups) def parse_single_constraint(constraint: str) -> VersionConstraint: - from poetry.core.semver.patterns import BASIC_CONSTRAINT - from poetry.core.semver.patterns import CARET_CONSTRAINT - from poetry.core.semver.patterns import TILDE_CONSTRAINT - from poetry.core.semver.patterns import TILDE_PEP440_CONSTRAINT - from poetry.core.semver.patterns import X_CONSTRAINT - from poetry.core.semver.version import Version - from poetry.core.semver.version_range import VersionRange - from poetry.core.semver.version_union import VersionUnion + from poetry.core.constraints.version.patterns import BASIC_CONSTRAINT + from poetry.core.constraints.version.patterns import CARET_CONSTRAINT + from poetry.core.constraints.version.patterns import TILDE_CONSTRAINT + from poetry.core.constraints.version.patterns import TILDE_PEP440_CONSTRAINT + from poetry.core.constraints.version.patterns import X_CONSTRAINT + from poetry.core.constraints.version.version import Version + from poetry.core.constraints.version.version_range import VersionRange + from poetry.core.constraints.version.version_union import VersionUnion m = re.match(r"(?i)^v?[xX*](\.[xX*])*$", constraint) if m: @@ -142,6 +142,6 @@ def parse_single_constraint(constraint: str) -> VersionConstraint: return VersionUnion(VersionRange(max=version), VersionRange(min=version)) return version - from poetry.core.semver.exceptions import ParseConstraintError + from poetry.core.constraints.version.exceptions import ParseConstraintError raise ParseConstraintError(f"Could not parse version constraint: {constraint}") diff --git a/src/poetry/core/semver/patterns.py b/src/poetry/core/constraints/version/patterns.py similarity index 100% rename from src/poetry/core/semver/patterns.py rename to src/poetry/core/constraints/version/patterns.py diff --git a/src/poetry/core/semver/util.py b/src/poetry/core/constraints/version/util.py similarity index 89% rename from src/poetry/core/semver/util.py rename to src/poetry/core/constraints/version/util.py index b70e85df4..d81d11cd1 100644 --- a/src/poetry/core/semver/util.py +++ b/src/poetry/core/constraints/version/util.py @@ -2,11 +2,11 @@ from typing import TYPE_CHECKING -from poetry.core.semver.version_range import VersionRange +from poetry.core.constraints.version.version_range import VersionRange if TYPE_CHECKING: - from poetry.core.semver.version_constraint import VersionConstraint + from poetry.core.constraints.version.version_constraint import VersionConstraint def constraint_regions(constraints: list[VersionConstraint]) -> list[VersionRange]: diff --git a/src/poetry/core/semver/version.py b/src/poetry/core/constraints/version/version.py similarity index 90% rename from src/poetry/core/semver/version.py rename to src/poetry/core/constraints/version/version.py index 66a1bbe5a..6f84ed6b4 100644 --- a/src/poetry/core/semver/version.py +++ b/src/poetry/core/constraints/version/version.py @@ -4,15 +4,17 @@ from typing import TYPE_CHECKING -from poetry.core.semver.empty_constraint import EmptyConstraint -from poetry.core.semver.version_range_constraint import VersionRangeConstraint -from poetry.core.semver.version_union import VersionUnion +from poetry.core.constraints.version.empty_constraint import EmptyConstraint +from poetry.core.constraints.version.version_range_constraint import ( + VersionRangeConstraint, +) +from poetry.core.constraints.version.version_union import VersionUnion from poetry.core.version.pep440 import Release from poetry.core.version.pep440.version import PEP440Version if TYPE_CHECKING: - from poetry.core.semver.version_constraint import VersionConstraint + from poetry.core.constraints.version.version_constraint import VersionConstraint from poetry.core.version.pep440 import LocalSegmentType from poetry.core.version.pep440 import ReleaseTag @@ -106,7 +108,7 @@ def intersect(self, other: VersionConstraint) -> Version | EmptyConstraint: return EmptyConstraint() def union(self, other: VersionConstraint) -> VersionConstraint: - from poetry.core.semver.version_range import VersionRange + from poetry.core.constraints.version.version_range import VersionRange if other.allows(self): return other @@ -146,7 +148,7 @@ def __repr__(self) -> str: return f"" def __eq__(self, other: object) -> bool: - from poetry.core.semver.version_range import VersionRange + from poetry.core.constraints.version.version_range import VersionRange if isinstance(other, VersionRange): return ( diff --git a/src/poetry/core/semver/version_constraint.py b/src/poetry/core/constraints/version/version_constraint.py similarity index 87% rename from src/poetry/core/semver/version_constraint.py rename to src/poetry/core/constraints/version/version_constraint.py index 8a35a33d0..089a9b094 100644 --- a/src/poetry/core/semver/version_constraint.py +++ b/src/poetry/core/constraints/version/version_constraint.py @@ -5,8 +5,10 @@ if TYPE_CHECKING: - from poetry.core.semver.version import Version - from poetry.core.semver.version_range_constraint import VersionRangeConstraint + from poetry.core.constraints.version.version import Version + from poetry.core.constraints.version.version_range_constraint import ( + VersionRangeConstraint, + ) class VersionConstraint: diff --git a/src/poetry/core/semver/version_range.py b/src/poetry/core/constraints/version/version_range.py similarity index 94% rename from src/poetry/core/semver/version_range.py rename to src/poetry/core/constraints/version/version_range.py index 3a6aff195..cbda6fac2 100644 --- a/src/poetry/core/semver/version_range.py +++ b/src/poetry/core/constraints/version/version_range.py @@ -2,14 +2,16 @@ from typing import TYPE_CHECKING -from poetry.core.semver.empty_constraint import EmptyConstraint -from poetry.core.semver.version_range_constraint import VersionRangeConstraint -from poetry.core.semver.version_union import VersionUnion +from poetry.core.constraints.version.empty_constraint import EmptyConstraint +from poetry.core.constraints.version.version_range_constraint import ( + VersionRangeConstraint, +) +from poetry.core.constraints.version.version_union import VersionUnion if TYPE_CHECKING: - from poetry.core.semver.version import Version - from poetry.core.semver.version_constraint import VersionConstraint + from poetry.core.constraints.version.version import Version + from poetry.core.constraints.version.version_constraint import VersionConstraint class VersionRange(VersionRangeConstraint): @@ -95,7 +97,7 @@ def allows(self, other: Version) -> bool: return True def allows_all(self, other: VersionConstraint) -> bool: - from poetry.core.semver.version import Version + from poetry.core.constraints.version.version import Version if other.is_empty(): return True @@ -112,7 +114,7 @@ def allows_all(self, other: VersionConstraint) -> bool: raise ValueError(f"Unknown VersionConstraint type {other}.") def allows_any(self, other: VersionConstraint) -> bool: - from poetry.core.semver.version import Version + from poetry.core.constraints.version.version import Version if other.is_empty(): return False @@ -131,7 +133,7 @@ def allows_any(self, other: VersionConstraint) -> bool: raise ValueError(f"Unknown VersionConstraint type {other}.") def intersect(self, other: VersionConstraint) -> VersionConstraint: - from poetry.core.semver.version import Version + from poetry.core.constraints.version.version import Version if other.is_empty(): return other @@ -187,7 +189,7 @@ def intersect(self, other: VersionConstraint) -> VersionConstraint: ) def union(self, other: VersionConstraint) -> VersionConstraint: - from poetry.core.semver.version import Version + from poetry.core.constraints.version.version import Version if isinstance(other, Version): if self.allows(other): @@ -239,7 +241,7 @@ def union(self, other: VersionConstraint) -> VersionConstraint: return VersionUnion.of(self, other) def difference(self, other: VersionConstraint) -> VersionConstraint: - from poetry.core.semver.version import Version + from poetry.core.constraints.version.version import Version if other.is_empty(): return self diff --git a/src/poetry/core/semver/version_range_constraint.py b/src/poetry/core/constraints/version/version_range_constraint.py similarity index 93% rename from src/poetry/core/semver/version_range_constraint.py rename to src/poetry/core/constraints/version/version_range_constraint.py index 03a431c69..a77762778 100644 --- a/src/poetry/core/semver/version_range_constraint.py +++ b/src/poetry/core/constraints/version/version_range_constraint.py @@ -3,11 +3,11 @@ from abc import abstractmethod from typing import TYPE_CHECKING -from poetry.core.semver.version_constraint import VersionConstraint +from poetry.core.constraints.version.version_constraint import VersionConstraint if TYPE_CHECKING: - from poetry.core.semver.version import Version + from poetry.core.constraints.version.version import Version class VersionRangeConstraint(VersionConstraint): diff --git a/src/poetry/core/semver/version_union.py b/src/poetry/core/constraints/version/version_union.py similarity index 95% rename from src/poetry/core/semver/version_union.py rename to src/poetry/core/constraints/version/version_union.py index 26edb7426..022aa8b35 100644 --- a/src/poetry/core/semver/version_union.py +++ b/src/poetry/core/constraints/version/version_union.py @@ -2,13 +2,15 @@ from typing import TYPE_CHECKING -from poetry.core.semver.empty_constraint import EmptyConstraint -from poetry.core.semver.version_constraint import VersionConstraint -from poetry.core.semver.version_range_constraint import VersionRangeConstraint +from poetry.core.constraints.version.empty_constraint import EmptyConstraint +from poetry.core.constraints.version.version_constraint import VersionConstraint +from poetry.core.constraints.version.version_range_constraint import ( + VersionRangeConstraint, +) if TYPE_CHECKING: - from poetry.core.semver.version import Version + from poetry.core.constraints.version.version import Version class VersionUnion(VersionConstraint): @@ -29,7 +31,7 @@ def ranges(self) -> list[VersionRangeConstraint]: @classmethod def of(cls, *ranges: VersionConstraint) -> VersionConstraint: - from poetry.core.semver.version_range import VersionRange + from poetry.core.constraints.version.version_range import VersionRange flattened: list[VersionRangeConstraint] = [] for constraint in ranges: @@ -367,7 +369,7 @@ def _excludes_single_wildcard_range_check_is_valid_range( return _padded_version_two in _check_versions def excludes_single_wildcard_range(self) -> bool: - from poetry.core.semver.version_range import VersionRange + from poetry.core.constraints.version.version_range import VersionRange if len(self._ranges) != 2: return False @@ -389,8 +391,8 @@ def excludes_single_wildcard_range(self) -> bool: return isinstance(VersionRange().difference(self), VersionRange) def excludes_single_version(self) -> bool: - from poetry.core.semver.version import Version - from poetry.core.semver.version_range import VersionRange + from poetry.core.constraints.version.version import Version + from poetry.core.constraints.version.version_range import VersionRange return isinstance(VersionRange().difference(self), Version) @@ -409,7 +411,7 @@ def __hash__(self) -> int: return h def __str__(self) -> str: - from poetry.core.semver.version_range import VersionRange + from poetry.core.constraints.version.version_range import VersionRange if self.excludes_single_version(): return f"!={VersionRange().difference(self)}" diff --git a/src/poetry/core/factory.py b/src/poetry/core/factory.py index bca114aa6..2e8295e01 100644 --- a/src/poetry/core/factory.py +++ b/src/poetry/core/factory.py @@ -230,6 +230,9 @@ def create_dependency( from poetry.core.constraints.generic import ( parse_constraint as parse_generic_constraint, ) + from poetry.core.constraints.version import ( + parse_constraint as parse_version_constraint, + ) from poetry.core.packages.dependency import Dependency from poetry.core.packages.dependency_group import MAIN_GROUP from poetry.core.packages.directory_dependency import DirectoryDependency @@ -237,7 +240,6 @@ def create_dependency( from poetry.core.packages.url_dependency import URLDependency from poetry.core.packages.utils.utils import create_nested_marker from poetry.core.packages.vcs_dependency import VCSDependency - from poetry.core.semver.helpers import parse_constraint from poetry.core.version.markers import AnyMarker from poetry.core.version.markers import parse_marker @@ -345,7 +347,7 @@ def create_dependency( marker = marker.intersect( parse_marker( create_nested_marker( - "python_version", parse_constraint(python_versions) + "python_version", parse_version_constraint(python_versions) ) ) ) diff --git a/src/poetry/core/masonry/builders/wheel.py b/src/poetry/core/masonry/builders/wheel.py index 705f7f1ed..17625a0ba 100644 --- a/src/poetry/core/masonry/builders/wheel.py +++ b/src/poetry/core/masonry/builders/wheel.py @@ -21,12 +21,12 @@ from packaging.tags import sys_tags from poetry.core import __version__ +from poetry.core.constraints.version import parse_constraint from poetry.core.masonry.builders.builder import Builder from poetry.core.masonry.builders.sdist import SdistBuilder from poetry.core.masonry.utils.helpers import escape_name from poetry.core.masonry.utils.helpers import normalize_file_permissions from poetry.core.masonry.utils.package_include import PackageInclude -from poetry.core.semver.helpers import parse_constraint if TYPE_CHECKING: diff --git a/src/poetry/core/packages/dependency.py b/src/poetry/core/packages/dependency.py index 853c31a5a..e75edf319 100644 --- a/src/poetry/core/packages/dependency.py +++ b/src/poetry/core/packages/dependency.py @@ -11,22 +11,22 @@ from typing import TypeVar from poetry.core.constraints.generic import parse_constraint as parse_generic_constraint +from poetry.core.constraints.version import VersionRangeConstraint +from poetry.core.constraints.version import parse_constraint from poetry.core.packages.dependency_group import MAIN_GROUP from poetry.core.packages.specification import PackageSpecification from poetry.core.packages.utils.utils import contains_group_without_marker from poetry.core.packages.utils.utils import create_nested_marker from poetry.core.packages.utils.utils import normalize_python_version_markers -from poetry.core.semver.helpers import parse_constraint -from poetry.core.semver.version_range_constraint import VersionRangeConstraint from poetry.core.version.markers import parse_marker if TYPE_CHECKING: from packaging.utils import NormalizedName + from poetry.core.constraints.version import VersionConstraint from poetry.core.packages.directory_dependency import DirectoryDependency from poetry.core.packages.file_dependency import FileDependency - from poetry.core.semver.version_constraint import VersionConstraint from poetry.core.version.markers import BaseMarker T = TypeVar("T", bound="Dependency") @@ -165,8 +165,8 @@ def marker(self) -> BaseMarker: @marker.setter def marker(self, marker: str | BaseMarker) -> None: + from poetry.core.constraints.version import parse_constraint from poetry.core.packages.utils.utils import convert_markers - from poetry.core.semver.helpers import parse_constraint from poetry.core.version.markers import BaseMarker from poetry.core.version.markers import parse_marker @@ -228,8 +228,8 @@ def in_extras(self) -> list[str]: @property def base_pep_508_name(self) -> str: - from poetry.core.semver.version import Version - from poetry.core.semver.version_union import VersionUnion + from poetry.core.constraints.version import Version + from poetry.core.constraints.version import VersionUnion requirement = self.pretty_name diff --git a/src/poetry/core/packages/package.py b/src/poetry/core/packages/package.py index 8c51f6fc6..11f7cc93e 100644 --- a/src/poetry/core/packages/package.py +++ b/src/poetry/core/packages/package.py @@ -11,20 +11,20 @@ from typing import Iterator from typing import TypeVar +from poetry.core.constraints.version import parse_constraint from poetry.core.packages.dependency_group import MAIN_GROUP from poetry.core.packages.specification import PackageSpecification from poetry.core.packages.utils.utils import create_nested_marker -from poetry.core.semver.helpers import parse_constraint from poetry.core.version.markers import parse_marker if TYPE_CHECKING: from packaging.utils import NormalizedName + from poetry.core.constraints.version import Version + from poetry.core.constraints.version import VersionConstraint from poetry.core.packages.dependency import Dependency from poetry.core.packages.dependency_group import DependencyGroup - from poetry.core.semver.version import Version - from poetry.core.semver.version_constraint import VersionConstraint from poetry.core.spdx.license import License from poetry.core.version.markers import BaseMarker @@ -211,7 +211,7 @@ def all_requires( def _set_version( self, version: str | Version, pretty_version: str | None = None ) -> None: - from poetry.core.semver.version import Version + from poetry.core.constraints.version import Version if not isinstance(version, Version): self._version = Version.parse(version) @@ -290,7 +290,7 @@ def license(self, value: str | License | None) -> None: @property def all_classifiers(self) -> list[str]: - from poetry.core.semver.version import Version + from poetry.core.constraints.version import Version classifiers = copy.copy(self.classifiers) diff --git a/src/poetry/core/packages/project_package.py b/src/poetry/core/packages/project_package.py index 1d6f5505f..3af4eb16e 100644 --- a/src/poetry/core/packages/project_package.py +++ b/src/poetry/core/packages/project_package.py @@ -3,13 +3,13 @@ from typing import TYPE_CHECKING from typing import Any -from poetry.core.semver.helpers import parse_constraint +from poetry.core.constraints.version import parse_constraint from poetry.core.version.markers import parse_marker if TYPE_CHECKING: from poetry.core.packages.dependency import Dependency - from poetry.core.semver.version import Version + from poetry.core.constraints.version import Version from poetry.core.packages.package import Package from poetry.core.packages.utils.utils import create_nested_marker diff --git a/src/poetry/core/packages/utils/utils.py b/src/poetry/core/packages/utils/utils.py index e1bb0a2af..4b4853ca7 100644 --- a/src/poetry/core/packages/utils/utils.py +++ b/src/poetry/core/packages/utils/utils.py @@ -14,16 +14,16 @@ from urllib.parse import urlsplit from urllib.request import url2pathname +from poetry.core.constraints.version import Version +from poetry.core.constraints.version import VersionRange +from poetry.core.constraints.version import parse_constraint from poetry.core.pyproject.toml import PyProjectTOML -from poetry.core.semver.helpers import parse_constraint -from poetry.core.semver.version import Version -from poetry.core.semver.version_range import VersionRange from poetry.core.version.markers import dnf if TYPE_CHECKING: from poetry.core.constraints.generic import BaseConstraint - from poetry.core.semver.version_constraint import VersionConstraint + from poetry.core.constraints.version import VersionConstraint from poetry.core.version.markers import BaseMarker # Even though we've `from __future__ import annotations`, mypy doesn't seem to like @@ -206,7 +206,7 @@ def create_nested_marker( from poetry.core.constraints.generic import Constraint from poetry.core.constraints.generic import MultiConstraint from poetry.core.constraints.generic import UnionConstraint - from poetry.core.semver.version_union import VersionUnion + from poetry.core.constraints.version import VersionUnion if constraint.is_any(): return "" @@ -297,8 +297,8 @@ def create_nested_marker( def get_python_constraint_from_marker( marker: BaseMarker, ) -> VersionConstraint: - from poetry.core.semver.empty_constraint import EmptyConstraint - from poetry.core.semver.version_range import VersionRange + from poetry.core.constraints.version import EmptyConstraint + from poetry.core.constraints.version import VersionRange python_marker = marker.only("python_version", "python_full_version") if python_marker.is_any(): diff --git a/src/poetry/core/version/helpers.py b/src/poetry/core/version/helpers.py index 435d32aff..eafac8fd9 100644 --- a/src/poetry/core/version/helpers.py +++ b/src/poetry/core/version/helpers.py @@ -2,13 +2,13 @@ from typing import TYPE_CHECKING -from poetry.core.semver.helpers import parse_constraint -from poetry.core.semver.version import Version -from poetry.core.semver.version_union import VersionUnion +from poetry.core.constraints.version import Version +from poetry.core.constraints.version import VersionUnion +from poetry.core.constraints.version import parse_constraint if TYPE_CHECKING: - from poetry.core.semver.version_constraint import VersionConstraint + from poetry.core.constraints.version import VersionConstraint PYTHON_VERSION = [ "2.7.*", diff --git a/src/poetry/core/version/markers.py b/src/poetry/core/version/markers.py index 28a1c83f5..cb2d4fcb5 100644 --- a/src/poetry/core/version/markers.py +++ b/src/poetry/core/version/markers.py @@ -8,7 +8,7 @@ from typing import Callable from typing import Iterable -from poetry.core.semver.version_constraint import VersionConstraint +from poetry.core.constraints.version import VersionConstraint from poetry.core.version.grammars import GRAMMAR_PEP_508_MARKERS from poetry.core.version.parser import Parser @@ -187,7 +187,9 @@ def __init__( from poetry.core.constraints.generic import ( parse_constraint as parse_generic_constraint, ) - from poetry.core.semver.helpers import parse_constraint + from poetry.core.constraints.version import ( + parse_constraint as parse_version_constraint, + ) self._constraint: BaseConstraint | VersionConstraint self._parser: Callable[[str], BaseConstraint | VersionConstraint] @@ -207,7 +209,7 @@ def __init__( self._parser = parse_generic_constraint if name in self._VERSION_LIKE_MARKER_NAME: - self._parser = parse_constraint + self._parser = parse_version_constraint if self._operator in {"in", "not in"}: versions = [] @@ -321,9 +323,7 @@ def invert(self) -> BaseMarker: # This one is more tricky to handle # since it's technically a multi marker # so the inverse will be a union of inverse - from poetry.core.semver.version_range_constraint import ( - VersionRangeConstraint, - ) + from poetry.core.constraints.version import VersionRangeConstraint if not isinstance(self._constraint, VersionRangeConstraint): # The constraint must be a version range, otherwise diff --git a/src/poetry/core/version/requirements.py b/src/poetry/core/version/requirements.py index b20de2ffd..cadc28f7e 100644 --- a/src/poetry/core/version/requirements.py +++ b/src/poetry/core/version/requirements.py @@ -2,8 +2,8 @@ import urllib.parse as urlparse -from poetry.core.semver.exceptions import ParseConstraintError -from poetry.core.semver.helpers import parse_constraint +from poetry.core.constraints.version import parse_constraint +from poetry.core.constraints.version.exceptions import ParseConstraintError from poetry.core.version.grammars import GRAMMAR_PEP_508_CONSTRAINTS from poetry.core.version.markers import _compact_markers from poetry.core.version.parser import Parser diff --git a/src/poetry/core/semver/__init__.py b/tests/constraints/version/__init__.py similarity index 100% rename from src/poetry/core/semver/__init__.py rename to tests/constraints/version/__init__.py diff --git a/tests/semver/test_helpers.py b/tests/constraints/version/test_helpers.py similarity index 98% rename from tests/semver/test_helpers.py rename to tests/constraints/version/test_helpers.py index 41d0cab30..a0f79627e 100644 --- a/tests/semver/test_helpers.py +++ b/tests/constraints/version/test_helpers.py @@ -2,10 +2,10 @@ import pytest -from poetry.core.semver.helpers import parse_constraint -from poetry.core.semver.version import Version -from poetry.core.semver.version_range import VersionRange -from poetry.core.semver.version_union import VersionUnion +from poetry.core.constraints.version import Version +from poetry.core.constraints.version import VersionRange +from poetry.core.constraints.version import VersionUnion +from poetry.core.constraints.version import parse_constraint from poetry.core.version.pep440 import ReleaseTag diff --git a/tests/semver/test_parse_constraint.py b/tests/constraints/version/test_parse_constraint.py similarity index 96% rename from tests/semver/test_parse_constraint.py rename to tests/constraints/version/test_parse_constraint.py index ae6f2d3a1..c27a7b2cf 100644 --- a/tests/semver/test_parse_constraint.py +++ b/tests/constraints/version/test_parse_constraint.py @@ -2,10 +2,10 @@ import pytest -from poetry.core.semver.helpers import parse_constraint -from poetry.core.semver.version import Version -from poetry.core.semver.version_range import VersionRange -from poetry.core.semver.version_union import VersionUnion +from poetry.core.constraints.version import Version +from poetry.core.constraints.version import VersionRange +from poetry.core.constraints.version import VersionUnion +from poetry.core.constraints.version import parse_constraint from poetry.core.version.pep440 import ReleaseTag diff --git a/tests/semver/test_utils.py b/tests/constraints/version/test_utils.py similarity index 89% rename from tests/semver/test_utils.py rename to tests/constraints/version/test_utils.py index 413cac69a..f562c8798 100644 --- a/tests/semver/test_utils.py +++ b/tests/constraints/version/test_utils.py @@ -4,14 +4,14 @@ import pytest -from poetry.core.semver.empty_constraint import EmptyConstraint -from poetry.core.semver.util import constraint_regions -from poetry.core.semver.version import Version -from poetry.core.semver.version_range import VersionRange +from poetry.core.constraints.version import EmptyConstraint +from poetry.core.constraints.version import Version +from poetry.core.constraints.version import VersionRange +from poetry.core.constraints.version import constraint_regions if TYPE_CHECKING: - from poetry.core.semver.version_constraint import VersionConstraint + from poetry.core.constraints.version import VersionConstraint PY27 = Version.parse("2.7") diff --git a/tests/semver/test_version.py b/tests/constraints/version/test_version.py similarity index 98% rename from tests/semver/test_version.py rename to tests/constraints/version/test_version.py index a1c333552..c8469a400 100644 --- a/tests/semver/test_version.py +++ b/tests/constraints/version/test_version.py @@ -4,15 +4,15 @@ import pytest -from poetry.core.semver.empty_constraint import EmptyConstraint -from poetry.core.semver.version import Version -from poetry.core.semver.version_range import VersionRange +from poetry.core.constraints.version import EmptyConstraint +from poetry.core.constraints.version import Version +from poetry.core.constraints.version import VersionRange from poetry.core.version.exceptions import InvalidVersion from poetry.core.version.pep440 import ReleaseTag if TYPE_CHECKING: - from poetry.core.semver.version_constraint import VersionConstraint + from poetry.core.constraints.version import VersionConstraint @pytest.mark.parametrize( diff --git a/tests/semver/test_version_range.py b/tests/constraints/version/test_version_range.py similarity index 98% rename from tests/semver/test_version_range.py rename to tests/constraints/version/test_version_range.py index 9cd414530..fcac2477d 100644 --- a/tests/semver/test_version_range.py +++ b/tests/constraints/version/test_version_range.py @@ -2,9 +2,9 @@ import pytest -from poetry.core.semver.empty_constraint import EmptyConstraint -from poetry.core.semver.version import Version -from poetry.core.semver.version_range import VersionRange +from poetry.core.constraints.version import EmptyConstraint +from poetry.core.constraints.version import Version +from poetry.core.constraints.version import VersionRange @pytest.fixture() diff --git a/tests/packages/test_dependency.py b/tests/packages/test_dependency.py index bdcb3aef6..a2aef3840 100644 --- a/tests/packages/test_dependency.py +++ b/tests/packages/test_dependency.py @@ -2,8 +2,8 @@ import pytest +from poetry.core.constraints.version.exceptions import ParseConstraintError from poetry.core.packages.dependency import Dependency -from poetry.core.semver.exceptions import ParseConstraintError from poetry.core.version.markers import parse_marker diff --git a/tests/packages/test_main.py b/tests/packages/test_main.py index 0c43597c2..6f9c31557 100644 --- a/tests/packages/test_main.py +++ b/tests/packages/test_main.py @@ -2,10 +2,10 @@ from typing import cast +from poetry.core.constraints.version import Version from poetry.core.packages.dependency import Dependency from poetry.core.packages.url_dependency import URLDependency from poetry.core.packages.vcs_dependency import VCSDependency -from poetry.core.semver.version import Version def test_dependency_from_pep_508() -> None: diff --git a/tests/packages/test_package.py b/tests/packages/test_package.py index 610870a57..77787ee64 100644 --- a/tests/packages/test_package.py +++ b/tests/packages/test_package.py @@ -7,6 +7,7 @@ import pytest +from poetry.core.constraints.version import Version from poetry.core.factory import Factory from poetry.core.packages.dependency import Dependency from poetry.core.packages.dependency_group import DependencyGroup @@ -16,7 +17,6 @@ from poetry.core.packages.project_package import ProjectPackage from poetry.core.packages.url_dependency import URLDependency from poetry.core.packages.vcs_dependency import VCSDependency -from poetry.core.semver.version import Version @pytest.fixture() diff --git a/tests/packages/utils/test_utils.py b/tests/packages/utils/test_utils.py index 0e83661c9..a9949752e 100644 --- a/tests/packages/utils/test_utils.py +++ b/tests/packages/utils/test_utils.py @@ -5,11 +5,11 @@ import pytest from poetry.core.constraints.generic import parse_constraint as parse_generic_constraint +from poetry.core.constraints.version import parse_constraint as parse_version_constraint from poetry.core.packages.utils.utils import convert_markers from poetry.core.packages.utils.utils import create_nested_marker from poetry.core.packages.utils.utils import get_python_constraint_from_marker from poetry.core.packages.utils.utils import is_python_project -from poetry.core.semver.helpers import parse_constraint as parse_version_constraint from poetry.core.version.markers import parse_marker diff --git a/tests/semver/__init__.py b/tests/semver/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/tests/test_factory.py b/tests/test_factory.py index 3849d4d4d..6415473a2 100644 --- a/tests/test_factory.py +++ b/tests/test_factory.py @@ -7,10 +7,10 @@ import pytest +from poetry.core.constraints.version import parse_constraint from poetry.core.factory import Factory from poetry.core.packages.url_dependency import URLDependency from poetry.core.packages.vcs_dependency import VCSDependency -from poetry.core.semver.helpers import parse_constraint from poetry.core.toml import TOMLFile from poetry.core.version.markers import SingleMarker diff --git a/tests/version/test_requirements.py b/tests/version/test_requirements.py index 06ff17ff6..5c0e289e1 100644 --- a/tests/version/test_requirements.py +++ b/tests/version/test_requirements.py @@ -6,7 +6,7 @@ import pytest -from poetry.core.semver.helpers import parse_constraint +from poetry.core.constraints.version import parse_constraint from poetry.core.version.requirements import InvalidRequirement from poetry.core.version.requirements import Requirement From ac7a3bee48950366d0b52ee2b08e2ac89445b77f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Randy=20D=C3=B6ring?= <30527984+radoering@users.noreply.github.com> Date: Fri, 23 Sep 2022 16:51:58 +0200 Subject: [PATCH 3/4] refactor: deprecate poetry.core.packages.constraints and poetry.core.semver --- .../core/packages/constraints/__init__.py | 13 +++++++++++++ src/poetry/core/semver/__init__.py | 10 ++++++++++ src/poetry/core/semver/empty_constraint.py | 6 ++++++ src/poetry/core/semver/exceptions.py | 6 ++++++ src/poetry/core/semver/helpers.py | 6 ++++++ src/poetry/core/semver/patterns.py | 18 ++++++++++++++++++ src/poetry/core/semver/util.py | 6 ++++++ src/poetry/core/semver/version.py | 6 ++++++ src/poetry/core/semver/version_constraint.py | 6 ++++++ src/poetry/core/semver/version_range.py | 6 ++++++ .../core/semver/version_range_constraint.py | 6 ++++++ src/poetry/core/semver/version_union.py | 6 ++++++ 12 files changed, 95 insertions(+) create mode 100644 src/poetry/core/packages/constraints/__init__.py create mode 100644 src/poetry/core/semver/__init__.py create mode 100644 src/poetry/core/semver/empty_constraint.py create mode 100644 src/poetry/core/semver/exceptions.py create mode 100644 src/poetry/core/semver/helpers.py create mode 100644 src/poetry/core/semver/patterns.py create mode 100644 src/poetry/core/semver/util.py create mode 100644 src/poetry/core/semver/version.py create mode 100644 src/poetry/core/semver/version_constraint.py create mode 100644 src/poetry/core/semver/version_range.py create mode 100644 src/poetry/core/semver/version_range_constraint.py create mode 100644 src/poetry/core/semver/version_union.py diff --git a/src/poetry/core/packages/constraints/__init__.py b/src/poetry/core/packages/constraints/__init__.py new file mode 100644 index 000000000..bbd5a4e4d --- /dev/null +++ b/src/poetry/core/packages/constraints/__init__.py @@ -0,0 +1,13 @@ +from __future__ import annotations + +import warnings + + +warnings.warn( + "poetry.core.packages.constraints is deprecated." + " Use poetry.core.constraints.generic instead.", + DeprecationWarning, + stacklevel=2, +) + +from poetry.core.constraints.generic import * # noqa: E402, F401, F403 diff --git a/src/poetry/core/semver/__init__.py b/src/poetry/core/semver/__init__.py new file mode 100644 index 000000000..be3955935 --- /dev/null +++ b/src/poetry/core/semver/__init__.py @@ -0,0 +1,10 @@ +from __future__ import annotations + +import warnings + + +warnings.warn( + "poetry.core.semver is deprecated. Use poetry.core.constraints.version instead.", + DeprecationWarning, + stacklevel=2, +) diff --git a/src/poetry/core/semver/empty_constraint.py b/src/poetry/core/semver/empty_constraint.py new file mode 100644 index 000000000..8559866dc --- /dev/null +++ b/src/poetry/core/semver/empty_constraint.py @@ -0,0 +1,6 @@ +from __future__ import annotations + +from poetry.core.constraints.version import EmptyConstraint + + +__all__ = ["EmptyConstraint"] diff --git a/src/poetry/core/semver/exceptions.py b/src/poetry/core/semver/exceptions.py new file mode 100644 index 000000000..7f7bfaef8 --- /dev/null +++ b/src/poetry/core/semver/exceptions.py @@ -0,0 +1,6 @@ +from __future__ import annotations + +from poetry.core.constraints.version.exceptions import ParseConstraintError + + +__all__ = ["ParseConstraintError"] diff --git a/src/poetry/core/semver/helpers.py b/src/poetry/core/semver/helpers.py new file mode 100644 index 000000000..5b5d8e59d --- /dev/null +++ b/src/poetry/core/semver/helpers.py @@ -0,0 +1,6 @@ +from __future__ import annotations + +from poetry.core.constraints.version import parse_constraint + + +__all__ = ["parse_constraint"] diff --git a/src/poetry/core/semver/patterns.py b/src/poetry/core/semver/patterns.py new file mode 100644 index 000000000..b2d865859 --- /dev/null +++ b/src/poetry/core/semver/patterns.py @@ -0,0 +1,18 @@ +from __future__ import annotations + +from poetry.core.constraints.version.patterns import BASIC_CONSTRAINT +from poetry.core.constraints.version.patterns import CARET_CONSTRAINT +from poetry.core.constraints.version.patterns import COMPLETE_VERSION +from poetry.core.constraints.version.patterns import TILDE_CONSTRAINT +from poetry.core.constraints.version.patterns import TILDE_PEP440_CONSTRAINT +from poetry.core.constraints.version.patterns import X_CONSTRAINT + + +__all__ = [ + "COMPLETE_VERSION", + "CARET_CONSTRAINT", + "TILDE_CONSTRAINT", + "TILDE_PEP440_CONSTRAINT", + "X_CONSTRAINT", + "BASIC_CONSTRAINT", +] diff --git a/src/poetry/core/semver/util.py b/src/poetry/core/semver/util.py new file mode 100644 index 000000000..eabcc06b0 --- /dev/null +++ b/src/poetry/core/semver/util.py @@ -0,0 +1,6 @@ +from __future__ import annotations + +from poetry.core.constraints.version import constraint_regions + + +__all__ = ["constraint_regions"] diff --git a/src/poetry/core/semver/version.py b/src/poetry/core/semver/version.py new file mode 100644 index 000000000..d4ec91afb --- /dev/null +++ b/src/poetry/core/semver/version.py @@ -0,0 +1,6 @@ +from __future__ import annotations + +from poetry.core.constraints.version import Version + + +__all__ = ["Version"] diff --git a/src/poetry/core/semver/version_constraint.py b/src/poetry/core/semver/version_constraint.py new file mode 100644 index 000000000..8cc5d9478 --- /dev/null +++ b/src/poetry/core/semver/version_constraint.py @@ -0,0 +1,6 @@ +from __future__ import annotations + +from poetry.core.constraints.version import VersionConstraint + + +__all__ = ["VersionConstraint"] diff --git a/src/poetry/core/semver/version_range.py b/src/poetry/core/semver/version_range.py new file mode 100644 index 000000000..76117c885 --- /dev/null +++ b/src/poetry/core/semver/version_range.py @@ -0,0 +1,6 @@ +from __future__ import annotations + +from poetry.core.constraints.version import VersionRange + + +__all__ = ["VersionRange"] diff --git a/src/poetry/core/semver/version_range_constraint.py b/src/poetry/core/semver/version_range_constraint.py new file mode 100644 index 000000000..7af781cd5 --- /dev/null +++ b/src/poetry/core/semver/version_range_constraint.py @@ -0,0 +1,6 @@ +from __future__ import annotations + +from poetry.core.constraints.version import VersionRangeConstraint + + +__all__ = ["VersionRangeConstraint"] diff --git a/src/poetry/core/semver/version_union.py b/src/poetry/core/semver/version_union.py new file mode 100644 index 000000000..567c17cff --- /dev/null +++ b/src/poetry/core/semver/version_union.py @@ -0,0 +1,6 @@ +from __future__ import annotations + +from poetry.core.constraints.version import VersionUnion + + +__all__ = ["VersionUnion"] From cd8b0794b47d9504f2d56f9f3fddbe8d52d18f01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Randy=20D=C3=B6ring?= <30527984+radoering@users.noreply.github.com> Date: Sat, 24 Sep 2022 18:17:36 +0200 Subject: [PATCH 4/4] refactor: move constraint parsing of generic constraints from __init__ into parser module and rename module for constraint parsing of version constraints from helpers to parser --- .../core/constraints/generic/__init__.py | 54 +--------------- src/poetry/core/constraints/generic/parser.py | 64 +++++++++++++++++++ .../core/constraints/version/__init__.py | 2 +- .../version/{helpers.py => parser.py} | 0 .../core/packages/constraints/__init__.py | 21 +++++- src/poetry/core/semver/helpers.py | 5 +- 6 files changed, 89 insertions(+), 57 deletions(-) create mode 100644 src/poetry/core/constraints/generic/parser.py rename src/poetry/core/constraints/version/{helpers.py => parser.py} (100%) diff --git a/src/poetry/core/constraints/generic/__init__.py b/src/poetry/core/constraints/generic/__init__.py index 1c1beeb8f..ccd7f5a6b 100644 --- a/src/poetry/core/constraints/generic/__init__.py +++ b/src/poetry/core/constraints/generic/__init__.py @@ -1,66 +1,14 @@ from __future__ import annotations -import re - from poetry.core.constraints.generic.any_constraint import AnyConstraint from poetry.core.constraints.generic.base_constraint import BaseConstraint from poetry.core.constraints.generic.constraint import Constraint from poetry.core.constraints.generic.empty_constraint import EmptyConstraint from poetry.core.constraints.generic.multi_constraint import MultiConstraint +from poetry.core.constraints.generic.parser import parse_constraint from poetry.core.constraints.generic.union_constraint import UnionConstraint -BASIC_CONSTRAINT = re.compile(r"^(!?==?)?\s*([^\s]+?)\s*$") - - -def parse_constraint(constraints: str) -> BaseConstraint: - if constraints == "*": - return AnyConstraint() - - or_constraints = re.split(r"\s*\|\|?\s*", constraints.strip()) - or_groups = [] - for constraints in or_constraints: - and_constraints = re.split( - r"(?< ,]) *(? 1: - for constraint in and_constraints: - constraint_objects.append(parse_single_constraint(constraint)) - else: - constraint_objects.append(parse_single_constraint(and_constraints[0])) - - if len(constraint_objects) == 1: - constraint = constraint_objects[0] - else: - constraint = constraint_objects[0] - for next_constraint in constraint_objects[1:]: - constraint = constraint.intersect(next_constraint) - - or_groups.append(constraint) - - if len(or_groups) == 1: - return or_groups[0] - else: - return UnionConstraint(*or_groups) - - -def parse_single_constraint(constraint: str) -> Constraint: - # Basic comparator - m = BASIC_CONSTRAINT.match(constraint) - if m: - op = m.group(1) - if op is None: - op = "==" - - version = m.group(2).strip() - - return Constraint(version, op) - - raise ValueError(f"Could not parse version constraint: {constraint}") - - __all__ = [ "AnyConstraint", "BaseConstraint", diff --git a/src/poetry/core/constraints/generic/parser.py b/src/poetry/core/constraints/generic/parser.py new file mode 100644 index 000000000..7ef2b1a29 --- /dev/null +++ b/src/poetry/core/constraints/generic/parser.py @@ -0,0 +1,64 @@ +from __future__ import annotations + +import re + +from typing import TYPE_CHECKING + +from poetry.core.constraints.generic.any_constraint import AnyConstraint +from poetry.core.constraints.generic.constraint import Constraint +from poetry.core.constraints.generic.union_constraint import UnionConstraint + + +if TYPE_CHECKING: + from poetry.core.constraints.generic.base_constraint import BaseConstraint + + +BASIC_CONSTRAINT = re.compile(r"^(!?==?)?\s*([^\s]+?)\s*$") + + +def parse_constraint(constraints: str) -> BaseConstraint: + if constraints == "*": + return AnyConstraint() + + or_constraints = re.split(r"\s*\|\|?\s*", constraints.strip()) + or_groups = [] + for constraints in or_constraints: + and_constraints = re.split( + r"(?< ,]) *(? 1: + for constraint in and_constraints: + constraint_objects.append(parse_single_constraint(constraint)) + else: + constraint_objects.append(parse_single_constraint(and_constraints[0])) + + if len(constraint_objects) == 1: + constraint = constraint_objects[0] + else: + constraint = constraint_objects[0] + for next_constraint in constraint_objects[1:]: + constraint = constraint.intersect(next_constraint) + + or_groups.append(constraint) + + if len(or_groups) == 1: + return or_groups[0] + else: + return UnionConstraint(*or_groups) + + +def parse_single_constraint(constraint: str) -> Constraint: + # Basic comparator + m = BASIC_CONSTRAINT.match(constraint) + if m: + op = m.group(1) + if op is None: + op = "==" + + version = m.group(2).strip() + + return Constraint(version, op) + + raise ValueError(f"Could not parse version constraint: {constraint}") diff --git a/src/poetry/core/constraints/version/__init__.py b/src/poetry/core/constraints/version/__init__.py index 14a4ae181..ad85d819d 100644 --- a/src/poetry/core/constraints/version/__init__.py +++ b/src/poetry/core/constraints/version/__init__.py @@ -1,7 +1,7 @@ from __future__ import annotations from poetry.core.constraints.version.empty_constraint import EmptyConstraint -from poetry.core.constraints.version.helpers import parse_constraint +from poetry.core.constraints.version.parser import parse_constraint from poetry.core.constraints.version.util import constraint_regions from poetry.core.constraints.version.version import Version from poetry.core.constraints.version.version_constraint import VersionConstraint diff --git a/src/poetry/core/constraints/version/helpers.py b/src/poetry/core/constraints/version/parser.py similarity index 100% rename from src/poetry/core/constraints/version/helpers.py rename to src/poetry/core/constraints/version/parser.py diff --git a/src/poetry/core/packages/constraints/__init__.py b/src/poetry/core/packages/constraints/__init__.py index bbd5a4e4d..585f2219d 100644 --- a/src/poetry/core/packages/constraints/__init__.py +++ b/src/poetry/core/packages/constraints/__init__.py @@ -2,6 +2,15 @@ import warnings +from poetry.core.constraints.generic import AnyConstraint +from poetry.core.constraints.generic import BaseConstraint +from poetry.core.constraints.generic import Constraint +from poetry.core.constraints.generic import EmptyConstraint +from poetry.core.constraints.generic import MultiConstraint +from poetry.core.constraints.generic import UnionConstraint +from poetry.core.constraints.generic import parse_constraint +from poetry.core.constraints.generic.parser import parse_single_constraint + warnings.warn( "poetry.core.packages.constraints is deprecated." @@ -10,4 +19,14 @@ stacklevel=2, ) -from poetry.core.constraints.generic import * # noqa: E402, F401, F403 + +__all__ = [ + "AnyConstraint", + "BaseConstraint", + "Constraint", + "EmptyConstraint", + "MultiConstraint", + "UnionConstraint", + "parse_constraint", + "parse_single_constraint", +] diff --git a/src/poetry/core/semver/helpers.py b/src/poetry/core/semver/helpers.py index 5b5d8e59d..065d366f3 100644 --- a/src/poetry/core/semver/helpers.py +++ b/src/poetry/core/semver/helpers.py @@ -1,6 +1,7 @@ from __future__ import annotations -from poetry.core.constraints.version import parse_constraint +from poetry.core.constraints.version.parser import parse_constraint +from poetry.core.constraints.version.parser import parse_single_constraint -__all__ = ["parse_constraint"] +__all__ = ["parse_constraint", "parse_single_constraint"]