Skip to content
Open
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
6 changes: 6 additions & 0 deletions src/packaging/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -270,6 +270,8 @@ def parse_wheel_filename(
if "__" in name_part or _wheel_name_regex.match(name_part) is None:
raise InvalidWheelFilename(f"Invalid project name: {filename!r}")
name = canonicalize_name(name_part)
if not is_normalized_name(name):
raise InvalidWheelFilename(f"Invalid project name: {filename!r}")

try:
version = Version(parts[1])
Expand Down Expand Up @@ -359,6 +361,10 @@ def parse_sdist_filename(filename: str) -> tuple[NormalizedName, Version]:
)

name = canonicalize_name(name_part)
if not is_normalized_name(name):
raise InvalidSdistFilename(
f"Invalid sdist filename (invalid project name): {filename!r}"
)

try:
version = Version(version_part)
Expand Down
18 changes: 4 additions & 14 deletions tests/test_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -161,20 +161,6 @@ def test_canonicalize_version_no_strip_trailing_zero(version: str) -> None:
Tag("py3", "none", "manylinux2014_x86_64"),
},
),
(
"foo_bár-1.0-py3-none-any.whl",
"foo-bár",
Version("1.0"),
(),
{Tag("py3", "none", "any")},
),
(
"foo_bár-1.0-1000-py3-none-any.whl",
"foo-bár",
Version("1.0"),
(1000, ""),
{Tag("py3", "none", "any")},
),
],
)
def test_parse_wheel_filename(
Expand All @@ -189,6 +175,8 @@ def test_parse_wheel_filename(
("foo-1.0.whl"), # Missing tags
("foo-1.0-py3-none-any.wheel"), # Incorrect file extension (`.wheel`)
("foo__bar-1.0-py3-none-any.whl"), # Invalid name (`__`)
("foo_bár-1.0-py3-none-any.whl"), # Invalid name (not normalized)
("foo_bár-1.0-1000-py3-none-any.whl"), # Invalid name with build number
("foo\n-1.0-py3-none-any.whl"), # Invalid name (`\n`)
("foo#bar-1.0-py3-none-any.whl"), # Invalid name (`#`)
("-1.0-py3-none-any.whl"), # Empty project name
Expand Down Expand Up @@ -245,6 +233,8 @@ def test_parse_sdist_filename(filename: str, name: str, version: Version) -> Non
[
("foo-1.0.xz"), # Incorrect extension
("foo1.0.tar.gz"), # Missing separator
("foo_bár-1.0.tar.gz"), # Invalid name (not normalized)
("foo_bár-1.0.zip"), # Invalid name (not normalized)
("foo-1.x.tar.gz"), # Invalid version
("-1.0.tar.gz"), # Empty project name
("-1.0.zip"), # Empty project name (zip)
Expand Down