From 5ac80781ec0c28636d6bebf8e6f5632a13e38175 Mon Sep 17 00:00:00 2001 From: Avasam Date: Tue, 21 Feb 2023 05:19:50 -0500 Subject: [PATCH] Integrate requirements-stubtest.txt into METADATA.toml (#9778) --- .github/workflows/daily.yml | 3 +-- .github/workflows/stubtest_third_party.yml | 1 - stubs/Pillow/@tests/requirements-stubtest.txt | 1 - stubs/Pillow/@tests/stubtest_allowlist.txt | 2 +- stubs/Pillow/METADATA.toml | 1 + stubs/Pygments/@tests/requirements-stubtest.txt | 1 - stubs/Pygments/METADATA.toml | 1 + stubs/SQLAlchemy/@tests/requirements-stubtest.txt | 1 - stubs/SQLAlchemy/METADATA.toml | 1 + stubs/fpdf2/@tests/requirements-stubtest.txt | 1 - stubs/fpdf2/METADATA.toml | 3 +++ stubs/google-cloud-ndb/@tests/requirements-stubtest.txt | 1 - stubs/google-cloud-ndb/METADATA.toml | 1 + stubs/humanfriendly/@tests/requirements-stubtest.txt | 2 -- stubs/humanfriendly/METADATA.toml | 3 +++ stubs/influxdb-client/@tests/requirements-stubtest.txt | 1 - stubs/influxdb-client/METADATA.toml | 1 + stubs/ldap3/@tests/requirements-stubtest.txt | 1 - stubs/ldap3/METADATA.toml | 1 + stubs/tqdm/@tests/requirements-stubtest.txt | 4 ---- stubs/tqdm/METADATA.toml | 1 + tests/README.md | 2 +- tests/parse_metadata.py | 5 +++++ tests/stubtest_third_party.py | 7 +++---- 24 files changed, 24 insertions(+), 22 deletions(-) delete mode 100644 stubs/Pillow/@tests/requirements-stubtest.txt delete mode 100644 stubs/Pygments/@tests/requirements-stubtest.txt delete mode 100644 stubs/SQLAlchemy/@tests/requirements-stubtest.txt delete mode 100644 stubs/fpdf2/@tests/requirements-stubtest.txt delete mode 100644 stubs/google-cloud-ndb/@tests/requirements-stubtest.txt delete mode 100644 stubs/humanfriendly/@tests/requirements-stubtest.txt delete mode 100644 stubs/influxdb-client/@tests/requirements-stubtest.txt delete mode 100644 stubs/ldap3/@tests/requirements-stubtest.txt delete mode 100644 stubs/tqdm/@tests/requirements-stubtest.txt diff --git a/.github/workflows/daily.yml b/.github/workflows/daily.yml index 5fbbb8111..c03ef166f 100644 --- a/.github/workflows/daily.yml +++ b/.github/workflows/daily.yml @@ -36,7 +36,7 @@ jobs: matrix: # tkinter doesn't import on macOS-12 os: ["ubuntu-latest", "windows-latest", "macos-11"] - python-version: ["3.7", "3.8", "3.9", "3.10.10", "3.11.2"] # TODO: unpin micro versions + python-version: ["3.7", "3.8", "3.9", "3.10.10", "3.11.2"] # TODO: unpin micro versions fail-fast: false steps: @@ -69,7 +69,6 @@ jobs: cache: pip cache-dependency-path: | requirements-tests.txt - stubs/**/@tests/requirements-stubtest.txt stubs/**/METADATA.toml - name: Install dependencies run: pip install -r requirements-tests.txt diff --git a/.github/workflows/stubtest_third_party.yml b/.github/workflows/stubtest_third_party.yml index 849cfde2c..c70bae6ce 100644 --- a/.github/workflows/stubtest_third_party.yml +++ b/.github/workflows/stubtest_third_party.yml @@ -45,7 +45,6 @@ jobs: cache: pip cache-dependency-path: | requirements-tests.txt - stubs/**/@tests/requirements-stubtest.txt stubs/**/METADATA.toml - name: Install dependencies run: pip install -r requirements-tests.txt diff --git a/stubs/Pillow/@tests/requirements-stubtest.txt b/stubs/Pillow/@tests/requirements-stubtest.txt deleted file mode 100644 index a2d775acd..000000000 --- a/stubs/Pillow/@tests/requirements-stubtest.txt +++ /dev/null @@ -1 +0,0 @@ -olefile diff --git a/stubs/Pillow/@tests/stubtest_allowlist.txt b/stubs/Pillow/@tests/stubtest_allowlist.txt index 423463d14..ae84a43ee 100644 --- a/stubs/Pillow/@tests/stubtest_allowlist.txt +++ b/stubs/Pillow/@tests/stubtest_allowlist.txt @@ -1,4 +1,4 @@ # Requires Pyside or PyQt to be installed. -# Not worth adding to requirements-stubtest.txt +# Not worth adding to tool.stubtest.stubtest_requirements # because it's only used as a base type and it's a long install. PIL.ImageQt.ImageQt diff --git a/stubs/Pillow/METADATA.toml b/stubs/Pillow/METADATA.toml index c5c25a792..b4d21d1eb 100644 --- a/stubs/Pillow/METADATA.toml +++ b/stubs/Pillow/METADATA.toml @@ -1,4 +1,5 @@ version = "9.4.*" [tool.stubtest] +stubtest_requirements = ["olefile"] ignore_missing_stub = true diff --git a/stubs/Pygments/@tests/requirements-stubtest.txt b/stubs/Pygments/@tests/requirements-stubtest.txt deleted file mode 100644 index 6966869c7..000000000 --- a/stubs/Pygments/@tests/requirements-stubtest.txt +++ /dev/null @@ -1 +0,0 @@ -sphinx diff --git a/stubs/Pygments/METADATA.toml b/stubs/Pygments/METADATA.toml index 02f6a4809..3f4ba4a90 100644 --- a/stubs/Pygments/METADATA.toml +++ b/stubs/Pygments/METADATA.toml @@ -2,4 +2,5 @@ version = "2.14.*" requires = ["types-docutils", "types-setuptools"] [tool.stubtest] +stubtest_requirements = ["sphinx"] ignore_missing_stub = true diff --git a/stubs/SQLAlchemy/@tests/requirements-stubtest.txt b/stubs/SQLAlchemy/@tests/requirements-stubtest.txt deleted file mode 100644 index e079f8a60..000000000 --- a/stubs/SQLAlchemy/@tests/requirements-stubtest.txt +++ /dev/null @@ -1 +0,0 @@ -pytest diff --git a/stubs/SQLAlchemy/METADATA.toml b/stubs/SQLAlchemy/METADATA.toml index f88fe6852..ac906398b 100644 --- a/stubs/SQLAlchemy/METADATA.toml +++ b/stubs/SQLAlchemy/METADATA.toml @@ -6,4 +6,5 @@ extra_description = """\ obsolete_since = "2.0.0" # Released on 2023-01-26 [tool.stubtest] +stubtest_requirements = ["pytest"] ignore_missing_stub = true diff --git a/stubs/fpdf2/@tests/requirements-stubtest.txt b/stubs/fpdf2/@tests/requirements-stubtest.txt deleted file mode 100644 index 0d38bc5ea..000000000 --- a/stubs/fpdf2/@tests/requirements-stubtest.txt +++ /dev/null @@ -1 +0,0 @@ -cryptography diff --git a/stubs/fpdf2/METADATA.toml b/stubs/fpdf2/METADATA.toml index d00b7f98f..c83645ebf 100644 --- a/stubs/fpdf2/METADATA.toml +++ b/stubs/fpdf2/METADATA.toml @@ -1,2 +1,5 @@ version = "2.6.1" requires = ["types-Pillow>=9.2.0"] + +[tool.stubtest] +stubtest_requirements = ["cryptography"] diff --git a/stubs/google-cloud-ndb/@tests/requirements-stubtest.txt b/stubs/google-cloud-ndb/@tests/requirements-stubtest.txt deleted file mode 100644 index ca9dfdb71..000000000 --- a/stubs/google-cloud-ndb/@tests/requirements-stubtest.txt +++ /dev/null @@ -1 +0,0 @@ -protobuf==3.20.2 diff --git a/stubs/google-cloud-ndb/METADATA.toml b/stubs/google-cloud-ndb/METADATA.toml index db11b9ead..63fe58dfb 100644 --- a/stubs/google-cloud-ndb/METADATA.toml +++ b/stubs/google-cloud-ndb/METADATA.toml @@ -1,4 +1,5 @@ version = "2.1.*" [tool.stubtest] +stubtest_requirements = ["protobuf==3.20.2"] ignore_missing_stub = true diff --git a/stubs/humanfriendly/@tests/requirements-stubtest.txt b/stubs/humanfriendly/@tests/requirements-stubtest.txt deleted file mode 100644 index 2ba28296f..000000000 --- a/stubs/humanfriendly/@tests/requirements-stubtest.txt +++ /dev/null @@ -1,2 +0,0 @@ -docutils -mock diff --git a/stubs/humanfriendly/METADATA.toml b/stubs/humanfriendly/METADATA.toml index 5ed8ec606..21700a749 100644 --- a/stubs/humanfriendly/METADATA.toml +++ b/stubs/humanfriendly/METADATA.toml @@ -1 +1,4 @@ version = "10.0.*" + +[tool.stubtest] +stubtest_requirements = ["docutils", "mock"] diff --git a/stubs/influxdb-client/@tests/requirements-stubtest.txt b/stubs/influxdb-client/@tests/requirements-stubtest.txt deleted file mode 100644 index ee4ba4f3d..000000000 --- a/stubs/influxdb-client/@tests/requirements-stubtest.txt +++ /dev/null @@ -1 +0,0 @@ -aiohttp diff --git a/stubs/influxdb-client/METADATA.toml b/stubs/influxdb-client/METADATA.toml index 8dae956f5..bf082ace4 100644 --- a/stubs/influxdb-client/METADATA.toml +++ b/stubs/influxdb-client/METADATA.toml @@ -3,3 +3,4 @@ requires = ["types-urllib3"] [tool.stubtest] extras = ["extra"] +stubtest_requirements = ["aiohttp"] diff --git a/stubs/ldap3/@tests/requirements-stubtest.txt b/stubs/ldap3/@tests/requirements-stubtest.txt deleted file mode 100644 index be66cd022..000000000 --- a/stubs/ldap3/@tests/requirements-stubtest.txt +++ /dev/null @@ -1 +0,0 @@ -gssapi diff --git a/stubs/ldap3/METADATA.toml b/stubs/ldap3/METADATA.toml index 2812e3d8d..9159fae4d 100644 --- a/stubs/ldap3/METADATA.toml +++ b/stubs/ldap3/METADATA.toml @@ -7,3 +7,4 @@ apt_dependencies = ["libkrb5-dev"] # No need to install on the CI. Leaving here as information for MacOs/Windows contributors. # brew_dependencies = ["krb5"] # choco_dependencies = ["mitkerberos"] +stubtest_requirements = ["gssapi"] diff --git a/stubs/tqdm/@tests/requirements-stubtest.txt b/stubs/tqdm/@tests/requirements-stubtest.txt deleted file mode 100644 index a14ea024e..000000000 --- a/stubs/tqdm/@tests/requirements-stubtest.txt +++ /dev/null @@ -1,4 +0,0 @@ -dask -pandas -rich -tensorflow diff --git a/stubs/tqdm/METADATA.toml b/stubs/tqdm/METADATA.toml index 8b856db6e..1940d7fa9 100644 --- a/stubs/tqdm/METADATA.toml +++ b/stubs/tqdm/METADATA.toml @@ -2,3 +2,4 @@ version = "4.64.*" [tool.stubtest] extras = ["slack", "telegram"] +stubtest_requirements = ["dask", "pandas", "rich", "tensorflow"] diff --git a/tests/README.md b/tests/README.md index 758207ffc..21cf770da 100644 --- a/tests/README.md +++ b/tests/README.md @@ -162,7 +162,7 @@ directly, with For each distribution, stubtest ignores definitions listed in a `@tests/stubtest_allowlist.txt` file, relative to the distribution. Additional packages that are needed to run stubtest for a -distribution can be added to `@tests/requirements-stubtest.txt`. +distribution can be added to `tool.stubtest.stubtest_requirements` in `METADATA.toml`. ### Using stubtest to find objects missing from the stubs diff --git a/tests/parse_metadata.py b/tests/parse_metadata.py index d175285f7..b0ccadfab 100644 --- a/tests/parse_metadata.py +++ b/tests/parse_metadata.py @@ -48,6 +48,7 @@ class StubtestSettings: extras: list[str] ignore_missing_stub: bool platforms: list[str] + stubtest_requirements: list[str] def system_requirements_for_platform(self, platform: str) -> list[str]: assert platform in _STUBTEST_PLATFORM_MAPPING, f"Unrecognised platform {platform!r}" @@ -69,6 +70,7 @@ def read_stubtest_settings(distribution: str) -> StubtestSettings: extras = data.get("extras", []) ignore_missing_stub = data.get("ignore_missing_stub", False) specified_platforms = data.get("platforms", ["linux"]) + stubtest_requirements = data.get("stubtest_requirements", []) assert type(skipped) is bool assert type(ignore_missing_stub) is bool @@ -79,6 +81,7 @@ def read_stubtest_settings(distribution: str) -> StubtestSettings: assert _is_list_of_strings(brew_dependencies) assert _is_list_of_strings(choco_dependencies) assert _is_list_of_strings(extras) + assert _is_list_of_strings(stubtest_requirements) unrecognised_platforms = set(specified_platforms) - _STUBTEST_PLATFORM_MAPPING.keys() assert not unrecognised_platforms, f"Unrecognised platforms specified for {distribution!r}: {unrecognised_platforms}" @@ -98,6 +101,7 @@ def read_stubtest_settings(distribution: str) -> StubtestSettings: extras=extras, ignore_missing_stub=ignore_missing_stub, platforms=specified_platforms, + stubtest_requirements=stubtest_requirements, ) @@ -131,6 +135,7 @@ _KNOWN_METADATA_TOOL_FIELDS: Final = { "extras", "ignore_missing_stub", "platforms", + "stubtest_requirements", } } _DIST_NAME_RE: Final = re.compile(r"^[a-z0-9]([a-z0-9._-]*[a-z0-9])?$", re.IGNORECASE) diff --git a/tests/stubtest_third_party.py b/tests/stubtest_third_party.py index f142cfc60..07c4855e1 100755 --- a/tests/stubtest_third_party.py +++ b/tests/stubtest_third_party.py @@ -41,10 +41,9 @@ def run_stubtest(dist: Path, *, verbose: bool = False, specified_stubs_only: boo dist_extras = ", ".join(stubtest_settings.extras) dist_req = f"{dist_name}[{dist_extras}]=={metadata.version}" - # If @tests/requirements-stubtest.txt exists, run "pip install" on it. - req_path = dist / "@tests" / "requirements-stubtest.txt" - if req_path.exists(): - pip_cmd = [pip_exe, "install", "-r", str(req_path)] + # If tool.stubtest.stubtest_requirements exists, run "pip install" on it. + if stubtest_settings.stubtest_requirements: + pip_cmd = [pip_exe, "install"] + stubtest_settings.stubtest_requirements try: subprocess.run(pip_cmd, check=True, capture_output=True) except subprocess.CalledProcessError as e: