Skip to content

Commit 1aea301

Browse files
authored
mypy_test.py: Add more comments
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 41de531 commit 1aea301

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
@@ -393,6 +393,10 @@ def install_requirements_for_venv(venv_info: VenvInfo, args: TestConfig, externa
393393

394394

395395
def setup_virtual_environments(distributions: dict[str, PackageDependencies], args: TestConfig, tempdir: Path) -> None:
396+
"""Logic necessary for testing stubs with non-types dependencies in isolated environments."""
397+
# STAGE 1: Determine which (if any) stubs packages require virtual environments.
398+
# Group stubs packages according to their external-requirements sets
399+
396400
# We don't actually need pip if there aren't any external dependencies
397401
no_external_dependencies_venv = VenvInfo(pip_exe="", python_exe=sys.executable)
398402
external_requirements_to_distributions: defaultdict[frozenset[str], list[str]] = defaultdict(list)
@@ -406,11 +410,13 @@ def setup_virtual_environments(distributions: dict[str, PackageDependencies], ar
406410
else:
407411
_DISTRIBUTION_TO_VENV_MAPPING[distribution_name] = no_external_dependencies_venv
408412

413+
# Exit early if there are no stubs packages that have non-types dependencies
409414
if num_pkgs_with_external_reqs == 0:
410415
if args.verbose:
411416
print(colored("No additional venvs are required to be set up", "blue"))
412417
return
413418

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

416422
if args.verbose:
@@ -421,7 +427,8 @@ def setup_virtual_environments(distributions: dict[str, PackageDependencies], ar
421427
f"distribution{'s' if num_pkgs_with_external_reqs != 1 else ''}... "
422428
)
423429
print(colored(msg, "blue"), end="", flush=True)
424-
venv_start_time = time.perf_counter()
430+
431+
venv_start_time = time.perf_counter()
425432

426433
with concurrent.futures.ThreadPoolExecutor() as executor:
427434
venv_info_futures = [
@@ -432,10 +439,14 @@ def setup_virtual_environments(distributions: dict[str, PackageDependencies], ar
432439
requirements_set, venv_info = venv_info_future.result()
433440
requirements_sets_to_venvs[requirements_set] = venv_info
434441

442+
venv_elapsed_time = time.perf_counter() - venv_start_time
443+
435444
if args.verbose:
436-
venv_elapsed_time = time.perf_counter() - venv_start_time
437445
print(colored(f"took {venv_elapsed_time:.2f} seconds", "blue"))
438-
pip_start_time = time.perf_counter()
446+
447+
# STAGE 3: For each {virtual_environment: requirements_set} pairing,
448+
# `pip install` the requirements set into the virtual environment
449+
pip_start_time = time.perf_counter()
439450

440451
# Limit workers to 10 at a time, since this makes network requests
441452
with concurrent.futures.ThreadPoolExecutor(max_workers=10) as executor:
@@ -445,11 +456,14 @@ def setup_virtual_environments(distributions: dict[str, PackageDependencies], ar
445456
]
446457
concurrent.futures.wait(pip_install_futures)
447458

459+
pip_elapsed_time = time.perf_counter() - pip_start_time
460+
448461
if args.verbose:
449-
pip_elapsed_time = time.perf_counter() - pip_start_time
450462
msg = f"Combined time for installing requirements across all venvs: {pip_elapsed_time:.2f} seconds"
451463
print(colored(msg, "blue"))
452464

465+
# STAGE 4: Populate the _DISTRIBUTION_TO_VENV_MAPPING
466+
# so that we have a simple {distribution: venv_to_use} mapping to use for the rest of the test.
453467
for requirements_set, distribution_list in external_requirements_to_distributions.items():
454468
venv_to_use = requirements_sets_to_venvs[requirements_set]
455469
_DISTRIBUTION_TO_VENV_MAPPING.update(dict.fromkeys(distribution_list, venv_to_use))
@@ -474,6 +488,9 @@ def test_third_party_stubs(code: int, args: TestConfig, tempdir: Path) -> TestRe
474488
):
475489
distributions_to_check[distribution] = get_recursive_requirements(distribution)
476490

491+
# If it's the first time test_third_party_stubs() has been called during this session,
492+
# setup the necessary virtual environments for testing the third-party stubs.
493+
# It should only be necessary to call setup_virtual_environments() once per session.
477494
if not _DISTRIBUTION_TO_VENV_MAPPING:
478495
setup_virtual_environments(distributions_to_check, args, tempdir)
479496

0 commit comments

Comments
 (0)