Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-pdm-pep517 for openSUSE:Factory checked in at 2022-10-29 20:16:40 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-pdm-pep517 (Old) and /work/SRC/openSUSE:Factory/.python-pdm-pep517.new.2275 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-pdm-pep517" Sat Oct 29 20:16:40 2022 rev:6 rq:1032051 version:1.0.5 Changes: -------- --- /work/SRC/openSUSE:Factory/python-pdm-pep517/python-pdm-pep517.changes 2022-10-06 07:42:21.268707392 +0200 +++ /work/SRC/openSUSE:Factory/.python-pdm-pep517.new.2275/python-pdm-pep517.changes 2022-10-29 20:17:58.194486594 +0200 @@ -1,0 +2,12 @@ +Fri Oct 28 19:49:57 UTC 2022 - Yogalakshmi Arunachalam <yarunacha...@suse.com> + +- Update to 1.0.5 + * README.md: Fix Dynamic Version example by @hosiet in #115 + * Support license files located in subdirectories by @crai0 in #119 + * fix: update implementation of PEP 639 by @frostming in #120 + * [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci in #121 + * feat: expand vars in req url by @frostming in #127 + * [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci in #124 + * tests: Configure git for scm tests by @stanislavlevin in #126 + +------------------------------------------------------------------- Old: ---- pdm-pep517-1.0.4.tar.gz New: ---- pdm-pep517-1.0.5.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-pdm-pep517.spec ++++++ --- /var/tmp/diff_new_pack.6jjVlS/_old 2022-10-29 20:17:58.594488725 +0200 +++ /var/tmp/diff_new_pack.6jjVlS/_new 2022-10-29 20:17:58.598488747 +0200 @@ -26,7 +26,7 @@ %endif Name: python-pdm-pep517%{psuffix} -Version: 1.0.4 +Version: 1.0.5 Release: 0 Summary: Python Development Master License: MIT ++++++ pdm-pep517-1.0.4.tar.gz -> pdm-pep517-1.0.5.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pdm-pep517-1.0.4/PKG-INFO new/pdm-pep517-1.0.5/PKG-INFO --- old/pdm-pep517-1.0.4/PKG-INFO 2022-08-06 17:29:42.799394800 +0200 +++ new/pdm-pep517-1.0.5/PKG-INFO 2022-10-24 04:00:30.637456200 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: pdm-pep517 -Version: 1.0.4 +Version: 1.0.5 Summary: A PEP 517 backend for PDM that supports PEP 621 metadata License: MIT Keywords: packaging,PEP 517,build @@ -106,7 +106,7 @@ When building from a source tree where SCM is not available, you can use the env var `PDM_PEP517_SCM_VERSION` to pretend the version is set. ```bash -PDM_PEP517_VERSION=0.1.0 python -m build +PDM_PEP517_SCM_VERSION=0.1.0 python -m build ``` ## Writing SCM version to file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pdm-pep517-1.0.4/README.md new/pdm-pep517-1.0.5/README.md --- old/pdm-pep517-1.0.4/README.md 2022-08-06 17:29:41.919385200 +0200 +++ new/pdm-pep517-1.0.5/README.md 2022-10-24 04:00:28.897448800 +0200 @@ -87,7 +87,7 @@ When building from a source tree where SCM is not available, you can use the env var `PDM_PEP517_SCM_VERSION` to pretend the version is set. ```bash -PDM_PEP517_VERSION=0.1.0 python -m build +PDM_PEP517_SCM_VERSION=0.1.0 python -m build ``` ## Writing SCM version to file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pdm-pep517-1.0.4/pdm/pep517/__init__.py new/pdm-pep517-1.0.5/pdm/pep517/__init__.py --- old/pdm-pep517-1.0.4/pdm/pep517/__init__.py 2022-08-06 17:29:41.923385100 +0200 +++ new/pdm-pep517-1.0.5/pdm/pep517/__init__.py 2022-10-24 04:00:28.897448800 +0200 @@ -1 +1 @@ -__version__ = "1.0.4" +__version__ = "1.0.5" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pdm-pep517-1.0.4/pdm/pep517/api.py new/pdm-pep517-1.0.5/pdm/pep517/api.py --- old/pdm-pep517-1.0.4/pdm/pep517/api.py 2022-08-06 17:29:41.927385300 +0200 +++ new/pdm-pep517-1.0.5/pdm/pep517/api.py 2022-10-24 04:00:28.909448900 +0200 @@ -3,6 +3,7 @@ """ from __future__ import annotations +import shutil from pathlib import Path from typing import Any, Mapping @@ -47,11 +48,10 @@ with (dist_info / "METADATA").open("w", encoding="utf-8") as f: builder._write_metadata_file(f) - (dist_info / "license_files").mkdir(exist_ok=True) for license_file in builder.find_license_files(): - (dist_info / "license_files" / license_file).write_bytes( - Path(license_file).read_bytes() - ) + full_path = dist_info / "licenses" / license_file + full_path.parent.mkdir(exist_ok=True, parents=True) + shutil.copy2(license_file, full_path) return dist_info.name diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pdm-pep517-1.0.4/pdm/pep517/license.py new/pdm-pep517-1.0.5/pdm/pep517/license.py --- old/pdm-pep517-1.0.4/pdm/pep517/license.py 2022-08-06 17:29:41.927385300 +0200 +++ new/pdm-pep517-1.0.5/pdm/pep517/license.py 2022-10-24 04:00:28.909448900 +0200 @@ -26,7 +26,7 @@ """Normalize a SPDX license expression.""" validate_result = _licensing.validate(expression) if validate_result.errors: - raise MetadataError("license-expression", validate_result.errors) + raise MetadataError("license", validate_result.errors) result = validate_result.normalized_expression or expression if result != expression: warnings.warn( diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pdm-pep517-1.0.4/pdm/pep517/metadata.py new/pdm-pep517-1.0.5/pdm/pep517/metadata.py --- old/pdm-pep517-1.0.4/pdm/pep517/metadata.py 2022-08-06 17:29:41.927385300 +0200 +++ new/pdm-pep517-1.0.5/pdm/pep517/metadata.py 2022-10-24 04:00:28.909448900 +0200 @@ -5,12 +5,11 @@ from pathlib import Path from typing import Any, Callable, Generic, Iterable, Mapping, TypeVar, cast -from pdm.pep517._vendor.packaging.requirements import Requirement +from pdm.pep517._vendor.packaging.requirements import InvalidRequirement, Requirement from pdm.pep517.exceptions import MetadataError, PDMWarning, ProjectError -from pdm.pep517.license import normalize_expression from pdm.pep517.utils import ( cd, - ensure_pep440_req, + expand_vars, find_packages_iter, merge_marker, safe_name, @@ -161,13 +160,6 @@ PDMWarning, stacklevel=2, ) - # if any(line.startswith("License :: ") for line in classifers): - # show_warning( - # "License classifiers are deprecated in favor of PEP 639 " - # "'license-expression' field.", - # PDMWarning, - # stacklevel=2, - # ) return sorted(classifers) @@ -176,32 +168,34 @@ @property def license_expression(self) -> str | None: - if "license-expression" in self.data: - if "license" in self.data: - raise MetadataError( - "license-expression", - "Can't specify both 'license' and 'license-expression' fields", - ) - return normalize_expression(self.data["license-expression"]) - elif "license" in self.data and "text" in self.data["license"]: + if "license" in self.data: + if isinstance(self.data["license"], str): + return self.data["license"] # show_warning( - # "'license' field is deprecated in favor of 'license-expression'", + # "'license.text' subtable is deprecated in favor of string 'license' " + # "value", # PDMWarning, # stacklevel=2, # ) - # TODO: do not validate legacy license text, - # remove this after PEP 639 is finalized - return self.data["license"]["text"] - elif "license-expression" not in (self.dynamic or []): - show_warning("'license-expression' is missing", PDMWarning, stacklevel=2) + if "text" in self.data["license"]: + return self.data["license"]["text"] + show_warning("'license' is missing", PDMWarning, stacklevel=2) return None @property def license_files(self) -> dict[str, list[str]]: + subtable_files = None + if ( + "license" in self.data + and isinstance(self.data["license"], dict) + and "files" in self.data["license"] + ): + subtable_files = self.data["license"]["files"] if "license-files" not in self.data: - if self.data.get("license", {}).get("file"): + if subtable_files is not None: # show_warning( - # "'license.file' field is deprecated in favor of 'license-files'", + # "'license.files' subtable is deprecated in favor of " + # "'license-files'", # PDMWarning, # stacklevel=2, # ) @@ -215,10 +209,10 @@ "AUTHORS*", ] } - if "license" in self.data: + if subtable_files is not None: raise MetadataError( "license-files", - "Can't specify both 'license' and 'license-files' fields", + "Can't specify both 'license.files' and 'license-files' fields", ) rv = self.data["license-files"] valid_keys = {"globs", "paths"} & set(rv) @@ -233,7 +227,20 @@ def _convert_dependencies( self, deps: list[str], field: str = "dependencies" ) -> list[str]: - return list(filter(None, (ensure_pep440_req(dep, field) for dep in deps))) + def convert_req(req: str) -> str | None: + """Discard all non-PEP 440 requirements, e.g. editable VCS requirements.""" + + if req.strip().startswith("-e"): + return None + try: + r = Requirement(req) + except InvalidRequirement as e: + raise MetadataError(field, f"Invalid requirement {req!r}\n {e}") from e + if r.url and "${" in r.url: + r.url = expand_vars(r.url, self.root.resolve().as_posix()) + return str(r) + + return list(filter(None, map(convert_req, deps))) def _convert_optional_dependencies( self, deps: Mapping[str, list[str]] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pdm-pep517-1.0.4/pdm/pep517/utils.py new/pdm-pep517-1.0.5/pdm/pep517/utils.py --- old/pdm-pep517-1.0.4/pdm/pep517/utils.py 2022-08-06 17:29:41.931385300 +0200 +++ new/pdm-pep517-1.0.5/pdm/pep517/utils.py 2022-10-24 04:00:28.909448900 +0200 @@ -5,17 +5,17 @@ import re import sys import sysconfig +import urllib import warnings from contextlib import contextmanager from fnmatch import fnmatchcase from pathlib import Path -from typing import Callable, Generator, Iterable +from typing import Callable, Generator, Iterable, Match from pdm.pep517._vendor.packaging import tags from pdm.pep517._vendor.packaging.markers import Marker -from pdm.pep517._vendor.packaging.requirements import InvalidRequirement, Requirement +from pdm.pep517._vendor.packaging.requirements import Requirement from pdm.pep517._vendor.packaging.version import InvalidVersion, Version -from pdm.pep517.exceptions import MetadataError from pdm.pep517.macosx_platform import calculate_macosx_platform_tag @@ -187,18 +187,6 @@ return None -def ensure_pep440_req(req: str, field: str) -> str | None: - """Discard all non-PEP 440 requirements, e.g. editable VCS requirements.""" - - if req.strip().startswith("-e"): - return None - try: - Requirement(req) - except InvalidRequirement as e: - raise MetadataError(field, f"Invalid requirement {req!r}\n {e}") from e - return req - - def is_relative_path(target: Path, other: Path) -> bool: try: target.relative_to(other) @@ -212,3 +200,18 @@ def show_warning(message: str, category: type[Warning], stacklevel: int = 1) -> None: """A cached version of warnings.warn to avoid repeated warnings.""" warnings.warn(message, category, stacklevel + 1) + + +def expand_vars(line: str, root: str) -> str: + """Expand environment variables in a string.""" + if "$" not in line: + return line + line = line.replace("${PROJECT_ROOT}", root.lstrip("/")) + + def replace_func(match: Match[str]) -> str: + rv = os.getenv(match.group(1)) + if rv is None: + return match.group(0) + return urllib.parse.quote(rv) + + return re.sub(r"\$\{(.+?)\}", replace_func, line) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pdm-pep517-1.0.4/pdm/pep517/validator.py new/pdm-pep517-1.0.5/pdm/pep517/validator.py --- old/pdm-pep517-1.0.4/pdm/pep517/validator.py 2022-08-06 17:29:41.931385300 +0200 +++ new/pdm-pep517-1.0.5/pdm/pep517/validator.py 2022-10-24 04:00:28.909448900 +0200 @@ -22,6 +22,7 @@ ] LICENSE_RULE = [ + {"type": "string"}, {"type": "dict", "schema": {"file": {"type": "string", "required": True}}}, {"type": "dict", "schema": {"text": {"type": "string", "required": True}}}, ] @@ -53,7 +54,6 @@ "readme": {"oneof": README_RULE}, "requires-python": {"type": "string"}, "license": {"oneof": LICENSE_RULE}, - "license-expression": {"type": "string"}, "license-files": {"oneof": LICENSE_FILE_RULE}, "authors": AUTHOR_RULE, "maintainers": AUTHOR_RULE, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pdm-pep517-1.0.4/pdm/pep517/wheel.py new/pdm-pep517-1.0.5/pdm/pep517/wheel.py --- old/pdm-pep517-1.0.4/pdm/pep517/wheel.py 2022-08-06 17:29:41.931385300 +0200 +++ new/pdm-pep517-1.0.5/pdm/pep517/wheel.py 2022-10-24 04:00:28.909448900 +0200 @@ -230,7 +230,7 @@ for license_file in self.find_license_files(): self._add_file( - f"{dist_info}/license_files/{license_file}", + f"{dist_info}/licenses/{license_file}", self.location / license_file, ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pdm-pep517-1.0.4/pyproject.toml new/pdm-pep517-1.0.5/pyproject.toml --- old/pdm-pep517-1.0.4/pyproject.toml 2022-08-06 17:29:41.931385300 +0200 +++ new/pdm-pep517-1.0.5/pyproject.toml 2022-10-24 04:00:28.909448900 +0200 @@ -22,7 +22,7 @@ "Programming Language :: Python :: 3.10", ] dependencies = [] -version = "1.0.4" +version = "1.0.5" [project.license] text = "MIT" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pdm-pep517-1.0.4/tests/conftest.py new/pdm-pep517-1.0.5/tests/conftest.py --- old/pdm-pep517-1.0.4/tests/conftest.py 2022-08-06 17:29:41.931385300 +0200 +++ new/pdm-pep517-1.0.5/tests/conftest.py 2022-10-24 04:00:28.909448900 +0200 @@ -13,6 +13,8 @@ shutil.copytree(project, tmp_path / project.name) with utils.cd(tmp_path / project.name): subprocess.check_call(["git", "init"]) + subprocess.check_call(["git", "config", "user.email", "y...@any.com"]) + subprocess.check_call(["git", "config", "user.name", "Name"]) subprocess.check_call(["git", "add", "."]) subprocess.check_call(["git", "commit", "-m", "initial commit"]) subprocess.check_call(["git", "tag", "-a", "0.1.0", "-m", "version 0.1.0"]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pdm-pep517-1.0.4/tests/fixtures/projects/demo-no-license/pyproject.toml new/pdm-pep517-1.0.5/tests/fixtures/projects/demo-no-license/pyproject.toml --- old/pdm-pep517-1.0.4/tests/fixtures/projects/demo-no-license/pyproject.toml 2022-08-06 17:29:41.931385300 +0200 +++ new/pdm-pep517-1.0.5/tests/fixtures/projects/demo-no-license/pyproject.toml 2022-10-24 04:00:28.909448900 +0200 @@ -8,7 +8,7 @@ ] dynamic = ["version"] requires-python = ">=3.5" -license-expression = "MIT" +license = "MIT" dependencies = [] description = "" name = "demo-module" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pdm-pep517-1.0.4/tests/test_api.py new/pdm-pep517-1.0.5/tests/test_api.py --- old/pdm-pep517-1.0.4/tests/test_api.py 2022-08-06 17:29:41.935385500 +0200 +++ new/pdm-pep517-1.0.5/tests/test_api.py 2022-10-24 04:00:28.913448800 +0200 @@ -36,7 +36,7 @@ for name in ("pyproject.toml", "LICENSE"): assert name not in zip_names - assert "demo_module-0.1.0.dist-info/license_files/LICENSE" in zip_names + assert "demo_module-0.1.0.dist-info/licenses/LICENSE" in zip_names def test_build_package(tmp_path: Path) -> None: @@ -200,7 +200,7 @@ namelist = zf.namelist() assert "demo_package.pth" in namelist assert "__editables_demo_package.py" in namelist - assert "demo_package-0.1.0.dist-info/license_files/LICENSE" in namelist + assert "demo_package-0.1.0.dist-info/licenses/LICENSE" in namelist metadata = email.message_from_bytes( zf.read("demo_package-0.1.0.dist-info/METADATA") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pdm-pep517-1.0.4/tests/test_metadata.py new/pdm-pep517-1.0.5/tests/test_metadata.py --- old/pdm-pep517-1.0.4/tests/test_metadata.py 2022-08-06 17:29:41.935385500 +0200 +++ new/pdm-pep517-1.0.5/tests/test_metadata.py 2022-10-24 04:00:28.913448800 +0200 @@ -158,24 +158,6 @@ ) -def test_both_license_and_license_expression_error() -> None: - metadata = make_metadata( - { - "description": "test package", - "name": "demo", - "version": "0.1.0", - "license": {"text": "MIT"}, - "license-expression": "MIT", - } - ) - with pytest.raises( - ValueError, - match="license-expression: Can't specify both 'license' and " - "'license-expression' fields", - ): - metadata.license_expression - - @pytest.mark.deprecation @pytest.mark.xfail(reason="Don't emit warning until PEP 639 is accepted") def test_deprecated_license_field_warning(recwarn) -> None: @@ -204,9 +186,7 @@ ) assert not metadata.license_expression assert len(recwarn) == 1 - assert str(recwarn.pop(UserWarning).message).startswith( - "'license-expression' is missing" - ) + assert str(recwarn.pop(UserWarning).message).startswith("'license' is missing") @pytest.mark.deprecation @@ -217,7 +197,6 @@ "description": "test package", "name": "demo", "version": "0.1.0", - "license-expression": "MIT", "license": {"file": "LICENSE"}, } ) @@ -234,7 +213,7 @@ "description": "test package", "name": "demo", "version": "0.1.0", - "license-expression": "MIT", + "license": "MIT", } ) assert metadata.license_files == { @@ -242,13 +221,14 @@ } +@pytest.mark.xfail(reason="Don't emit warning until PEP 639 is accepted") def test_license_normalization() -> None: metadata = make_metadata( { "description": "test package", "name": "demo", "version": "0.1.0", - "license-expression": "mIt", + "license": "mIt", } ) with pytest.warns(UserWarning) as record: @@ -259,13 +239,14 @@ ) +@pytest.mark.xfail(reason="Don't emit warning until PEP 639 is accepted") def test_invalid_license_identifier() -> None: metadata = make_metadata( { "description": "test package", "name": "demo", "version": "0.1.0", - "license-expression": "foo OR MIT", + "license": "foo OR MIT", } ) with pytest.raises(ValueError, match=r".*Unknown license key\(s\): foo"): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pdm-pep517-1.0.4/tests/test_utils.py new/pdm-pep517-1.0.5/tests/test_utils.py --- old/pdm-pep517-1.0.4/tests/test_utils.py 1970-01-01 01:00:00.000000000 +0100 +++ new/pdm-pep517-1.0.5/tests/test_utils.py 2022-10-24 04:00:28.913448800 +0200 @@ -0,0 +1,10 @@ +from pdm.pep517.utils import expand_vars + + +def test_expand_vars(monkeypatch): + monkeypatch.setenv("FOO", "foo=a") + monkeypatch.setenv("BAR", "bar") + root = "/abc/def" + + line = "file:///${PROJECT_ROOT}/${FOO}:${BAR}:${BAZ}" + assert expand_vars(line, root) == "file:///abc/def/foo%3Da:bar:${BAZ}" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pdm-pep517-1.0.4/tests/test_validator.py new/pdm-pep517-1.0.5/tests/test_validator.py --- old/pdm-pep517-1.0.4/tests/test_validator.py 2022-08-06 17:29:41.935385500 +0200 +++ new/pdm-pep517-1.0.5/tests/test_validator.py 2022-10-24 04:00:28.913448800 +0200 @@ -27,12 +27,12 @@ }, { "name": "foo", - "license-expression": "MIT", + "license": "MIT", "license-files": {"paths": ["LICENSE"]}, }, { "name": "foo", - "license-expression": "MIT", + "license": "MIT", "license-files": {"globs": ["LICENSE*"]}, }, ] @@ -53,7 +53,7 @@ {"name": "foo", "version": {"from": "foo.py"}}, { "name": "foo", - "license-expression": "MIT", + "license": "MIT", "license-files": {"paths": ["LICENSE"], "globs": ["LICENSE*"]}, }, ]