From 53422f8918debdaf60e1605d0e2e3ce77a810afd Mon Sep 17 00:00:00 2001 From: Alex Waygood Date: Wed, 20 Sep 2023 20:03:01 +0100 Subject: [PATCH] pytype_test.py: Handle non-typeshed requirements that are stub-only packages (#10723) --- tests/pytype_test.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/tests/pytype_test.py b/tests/pytype_test.py index 66f66166e..af7dedade 100755 --- a/tests/pytype_test.py +++ b/tests/pytype_test.py @@ -152,12 +152,15 @@ def find_stubs_in_paths(paths: Sequence[str]) -> list[str]: def _get_pkgs_associated_with_requirement(req_name: str) -> list[str]: dist = importlib.metadata.distribution(req_name) toplevel_txt_contents = dist.read_text("top_level.txt") - if toplevel_txt_contents is not None: - return toplevel_txt_contents.split() - if dist.files is None: - raise RuntimeError("Can't read find the packages associated with requirement {req_name!r}") - maybe_modules = [f.parts[0] if len(f.parts) > 1 else inspect.getmodulename(f) for f in dist.files] - return [name for name in maybe_modules if name is not None and "." not in name] + if toplevel_txt_contents is None: + if dist.files is None: + raise RuntimeError("Can't read find the packages associated with requirement {req_name!r}") + maybe_modules = [f.parts[0] if len(f.parts) > 1 else inspect.getmodulename(f) for f in dist.files] + packages = [name for name in maybe_modules if name is not None and "." not in name] + else: + packages = toplevel_txt_contents.split() + # https://peps.python.org/pep-0561/#stub-only-packages + return sorted({package.removesuffix("-stubs") for package in packages}) def get_missing_modules(files_to_test: Sequence[str]) -> Iterable[str]: