Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions src/poetry/utils/env/base_env.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ def __init__(self, path: Path, base: Path | None = None) -> None:

self._site_packages: SitePackages | None = None
self._supported_tags: list[Tag] | None = None
self._supported_tags_set: set[Tag] | None = None
self._purelib: Path | None = None
self._platlib: Path | None = None
self._script_dirs: list[Path] | None = None
Expand Down Expand Up @@ -359,6 +360,13 @@ def supported_tags(self) -> list[Tag]:

return self._supported_tags

@property
def supported_tags_set(self) -> set[Tag]:
if self._supported_tags_set is None:
self._supported_tags_set = set(self.supported_tags)

return self._supported_tags_set

@classmethod
def get_base_prefix(cls) -> Path:
real_prefix = getattr(sys, "real_prefix", None)
Expand Down
3 changes: 3 additions & 0 deletions src/poetry/utils/env/mock_env.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,9 @@ def __init__(
self._sys_path = sys_path
self._mock_marker_env = marker_env
self._supported_tags = supported_tags
# _supported_tags_set should not be set at this point.
# We reset it after setting _supported_tags just to be sure.
self._supported_tags_set = None

@property
def platform(self) -> str:
Expand Down
2 changes: 1 addition & 1 deletion src/poetry/utils/wheel.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,4 +44,4 @@ def get_minimum_supported_index(self, tags: list[Tag]) -> int | None:
return min(indexes) if indexes else None

def is_supported_by_environment(self, env: Env) -> bool:
return bool(set(env.supported_tags).intersection(self.tags))
return not self.tags.isdisjoint(env.supported_tags_set)
36 changes: 36 additions & 0 deletions tests/utils/test_wheel.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
from __future__ import annotations

import pytest

from packaging.tags import Tag

from poetry.utils.env import MockEnv
from poetry.utils.wheel import Wheel


@pytest.mark.parametrize(
("filename", "supported_tags", "expected"),
[
("demo-1.0.0-py3-none-any.whl", [Tag("py3", "none", "any")], True),
("demo-1.0.0-cp312-cp312-win_amd64.whl", [Tag("py3", "none", "any")], False),
("demo-1.0.0-py3-none-any.whl", [], False),
(
"demo-1.0.0-py3-none-any.whl",
[Tag("cp310", "none", "any"), Tag("py3", "none", "any")],
True,
),
],
)
def test_wheel_is_supported_by_environment(
filename: str, supported_tags: list[Tag], expected: bool
) -> None:
env = MockEnv(supported_tags=supported_tags)

assert Wheel(filename).is_supported_by_environment(env) is expected
Comment thread
sourcery-ai[bot] marked this conversation as resolved.


def test_env_supported_tags_set_is_cached() -> None:
env = MockEnv(supported_tags=[Tag("py3", "none", "any")])

assert env.supported_tags_set == set(env.supported_tags)
assert env.supported_tags_set is env.supported_tags_set
Loading