diff --git a/newsfragments/1578.bugfix.rst b/newsfragments/1578.bugfix.rst new file mode 100644 index 0000000000..053731deb2 --- /dev/null +++ b/newsfragments/1578.bugfix.rst @@ -0,0 +1 @@ +Restored reading ``Project-URL`` fields into ``DistributionMetadata.project_urls`` when loading ``PKG-INFO`` metadata. diff --git a/setuptools/_core_metadata.py b/setuptools/_core_metadata.py index a52d5cf755..655fe4915e 100644 --- a/setuptools/_core_metadata.py +++ b/setuptools/_core_metadata.py @@ -65,6 +65,16 @@ def _read_list_from_msg(msg: Message, field: str) -> list[str] | None: return values +def _read_project_urls_from_msg(msg: Message) -> dict[str, str]: + """Read Message Project-URL fields as a label-to-URL mapping.""" + project_urls = _read_list_from_msg(msg, 'project-url') or [] + return dict( + (label.strip(), url.strip()) + for project_url in project_urls + for label, _, url in (project_url.partition(','),) + ) + + def _read_payload_from_msg(msg: Message) -> str | None: value = str(msg.get_payload()).strip() if value == 'UNKNOWN' or not value: @@ -100,6 +110,7 @@ def read_pkg_file(self, file): self.platforms = _read_list_from_msg(msg, 'platform') self.classifiers = _read_list_from_msg(msg, 'classifier') + self.project_urls = _read_project_urls_from_msg(msg) # PEP 314 - these fields only exist in 1.1 if self.metadata_version == Version('1.1'): diff --git a/setuptools/tests/test_core_metadata.py b/setuptools/tests/test_core_metadata.py index 5ec6df3dfe..280904cb9f 100644 --- a/setuptools/tests/test_core_metadata.py +++ b/setuptools/tests/test_core_metadata.py @@ -102,12 +102,9 @@ def __read_test_cases(): python_requires='>=3.7', ), ), - pytest.param( + ( 'Metadata Version 1.2: Project-Url', params(project_urls=dict(Foo='https://example.bar')), - marks=pytest.mark.xfail( - reason="Issue #1578: project_urls not read", - ), ), ( 'Metadata Version 2.1: Long Description Content Type',