From a89b9f7bc6f3691c5a6bf531915d53219ef6d1dd Mon Sep 17 00:00:00 2001 From: Anil Kulkarni Date: Fri, 3 Jan 2025 15:06:20 -0800 Subject: [PATCH] Check for empty description when converting metadata To prevent an exception, check for an empty description Fixes: #645 --- src/wheel/cli/convert.py | 5 ++++- tests/cli/test_convert.py | 30 +++++++++++++++++++++++++++++- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/wheel/cli/convert.py b/src/wheel/cli/convert.py index 61d4775c..ace9214d 100644 --- a/src/wheel/cli/convert.py +++ b/src/wheel/cli/convert.py @@ -72,7 +72,10 @@ def convert_pkg_info(pkginfo: str, metadata: Message): if key_lower == "description": description_lines = value.splitlines() - value = "\n".join( + if len(description_lines) == 0: + value = '\n' + else: + value = "\n".join( ( description_lines[0].lstrip(), dedent("\n".join(description_lines[1:])), diff --git a/tests/cli/test_convert.py b/tests/cli/test_convert.py index 62884c2d..ae5ee42f 100644 --- a/tests/cli/test_convert.py +++ b/tests/cli/test_convert.py @@ -2,6 +2,7 @@ import os.path import zipfile +from email.message import Message from pathlib import Path from textwrap import dedent @@ -10,7 +11,7 @@ from pytest import CaptureFixture, TempPathFactory import wheel -from wheel.cli.convert import convert, egg_filename_re +from wheel.cli.convert import convert, convert_pkg_info, egg_filename_re from wheel.wheelfile import WheelFile PKG_INFO = """\ @@ -262,3 +263,30 @@ def test_convert_bdist_wininst( assert wf.read("sampledist-1.0.0.dist-info/entry_points.txt") == b"" assert capsys.readouterr().out == f"{bdist_wininst_path}...OK\n" + +def test_convert_pkg_info_with_empty_description(): + # Regression test for https://github.com/pypa/wheel/issues/645 + pkginfo = """\ +Metadata-Version: 2.1 +Name: Sampledist +Version: 1.0.0 +Home-page: https://example.com +Download-URL: https://example.com/sampledist +Description:""" + message = Message() + convert_pkg_info(pkginfo, message) + assert message.get_all('Name') == ['Sampledist'] + assert message.get_payload() == '\n' + +def test_convert_pkg_info_with_one_line_description(): + pkginfo = """\ +Metadata-Version: 2.1 +Name: Sampledist +Version: 1.0.0 +Home-page: https://example.com +Download-URL: https://example.com/sampledist +Description: My cool package""" + message = Message() + convert_pkg_info(pkginfo, message) + assert message.get_all('Name') == ['Sampledist'] + assert message.get_payload() == 'My cool package\n\n\n'