Browse Source

ref: improve devimports test (#70926)

this failed to catch openapi_pydantic because it does not have a
top_level.txt

<!-- Describe your PR here. -->
anthony sottile 10 months ago
parent
commit
dfaa8185e9
1 changed files with 6 additions and 15 deletions
  1. 6 15
      tests/sentry/test_devimports.py

+ 6 - 15
tests/sentry/test_devimports.py

@@ -19,18 +19,6 @@ def extract_packages(text_content: str) -> set[str]:
     return {line.split("==")[0] for line in text_content.splitlines() if "==" in line}
 
 
-def package_top_level(package: str) -> list[str]:
-    # Ideally we'd use importlib.metadata.packages_distributions()
-    # but we're not on py3.10 yet.
-    # Inspired by https://github.com/python/cpython/blob/e25d8b40cd70744513e190b1ca153087382b6b09/Lib/importlib/metadata/__init__.py#L934
-    dist = importlib.metadata.distribution(package)
-    top_level = dist.read_text("top_level.txt")
-    if top_level:
-        return top_level.split()
-    else:
-        return []
-
-
 @functools.lru_cache
 def dev_dependencies() -> tuple[str, ...]:
     with open("requirements-dev-frozen.txt") as f:
@@ -38,11 +26,14 @@ def dev_dependencies() -> tuple[str, ...]:
     with open("requirements-frozen.txt") as f:
         prod_packages = extract_packages(f.read())
 
-    module_names = []
     # We have some packages that are both runtime + dev
     # but we only care about packages that are exclusively dev deps
-    for package in dev_packages - prod_packages:
-        module_names.extend(package_top_level(package))
+    devonly = dev_packages - prod_packages
+
+    module_names = []
+    for mod, packages in importlib.metadata.packages_distributions().items():
+        if devonly.intersection(packages):
+            module_names.append(mod)
     return tuple(sorted(module_names))