From 054ca25fee90d7deaec0b30cb12680ae18464b09 Mon Sep 17 00:00:00 2001 From: Anderson Bravalheri Date: Tue, 29 Aug 2023 18:03:03 +0100 Subject: [PATCH 1/2] Fix missing branch on tox.ini config Here we use a specific SHA that we now is "green" to avoid problems with a moving HEAD. --- tox.ini | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tox.ini b/tox.ini index 490f1fc5e1..31a5304d30 100644 --- a/tox.ini +++ b/tox.ini @@ -1,8 +1,8 @@ [testenv] deps = # Ideally all the dependencies should be set as "extras" - # workaround for pypa/build#630 - build[virtualenv] @ git+https://github.com/jaraco/build@bugfix/630-importlib-metadata + build[virtualenv] @ git+https://github.com/pypa/build@59c1f87 + # ^-- pypa/build#630, use dev version while we wait for the new release setenv = PYTHONWARNDEFAULTENCODING = 1 SETUPTOOLS_ENFORCE_DEPRECATION = 1 From 0f64181bdbbd2bfe1234b4033aa1921e694572ee Mon Sep 17 00:00:00 2001 From: Anderson Bravalheri Date: Tue, 29 Aug 2023 18:05:46 +0100 Subject: [PATCH 2/2] Add validation tests for core metadata using 'packaging' (An independent validation library makes the confidence in the code stronger). --- setup.cfg | 1 + .../tests/config/test_apply_pyprojecttoml.py | 4 ++++ setuptools/tests/test_core_metadata.py | 17 ++++++++++++++++- tox.ini | 2 ++ 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/setup.cfg b/setup.cfg index 37122e93d8..358f302bd8 100644 --- a/setup.cfg +++ b/setup.cfg @@ -89,6 +89,7 @@ testing-integration = jaraco.envs>=2.2 build[virtualenv] filelock>=3.4.0 + packaging docs = # upstream diff --git a/setuptools/tests/config/test_apply_pyprojecttoml.py b/setuptools/tests/config/test_apply_pyprojecttoml.py index 50099df491..ffcbd318a2 100644 --- a/setuptools/tests/config/test_apply_pyprojecttoml.py +++ b/setuptools/tests/config/test_apply_pyprojecttoml.py @@ -13,6 +13,7 @@ import pytest from ini2toml.api import Translator +from packaging.metadata import Metadata import setuptools # noqa ensure monkey patch to metadata from setuptools.dist import Distribution @@ -428,6 +429,9 @@ def core_metadata(dist) -> str: dist.metadata.write_pkg_file(buffer) pkg_file_txt = buffer.getvalue() + # Make sure core metadata is valid + Metadata.from_email(pkg_file_txt, validate=True) # can raise exceptions + skip_prefixes = () skip_lines = set() # ---- DIFF NORMALISATION ---- diff --git a/setuptools/tests/test_core_metadata.py b/setuptools/tests/test_core_metadata.py index 5c7982a71b..8c2483f26e 100644 --- a/setuptools/tests/test_core_metadata.py +++ b/setuptools/tests/test_core_metadata.py @@ -5,6 +5,8 @@ import pytest +from packaging.metadata import Metadata + from setuptools import sic, _reqs from setuptools.dist import Distribution from setuptools._core_metadata import rfc822_escape, rfc822_unescape @@ -166,6 +168,9 @@ def test_read_metadata(name, attrs): PKG_INFO = io.StringIO() metadata_out.write_pkg_file(PKG_INFO) + PKG_INFO.seek(0) + pkg_info = PKG_INFO.read() + assert _valid_metadata(pkg_info) PKG_INFO.seek(0) metadata_in = dist_class() @@ -281,9 +286,12 @@ def test_maintainer_author(name, attrs, tmpdir): dist.metadata.write_pkg_info(fn_s) with io.open(str(fn.join('PKG-INFO')), 'r', encoding='utf-8') as f: - raw_pkg_lines = f.readlines() + pkg_info = f.read() + + assert _valid_metadata(pkg_info) # Drop blank lines and strip lines from default description + raw_pkg_lines = pkg_info.splitlines() pkg_lines = list(filter(None, raw_pkg_lines[:-2])) pkg_lines_set = set(pkg_lines) @@ -333,6 +341,8 @@ def test_parity_with_metadata_from_pypa_wheel(tmp_path): dist.metadata.write_pkg_file(fp) pkg_info = fp.getvalue() + assert _valid_metadata(pkg_info) + # Ensure Requires-Dist is present expected = [ 'Metadata-Version:', @@ -378,3 +388,8 @@ def test_parity_with_metadata_from_pypa_wheel(tmp_path): assert metadata_msg.as_string() == pkg_info_msg.as_string() assert metadata_deps == pkg_info_deps assert metadata_extras == pkg_info_extras + + +def _valid_metadata(text: str) -> bool: + metadata = Metadata.from_email(text, validate=True) # can raise exceptions + return metadata is not None diff --git a/tox.ini b/tox.ini index 31a5304d30..783827d26e 100644 --- a/tox.ini +++ b/tox.ini @@ -3,6 +3,8 @@ deps = # Ideally all the dependencies should be set as "extras" build[virtualenv] @ git+https://github.com/pypa/build@59c1f87 # ^-- pypa/build#630, use dev version while we wait for the new release + packaging @ git+https://github.com/pypa/packaging@7e68d82 + # ^-- use dev version while we wait for the new release setenv = PYTHONWARNDEFAULTENCODING = 1 SETUPTOOLS_ENFORCE_DEPRECATION = 1