Skip to content

Commit edb5f7a

Browse files
Check for empty description when converting metadata (#646)
1 parent 426b8dd commit edb5f7a

File tree

3 files changed

+46
-7
lines changed

3 files changed

+46
-7
lines changed

docs/news.rst

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
Release Notes
22
=============
33

4+
**UNRELEASED**
5+
6+
- Fixed an exception when calling the ``convert`` command with an empty description
7+
field
8+
49
**0.45.1 (2024-11-23)**
510

611
- Fixed pure Python wheels converted from eggs and wininst files having the ABI tag in

src/wheel/cli/convert.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -72,13 +72,17 @@ def convert_pkg_info(pkginfo: str, metadata: Message):
7272

7373
if key_lower == "description":
7474
description_lines = value.splitlines()
75-
value = "\n".join(
76-
(
77-
description_lines[0].lstrip(),
78-
dedent("\n".join(description_lines[1:])),
79-
"\n",
75+
if description_lines:
76+
value = "\n".join(
77+
(
78+
description_lines[0].lstrip(),
79+
dedent("\n".join(description_lines[1:])),
80+
"\n",
81+
)
8082
)
81-
)
83+
else:
84+
value = "\n"
85+
8286
metadata.set_payload(value)
8387
elif key_lower == "home-page":
8488
metadata.add_header("Project-URL", f"Homepage, {value}")

tests/cli/test_convert.py

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import os.path
44
import zipfile
5+
from email.message import Message
56
from pathlib import Path
67
from textwrap import dedent
78

@@ -10,7 +11,7 @@
1011
from pytest import CaptureFixture, TempPathFactory
1112

1213
import wheel
13-
from wheel.cli.convert import convert, egg_filename_re
14+
from wheel.cli.convert import convert, convert_pkg_info, egg_filename_re
1415
from wheel.wheelfile import WheelFile
1516

1617
PKG_INFO = """\
@@ -262,3 +263,32 @@ def test_convert_bdist_wininst(
262263
assert wf.read("sampledist-1.0.0.dist-info/entry_points.txt") == b""
263264

264265
assert capsys.readouterr().out == f"{bdist_wininst_path}...OK\n"
266+
267+
268+
def test_convert_pkg_info_with_empty_description():
269+
# Regression test for https://github.com/pypa/wheel/issues/645
270+
pkginfo = """\
271+
Metadata-Version: 2.1
272+
Name: Sampledist
273+
Version: 1.0.0
274+
Home-page: https://example.com
275+
Download-URL: https://example.com/sampledist
276+
Description:"""
277+
message = Message()
278+
convert_pkg_info(pkginfo, message)
279+
assert message.get_all("Name") == ["Sampledist"]
280+
assert message.get_payload() == "\n"
281+
282+
283+
def test_convert_pkg_info_with_one_line_description():
284+
pkginfo = """\
285+
Metadata-Version: 2.1
286+
Name: Sampledist
287+
Version: 1.0.0
288+
Home-page: https://example.com
289+
Download-URL: https://example.com/sampledist
290+
Description: My cool package"""
291+
message = Message()
292+
convert_pkg_info(pkginfo, message)
293+
assert message.get_all("Name") == ["Sampledist"]
294+
assert message.get_payload() == "My cool package\n\n\n"

0 commit comments

Comments
 (0)