Skip to content

Commit c93341b

Browse files
authored
perf: use filename field instead of parsing filename from URL (#10895)
This makes locking 15 % faster in some cases.
1 parent 91bfb57 commit c93341b

4 files changed

Lines changed: 38 additions & 13 deletions

File tree

poetry.lock

Lines changed: 11 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ version = "2.5.0.dev0"
44
description = "Python dependency management and packaging made easy."
55
requires-python = ">=3.10,<4.0"
66
dependencies = [
7-
"poetry-core (==2.4.0)",
7+
"poetry-core @ git+https://github.com/python-poetry/poetry-core.git",
88
"build (>=1.2.1,<2.0.0)",
99
"cachecontrol[filecache] (>=0.14.0,<0.15.0)",
1010
"cleo (>=2.1.0,<3.0.0)",

src/poetry/repositories/link_sources/json.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,10 @@ def _link_cache(self) -> LinkCache:
4646
metadata = bool(metadata_value)
4747
break
4848

49+
# use filename for performance (and strictly speaking also for correctness)
4950
link = Link(
5051
url,
52+
filename=file["filename"],
5153
requires_python=requires_python,
5254
hashes=hashes,
5355
yanked=yanked,

tests/repositories/link_sources/test_json.py

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,11 @@ def test_attributes() -> None:
2929
content = {
3030
"files": [
3131
# minimal
32-
{"url": "https://example.org/demo-0.1.whl"},
32+
{"url": "https://example.org/demo-0.1.whl", "filename": "demo-0.1.whl"},
3333
# all (with non-default values)
3434
{
3535
"url": "https://example.org/demo-0.1.tar.gz",
36+
"filename": "demo-0.1.tar.gz",
3637
"requires-python": ">=3.6",
3738
"yanked": True,
3839
"hashes": {"sha256": "abcd1234"},
@@ -79,8 +80,16 @@ def test_yanked(
7980
) -> None:
8081
content = {
8182
"files": [
82-
{"url": "https://example.org/demo-0.1.tar.gz", "yanked": yanked[0]},
83-
{"url": "https://example.org/demo-0.1.whl", "yanked": yanked[1]},
83+
{
84+
"url": "https://example.org/demo-0.1.tar.gz",
85+
"filename": "demo-0.1.tar.gz",
86+
"yanked": yanked[0],
87+
},
88+
{
89+
"url": "https://example.org/demo-0.1.whl",
90+
"filename": "demo-0.1.whl",
91+
"yanked": yanked[1],
92+
},
8493
]
8594
}
8695
if yanked[0] is None:
@@ -158,7 +167,15 @@ def test_metadata(
158167
expected_has_metadata: bool,
159168
expected_metadata_hashes: dict[str, str],
160169
) -> None:
161-
content = {"files": [{"url": "https://example.org/demo-0.1.whl", **metadata}]}
170+
content = {
171+
"files": [
172+
{
173+
"url": "https://example.org/demo-0.1.whl",
174+
"filename": "demo-0.1.whl",
175+
**metadata,
176+
}
177+
]
178+
}
162179
page = SimpleJsonPage("https://example.org", content)
163180

164181
link = next(page.links)
@@ -182,6 +199,8 @@ def test_metadata(
182199
),
183200
)
184201
def test_base_url(url: str, repo_url: str, expected: str) -> None:
185-
page = SimpleJsonPage(repo_url, {"files": [{"url": url}]})
202+
page = SimpleJsonPage(
203+
repo_url, {"files": [{"url": url, "filename": url.rpartition("/")[-1]}]}
204+
)
186205
link = next(iter(page.links))
187206
assert link.url == expected

0 commit comments

Comments
 (0)