diff --git a/mesonpy/__init__.py b/mesonpy/__init__.py index 0b968a62e..f6a9276e2 100644 --- a/mesonpy/__init__.py +++ b/mesonpy/__init__.py @@ -232,18 +232,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( @@ -252,12 +246,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', } @@ -267,17 +256,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/pyproject.toml b/pyproject.toml index af6814a6b..5633e39bd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,7 +9,7 @@ requires = [ 'meson >= 0.63.3; python_version < "3.12"', 'meson >= 1.2.3; python_version >= "3.12"', 'packaging >= 19.0', - 'pyproject-metadata >= 0.7.1', + 'pyproject-metadata >= 0.8.0', 'tomli >= 1.0.0; python_version < "3.11"', ] @@ -36,7 +36,7 @@ dependencies = [ 'meson >= 0.63.3; python_version < "3.12"', 'meson >= 1.2.3; python_version >= "3.12"', 'packaging >= 19.0', - 'pyproject-metadata >= 0.7.1', + 'pyproject-metadata >= 0.8.0', 'tomli >= 1.0.0; python_version < "3.11"', ] 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..6906a3972 100644 --- a/tests/test_metadata.py +++ b/tests/test_metadata.py @@ -3,7 +3,6 @@ # SPDX-License-Identifier: MIT import pathlib -import re import packaging.version import pyproject_metadata @@ -49,10 +48,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 e4dddb8c7..bb9643628 100644 --- a/tests/test_sdist.py +++ b/tests/test_sdist.py @@ -4,7 +4,6 @@ import os import pathlib -import re import stat import sys import tarfile @@ -33,12 +32,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 @@ -68,11 +67,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):