Skip to content

Commit 9aa3d99

Browse files
authored
mypy_test.py: Add more comments (#9477)
Some fairly subtle logic was added in #9408, and I'm immediately regretting not having documented it slightly better. This PR adds some more comments to make maintaining this code easier in the future.
1 parent 910397c commit 9aa3d99

File tree

1 file changed

+21
-4
lines changed

1 file changed

+21
-4
lines changed

tests/mypy_test.py

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -381,6 +381,10 @@ def install_requirements_for_venv(venv_info: VenvInfo, args: TestConfig, externa
381381

382382

383383
def setup_virtual_environments(distributions: dict[str, PackageDependencies], args: TestConfig, tempdir: Path) -> None:
384+
"""Logic necessary for testing stubs with non-types dependencies in isolated environments."""
385+
# STAGE 1: Determine which (if any) stubs packages require virtual environments.
386+
# Group stubs packages according to their external-requirements sets
387+
384388
# We don't actually need pip if there aren't any external dependencies
385389
no_external_dependencies_venv = VenvInfo(pip_exe="", python_exe=sys.executable)
386390
external_requirements_to_distributions: defaultdict[frozenset[str], list[str]] = defaultdict(list)
@@ -394,11 +398,13 @@ def setup_virtual_environments(distributions: dict[str, PackageDependencies], ar
394398
else:
395399
_DISTRIBUTION_TO_VENV_MAPPING[distribution_name] = no_external_dependencies_venv
396400

401+
# Exit early if there are no stubs packages that have non-types dependencies
397402
if num_pkgs_with_external_reqs == 0:
398403
if args.verbose:
399404
print(colored("No additional venvs are required to be set up", "blue"))
400405
return
401406

407+
# STAGE 2: Setup a virtual environment for each unique set of external requirements
402408
requirements_sets_to_venvs: dict[frozenset[str], VenvInfo] = {}
403409

404410
if args.verbose:
@@ -409,7 +415,8 @@ def setup_virtual_environments(distributions: dict[str, PackageDependencies], ar
409415
f"distribution{'s' if num_pkgs_with_external_reqs != 1 else ''}... "
410416
)
411417
print(colored(msg, "blue"), end="", flush=True)
412-
venv_start_time = time.perf_counter()
418+
419+
venv_start_time = time.perf_counter()
413420

414421
with concurrent.futures.ThreadPoolExecutor() as executor:
415422
venv_info_futures = [
@@ -420,10 +427,14 @@ def setup_virtual_environments(distributions: dict[str, PackageDependencies], ar
420427
requirements_set, venv_info = venv_info_future.result()
421428
requirements_sets_to_venvs[requirements_set] = venv_info
422429

430+
venv_elapsed_time = time.perf_counter() - venv_start_time
431+
423432
if args.verbose:
424-
venv_elapsed_time = time.perf_counter() - venv_start_time
425433
print(colored(f"took {venv_elapsed_time:.2f} seconds", "blue"))
426-
pip_start_time = time.perf_counter()
434+
435+
# STAGE 3: For each {virtual_environment: requirements_set} pairing,
436+
# `pip install` the requirements set into the virtual environment
437+
pip_start_time = time.perf_counter()
427438

428439
# Limit workers to 10 at a time, since this makes network requests
429440
with concurrent.futures.ThreadPoolExecutor(max_workers=10) as executor:
@@ -433,11 +444,14 @@ def setup_virtual_environments(distributions: dict[str, PackageDependencies], ar
433444
]
434445
concurrent.futures.wait(pip_install_futures)
435446

447+
pip_elapsed_time = time.perf_counter() - pip_start_time
448+
436449
if args.verbose:
437-
pip_elapsed_time = time.perf_counter() - pip_start_time
438450
msg = f"Combined time for installing requirements across all venvs: {pip_elapsed_time:.2f} seconds"
439451
print(colored(msg, "blue"))
440452

453+
# STAGE 4: Populate the _DISTRIBUTION_TO_VENV_MAPPING
454+
# so that we have a simple {distribution: venv_to_use} mapping to use for the rest of the test.
441455
for requirements_set, distribution_list in external_requirements_to_distributions.items():
442456
venv_to_use = requirements_sets_to_venvs[requirements_set]
443457
_DISTRIBUTION_TO_VENV_MAPPING.update(dict.fromkeys(distribution_list, venv_to_use))
@@ -462,6 +476,9 @@ def test_third_party_stubs(code: int, args: TestConfig, tempdir: Path) -> TestRe
462476
):
463477
distributions_to_check[distribution] = get_recursive_requirements(distribution)
464478

479+
# If it's the first time test_third_party_stubs() has been called during this session,
480+
# setup the necessary virtual environments for testing the third-party stubs.
481+
# It should only be necessary to call setup_virtual_environments() once per session.
465482
if not _DISTRIBUTION_TO_VENV_MAPPING:
466483
setup_virtual_environments(distributions_to_check, args, tempdir)
467484

0 commit comments

Comments
 (0)