From 1fa4986f7192b60096d15a674c2bf31c390dd388 Mon Sep 17 00:00:00 2001 From: Sebastian Rittau Date: Mon, 14 Oct 2024 08:00:02 +0200 Subject: [PATCH] Move common utility functions to a common library (#12773) --- .gitignore | 3 +-- lib/pyproject.toml | 1 + lib/ts_utils/__init__.py | 1 + tests/_metadata.py => lib/ts_utils/metadata.py | 2 +- lib/ts_utils/py.typed | 0 tests/_utils.py => lib/ts_utils/utils.py | 0 pyproject.toml | 2 +- pyrightconfig.scripts_and_tests.json | 4 ++++ requirements-tests.txt | 3 +++ scripts/stubsabot.py | 2 +- tests/check_typeshed_structure.py | 4 ++-- tests/get_external_stub_requirements.py | 2 +- tests/get_stubtest_system_requirements.py | 3 ++- tests/mypy_test.py | 6 +++--- tests/pyright_test.py | 2 +- tests/pytype_test.py | 4 ++-- tests/regr_test.py | 4 ++-- tests/runtests.py | 11 +---------- tests/stubtest_stdlib.py | 2 +- tests/stubtest_third_party.py | 4 ++-- tests/typecheck_typeshed.py | 2 +- 21 files changed, 31 insertions(+), 31 deletions(-) create mode 100644 lib/pyproject.toml create mode 100644 lib/ts_utils/__init__.py rename tests/_metadata.py => lib/ts_utils/metadata.py (99%) create mode 100644 lib/ts_utils/py.typed rename tests/_utils.py => lib/ts_utils/utils.py (100%) diff --git a/.gitignore b/.gitignore index da712d4c3..4c5c5703e 100644 --- a/.gitignore +++ b/.gitignore @@ -8,12 +8,11 @@ __pycache__/ # Distribution / packaging .Python /env/ -/build/ +/lib/build/ /develop-eggs/ /dist/ /downloads/ /eggs/ -/lib/ /lib64/ /parts/ /sdist/ diff --git a/lib/pyproject.toml b/lib/pyproject.toml new file mode 100644 index 000000000..c72817077 --- /dev/null +++ b/lib/pyproject.toml @@ -0,0 +1 @@ +# Utilities for typeshed infrastructure scripts. diff --git a/lib/ts_utils/__init__.py b/lib/ts_utils/__init__.py new file mode 100644 index 000000000..44e839ba3 --- /dev/null +++ b/lib/ts_utils/__init__.py @@ -0,0 +1 @@ +"""Utilities for typeshed infrastructure scripts.""" diff --git a/tests/_metadata.py b/lib/ts_utils/metadata.py similarity index 99% rename from tests/_metadata.py rename to lib/ts_utils/metadata.py index 405ff9f66..00efeef5f 100644 --- a/tests/_metadata.py +++ b/lib/ts_utils/metadata.py @@ -19,7 +19,7 @@ from packaging.requirements import Requirement from packaging.specifiers import Specifier from packaging.version import Version -from _utils import cache +from .utils import cache __all__ = [ "NoSuchStubError", diff --git a/lib/ts_utils/py.typed b/lib/ts_utils/py.typed new file mode 100644 index 000000000..e69de29bb diff --git a/tests/_utils.py b/lib/ts_utils/utils.py similarity index 100% rename from tests/_utils.py rename to lib/ts_utils/utils.py diff --git a/pyproject.toml b/pyproject.toml index ae82dd648..46014bcd2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -162,7 +162,7 @@ extra-standard-library = [ "pyexpat", "zoneinfo", ] -known-first-party = ["_metadata", "_utils"] +known-first-party = ["ts_utils", "_utils"] [tool.typeshed] oldest_supported_python = "3.8" diff --git a/pyrightconfig.scripts_and_tests.json b/pyrightconfig.scripts_and_tests.json index 1dd97d444..68bcd2688 100644 --- a/pyrightconfig.scripts_and_tests.json +++ b/pyrightconfig.scripts_and_tests.json @@ -2,9 +2,13 @@ "$schema": "https://raw.githubusercontent.com/microsoft/pyright/main/packages/vscode-pyright/schemas/pyrightconfig.schema.json", "typeshedPath": ".", "include": [ + "lib", "scripts", "tests", ], + "extraPaths": [ + "lib", + ], "typeCheckingMode": "strict", // More of a lint. Unwanted for typeshed's own code. "reportImplicitStringConcatenation": "none", diff --git a/requirements-tests.txt b/requirements-tests.txt index b49099f4c..f443a00d9 100644 --- a/requirements-tests.txt +++ b/requirements-tests.txt @@ -22,3 +22,6 @@ tomli==2.0.2 tomlkit==0.13.2 typing_extensions>=4.12.0rc1 uv==0.4.18 + +# Utilities for typeshed infrastructure scripts. +ts_utils @ file:lib diff --git a/scripts/stubsabot.py b/scripts/stubsabot.py index 7af9df619..2a87f916d 100644 --- a/scripts/stubsabot.py +++ b/scripts/stubsabot.py @@ -312,7 +312,7 @@ async def get_github_repo_info(session: aiohttp.ClientSession, stub_info: StubIn Else, return None. """ if stub_info.upstream_repository: - # We have various sanity checks for the upstream_repository field in tests/_metadata.py, + # We have various sanity checks for the upstream_repository field in ts_utils.metadata, # so no need to repeat all of them here split_url = urllib.parse.urlsplit(stub_info.upstream_repository) if split_url.netloc == "github.com": diff --git a/tests/check_typeshed_structure.py b/tests/check_typeshed_structure.py index 88db8d669..56e35f38f 100755 --- a/tests/check_typeshed_structure.py +++ b/tests/check_typeshed_structure.py @@ -12,8 +12,8 @@ import re import sys from pathlib import Path -from _metadata import read_metadata -from _utils import ( +from ts_utils.metadata import read_metadata +from ts_utils.utils import ( REQS_FILE, STDLIB_PATH, TEST_CASES_DIR, diff --git a/tests/get_external_stub_requirements.py b/tests/get_external_stub_requirements.py index ecb1fbb76..9d015e4e8 100644 --- a/tests/get_external_stub_requirements.py +++ b/tests/get_external_stub_requirements.py @@ -11,7 +11,7 @@ import sys from packaging.requirements import Requirement -from _metadata import read_dependencies +from ts_utils.metadata import read_dependencies distributions = sys.argv[1:] if not distributions: diff --git a/tests/get_stubtest_system_requirements.py b/tests/get_stubtest_system_requirements.py index d32f2ae32..8d81dc6f4 100644 --- a/tests/get_stubtest_system_requirements.py +++ b/tests/get_stubtest_system_requirements.py @@ -1,8 +1,9 @@ #!/usr/bin/env python3 + import os import sys -from _metadata import read_stubtest_settings +from ts_utils.metadata import read_stubtest_settings platform = sys.platform distributions = sys.argv[1:] diff --git a/tests/mypy_test.py b/tests/mypy_test.py index db505161e..5d841c558 100755 --- a/tests/mypy_test.py +++ b/tests/mypy_test.py @@ -22,8 +22,8 @@ from typing_extensions import Annotated, TypeAlias import tomli from packaging.requirements import Requirement -from _metadata import PackageDependencies, get_recursive_requirements, read_metadata -from _utils import ( +from ts_utils.metadata import PackageDependencies, get_recursive_requirements, read_metadata +from ts_utils.utils import ( PYTHON_VERSION, STDLIB_PATH, TESTS_DIR, @@ -173,7 +173,7 @@ def add_configuration(configurations: list[MypyDistConf], distribution: str) -> with Path("stubs", distribution, "METADATA.toml").open("rb") as f: data = tomli.load(f) - # TODO: This could be added to _metadata.py, but is currently unused + # TODO: This could be added to ts_utils.metadata, but is currently unused mypy_tests_conf: dict[str, dict[str, Any]] = data.get("mypy-tests", {}) if not mypy_tests_conf: return diff --git a/tests/pyright_test.py b/tests/pyright_test.py index f6ff93fe1..46986a112 100755 --- a/tests/pyright_test.py +++ b/tests/pyright_test.py @@ -6,7 +6,7 @@ import subprocess import sys from pathlib import Path -from _utils import parse_requirements, print_command +from ts_utils.utils import parse_requirements, print_command _WELL_KNOWN_FILE = Path("tests", "pyright_test.py") diff --git a/tests/pytype_test.py b/tests/pytype_test.py index 6a389c8a8..366d279f2 100755 --- a/tests/pytype_test.py +++ b/tests/pytype_test.py @@ -35,8 +35,8 @@ from collections.abc import Iterable, Sequence from pytype import config as pytype_config, load_pytd # type: ignore[import] from pytype.imports import typeshed # type: ignore[import] -from _metadata import read_dependencies -from _utils import SupportedVersionsDict, parse_stdlib_versions_file, supported_versions_for_module +from ts_utils.metadata import read_dependencies +from ts_utils.utils import SupportedVersionsDict, parse_stdlib_versions_file, supported_versions_for_module TYPESHED_SUBDIRS = ["stdlib", "stubs"] TYPESHED_HOME = "TYPESHED_HOME" diff --git a/tests/regr_test.py b/tests/regr_test.py index 67cd954c2..87e29c65a 100755 --- a/tests/regr_test.py +++ b/tests/regr_test.py @@ -21,8 +21,8 @@ from functools import partial from pathlib import Path from typing_extensions import TypeAlias -from _metadata import get_recursive_requirements, read_metadata -from _utils import ( +from ts_utils.metadata import get_recursive_requirements, read_metadata +from ts_utils.utils import ( PYTHON_VERSION, TEST_CASES_DIR, DistributionTests, diff --git a/tests/runtests.py b/tests/runtests.py index 3903bd4b9..0caff10e5 100755 --- a/tests/runtests.py +++ b/tests/runtests.py @@ -9,17 +9,8 @@ import subprocess import sys from importlib.util import find_spec from pathlib import Path -from typing import Any - -from _utils import TEST_CASES_DIR, test_cases_path - -try: - from termcolor import colored # pyright: ignore[reportAssignmentType] -except ImportError: - - def colored(text: str, color: str | None = None, **kwargs: Any) -> str: # type: ignore[misc] - return text +from ts_utils.utils import TEST_CASES_DIR, colored, test_cases_path _STRICTER_CONFIG_FILE = "pyrightconfig.stricter.json" _TESTCASES_CONFIG_FILE = "pyrightconfig.testcases.json" diff --git a/tests/stubtest_stdlib.py b/tests/stubtest_stdlib.py index 738759d81..9d356aa54 100755 --- a/tests/stubtest_stdlib.py +++ b/tests/stubtest_stdlib.py @@ -13,7 +13,7 @@ import subprocess import sys from pathlib import Path -from _utils import allowlist_stubtest_arguments, allowlists_path +from ts_utils.utils import allowlist_stubtest_arguments, allowlists_path def run_stubtest(typeshed_dir: Path) -> int: diff --git a/tests/stubtest_third_party.py b/tests/stubtest_third_party.py index f2fc317e9..c16e40be1 100755 --- a/tests/stubtest_third_party.py +++ b/tests/stubtest_third_party.py @@ -13,8 +13,8 @@ from shutil import rmtree from textwrap import dedent from typing import NoReturn -from _metadata import NoSuchStubError, get_recursive_requirements, read_metadata -from _utils import ( +from ts_utils.metadata import NoSuchStubError, get_recursive_requirements, read_metadata +from ts_utils.utils import ( PYTHON_VERSION, allowlist_stubtest_arguments, allowlists_path, diff --git a/tests/typecheck_typeshed.py b/tests/typecheck_typeshed.py index 70d1d8e23..ea90b0ac0 100755 --- a/tests/typecheck_typeshed.py +++ b/tests/typecheck_typeshed.py @@ -9,7 +9,7 @@ import sys from itertools import product from typing_extensions import TypeAlias -from _utils import colored, print_error +from ts_utils.utils import colored, print_error ReturnCode: TypeAlias = int