From eaea7f15c85a4e69aa175c81e745329d0ca2dee6 Mon Sep 17 00:00:00 2001 From: Henry Schreiner Date: Fri, 13 Sep 2024 00:32:12 -0400 Subject: [PATCH] fix: add multiline warning Signed-off-by: Henry Schreiner --- pyproject_metadata/__init__.py | 2 ++ tests/test_rfc822.py | 10 +++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/pyproject_metadata/__init__.py b/pyproject_metadata/__init__.py index 2d1bf99..7777115 100644 --- a/pyproject_metadata/__init__.py +++ b/pyproject_metadata/__init__.py @@ -133,6 +133,8 @@ def __setitem__(self, name: str, value: str | None) -> None: if not value: return if '\n' in value: + msg = f'"{name}" should not be multiline; indenting to avoid breakage' + warnings.warn(msg, ConfigurationWarning, stacklevel=2) value = value.replace('\n', '\n ') self.message[name] = value diff --git a/tests/test_rfc822.py b/tests/test_rfc822.py index a7e8300..cd2ddb5 100644 --- a/tests/test_rfc822.py +++ b/tests/test_rfc822.py @@ -2,6 +2,7 @@ from __future__ import annotations +import re import textwrap import pytest @@ -99,7 +100,14 @@ def test_headers(items: list[tuple[str, str]], data: str) -> None: smart_message = pyproject_metadata._SmartMessageSetter(message) for name, value in items: - smart_message[name] = value + if value and '\n' in value: + msg = '"ItemB" should not be multiline; indenting to avoid breakage' + with pytest.warns( + pyproject_metadata.ConfigurationWarning, match=re.escape(msg) + ): + smart_message[name] = value + else: + smart_message[name] = value data = textwrap.dedent(data) + '\n' assert str(message) == data