Skip to content

Commit f82feac

Browse files
perf(wheel): cache supported tags set
1 parent 050a405 commit f82feac

3 files changed

Lines changed: 37 additions & 1 deletion

File tree

src/poetry/utils/env/base_env.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ def __init__(self, path: Path, base: Path | None = None) -> None:
8080

8181
self._site_packages: SitePackages | None = None
8282
self._supported_tags: list[Tag] | None = None
83+
self._supported_tags_set: set[Tag] | None = None
8384
self._purelib: Path | None = None
8485
self._platlib: Path | None = None
8586
self._script_dirs: list[Path] | None = None
@@ -359,6 +360,13 @@ def supported_tags(self) -> list[Tag]:
359360

360361
return self._supported_tags
361362

363+
@property
364+
def supported_tags_set(self) -> set[Tag]:
365+
if self._supported_tags_set is None:
366+
self._supported_tags_set = set(self.supported_tags)
367+
368+
return self._supported_tags_set
369+
362370
@classmethod
363371
def get_base_prefix(cls) -> Path:
364372
real_prefix = getattr(sys, "real_prefix", None)

src/poetry/utils/wheel.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,4 +44,4 @@ def get_minimum_supported_index(self, tags: list[Tag]) -> int | None:
4444
return min(indexes) if indexes else None
4545

4646
def is_supported_by_environment(self, env: Env) -> bool:
47-
return bool(set(env.supported_tags).intersection(self.tags))
47+
return not self.tags.isdisjoint(env.supported_tags_set)

tests/utils/test_wheel.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
from __future__ import annotations
2+
3+
import pytest
4+
5+
from packaging.tags import Tag
6+
7+
from poetry.utils.env import MockEnv
8+
from poetry.utils.wheel import Wheel
9+
10+
11+
@pytest.mark.parametrize(
12+
("filename", "expected"),
13+
[
14+
("demo-1.0.0-py3-none-any.whl", True),
15+
("demo-1.0.0-cp312-cp312-win_amd64.whl", False),
16+
],
17+
)
18+
def test_wheel_is_supported_by_environment(filename: str, expected: bool) -> None:
19+
env = MockEnv(supported_tags=[Tag("py3", "none", "any")])
20+
21+
assert Wheel(filename).is_supported_by_environment(env) is expected
22+
23+
24+
def test_env_supported_tags_set_is_cached() -> None:
25+
env = MockEnv(supported_tags=[Tag("py3", "none", "any")])
26+
27+
assert env.supported_tags_set == set(env.supported_tags)
28+
assert env.supported_tags_set is env.supported_tags_set

0 commit comments

Comments
 (0)