From d1da1afe85c2b1ce0cfea0ae2ec7307bc0d8e14b Mon Sep 17 00:00:00 2001 From: Daniele Nicolodi Date: Mon, 15 Apr 2024 20:21:49 +0200 Subject: [PATCH] MAINT: remove workarounds for bugs fixed in pyproject-metadata 0.8.0 Update tests to consider only pyproject-metadata 0.8.0 behavior. --- mesonpy/__init__.py | 26 ++------------------- tests/packages/full-metadata/pyproject.toml | 2 +- tests/test_metadata.py | 7 +----- tests/test_sdist.py | 10 ++++---- 4 files changed, 8 insertions(+), 37 deletions(-) diff --git a/mesonpy/__init__.py b/mesonpy/__init__.py index 0455bfd19..c4a4b43df 100644 --- a/mesonpy/__init__.py +++ b/mesonpy/__init__.py @@ -234,18 +234,12 @@ class MesonBuilderError(Error): class Metadata(pyproject_metadata.StandardMetadata): def __init__(self, name: str, *args: Any, **kwargs: Any): - super().__init__(name, *args, **kwargs) - # Local fix for https://github.com/FFY00/python-pyproject-metadata/issues/60 - self.name = self._validate_name(name) - - @staticmethod - def _validate_name(name: str) -> str: # See https://packaging.python.org/en/latest/specifications/core-metadata/#name if not re.match(r'^([A-Z0-9]|[A-Z0-9][A-Z0-9._-]*[A-Z0-9])$', name, re.IGNORECASE): raise pyproject_metadata.ConfigurationError( f'Invalid project name "{name}". A valid name consists only of ASCII letters and ' f'numbers, period, underscore and hyphen. It must start and end with a letter or number') - return name + super().__init__(name, *args, **kwargs) @classmethod def from_pyproject( @@ -254,12 +248,7 @@ def from_pyproject( project_dir: Path = os.path.curdir, metadata_version: Optional[str] = None ) -> Self: - metadata = super().from_pyproject(data, project_dir) - - # Check for missing version field. - if not metadata.version and 'version' not in metadata.dynamic: - raise pyproject_metadata.ConfigurationError( - 'Required "project.version" field is missing and not declared as dynamic') + metadata = super().from_pyproject(data, project_dir, metadata_version) # Check for unsupported dynamic fields. unsupported_dynamic = set(metadata.dynamic) - {'version', } @@ -269,17 +258,6 @@ def from_pyproject( return metadata - # Local fix for a bug in pyproject-metadata. See - # https://github.com/mesonbuild/meson-python/issues/454 - def _update_dynamic(self, value: Any) -> None: - if value and 'version' in self.dynamic: - self.dynamic.remove('version') - - @property - def canonical_name(self) -> str: - # See https://packaging.python.org/en/latest/specifications/name-normalization/#normalization - return packaging.utils.canonicalize_name(self.name) - @property def distribution_name(self) -> str: """Name to be used in wheel and sdist file names.""" diff --git a/tests/packages/full-metadata/pyproject.toml b/tests/packages/full-metadata/pyproject.toml index b66b95f2e..3499bbf6b 100644 --- a/tests/packages/full-metadata/pyproject.toml +++ b/tests/packages/full-metadata/pyproject.toml @@ -13,7 +13,7 @@ description = 'Some package with all of the PEP 621 metadata' readme = 'README.md' requires-python = '>=3.7' license = {file = 'LICENSE'} -keywords = ['full', 'metadata'] +keywords = ['full', 'metadata', 'keyword with spaces'] authors = [ {email = 'jhon.doe@example.com'}, {name = 'Jane Doe'} diff --git a/tests/test_metadata.py b/tests/test_metadata.py index 088e82f7e..adbe7db67 100644 --- a/tests/test_metadata.py +++ b/tests/test_metadata.py @@ -49,10 +49,5 @@ def test_missing_version(package_missing_version): pyproject = {'project': { 'name': 'missing-version', }} - match = '|'.join(( - re.escape('Required "project.version" field is missing'), - # pyproject-metatadata 0.8.0 and later - re.escape('Field "project.version" missing and "version" not specified in "project.dynamic"'), - )) - with pytest.raises(pyproject_metadata.ConfigurationError, match=match): + with pytest.raises(pyproject_metadata.ConfigurationError, match='Field "project.version" missing'): Metadata.from_pyproject(pyproject, pathlib.Path()) diff --git a/tests/test_sdist.py b/tests/test_sdist.py index fb698b53d..7a1df4d39 100644 --- a/tests/test_sdist.py +++ b/tests/test_sdist.py @@ -31,12 +31,12 @@ def test_pep621(sdist_full_metadata): with tarfile.open(sdist_full_metadata, 'r:gz') as sdist: sdist_pkg_info = sdist.extractfile('full_metadata-1.2.3/PKG-INFO').read().decode() - metadata = re.escape(textwrap.dedent('''\ + metadata = textwrap.dedent('''\ Metadata-Version: 2.1 Name: full-metadata Version: 1.2.3 Summary: Some package with all of the PEP 621 metadata - Keywords: full metadata + Keywords: full,metadata,keyword with spaces Home-page: https://example.com Author: Jane Doe Author-Email: Unknown @@ -66,11 +66,9 @@ def test_pep621(sdist_full_metadata): # full-metadata An example package with all of the PEP 621 metadata! - ''')) + ''') - # pyproject-metadata 0.8.0 and later uses a comma to separate keywords - expr = metadata.replace(r'Keywords:\ full\ metadata', r'Keywords:\ full[ ,]metadata') - assert re.fullmatch(expr, sdist_pkg_info) + assert sdist_pkg_info == metadata def test_dynamic_version(sdist_dynamic_version):