From 46fc031ee7eec25a45208ac986ec9b9e5a95823b Mon Sep 17 00:00:00 2001 From: Sebastian Rittau Date: Mon, 11 Oct 2021 00:46:18 +0200 Subject: [PATCH] Allow third-party versions to end in asterisk (#6129) This is a first step towards #6095, where x.y and x.y.* are treated as equivalent. The next step is to update existing versions to use x.y.* where applicable and then treat x.y differently. Co-authored-by: Akuli --- CONTRIBUTING.md | 12 +++++++----- tests/check_consistent.py | 2 +- tests/stubtest_third_party.py | 7 +++++-- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c1025c3b7..dd7ce4b3a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -95,15 +95,17 @@ The metadata file describes the stubs package using the [TOML file format](https://toml.io/en/). Currently, the following keys are supported: -* `version`: The latest version of the library that the stubs support. +* `version`: The versions of the library that the stubs support. For libraries that reflect API changes in the version number only - the parts indicating the API level should be specified. In the case - of [Semantic Versioning](https://semver.org/) that is the first two - components. When the stubs are updated to a newer version + the parts indicating the API level should be specified, with an + asterisk representing the API-independent part. In the case + of [Semantic Versioning](https://semver.org/), this version could look + like this: `2.7.*`. When the stubs are updated to a newer version of the library, the version of the stub should be bumped (note that previous versions are still available on PyPI). Some legacy stubs are marked with version `0.1`, indicating that their supported version is - unknown and needs to be updated. + unknown and needs to be updated. Other stubs don't use the asterisk + to denote the API-independent part. * `python2` (default: `false`): If set to `true`, the top-level stubs support both Python 2 and Python 3. * `requires` (optional): A list of other stub packages or packages with type diff --git a/tests/check_consistent.py b/tests/check_consistent.py index a29c71f40..c6f9ff514 100755 --- a/tests/check_consistent.py +++ b/tests/check_consistent.py @@ -169,7 +169,7 @@ def check_metadata(): assert "version" in data, f"Missing version for {distribution}" version = data["version"] msg = f"Unsupported Python version {version}" - assert re.match(r"^\d+\.\d+(\.\d+)?$", version), msg + assert re.match(r"^\d+(\.\d+)*(\.\*)?$", version), msg for key in data: assert key in metadata_keys, f"Unexpected key {key} for {distribution}" assert isinstance(data.get("python2", False), bool), f"Invalid python2 value for {distribution}" diff --git a/tests/stubtest_third_party.py b/tests/stubtest_third_party.py index 0cbe2728a..fbd228a9b 100755 --- a/tests/stubtest_third_party.py +++ b/tests/stubtest_third_party.py @@ -47,9 +47,12 @@ def run_stubtest(dist: Path) -> None: pip_exe = str(venv_dir / "bin" / "pip") python_exe = str(venv_dir / "bin" / "python") - dist_version = metadata.get("version") - if dist_version is None or dist_version == "0.1": + dist_version = metadata["version"] + assert isinstance(dist_version, str) + if dist_version == "0.1": dist_req = dist.name + elif dist_version.endswith(".*"): + dist_req = f"{dist.name}=={dist_version}" else: dist_req = f"{dist.name}=={dist_version}.*"