3333import sys
3434from argparse import ArgumentParser , Namespace
3535from bisect import bisect_left as bisect
36- from collections .abc import Iterable , Sequence
3736from contextlib import contextmanager , suppress
3837from dataclasses import dataclass
3938from datetime import datetime as dt , timezone
4241from pathlib import Path
4342from string import Template
4443from time import perf_counter , sleep
45- from typing import Literal
4644from urllib .parse import urljoin
4745
4846import jinja2
4947import tomlkit
5048import urllib3
5149import zc .lockfile
5250
51+ TYPE_CHECKING = False
52+ if TYPE_CHECKING :
53+ from collections .abc import Sequence
54+ from typing import Literal , TypeAlias
55+
56+ Versions : TypeAlias = Sequence ['Version' ]
57+ Languages : TypeAlias = Sequence ['Language' ]
58+
5359try :
5460 from os import EX_OK , EX_SOFTWARE as EX_FAILURE
5561except ImportError :
@@ -170,7 +176,7 @@ def picker_label(self):
170176 return f"pre ({ self .name } )"
171177 return self .name
172178
173- def setup_indexsidebar (self , versions : Sequence [ Version ] , dest_path : Path ):
179+ def setup_indexsidebar (self , versions : Versions , dest_path : Path ):
174180 """Build indexsidebar.html for Sphinx."""
175181 template_path = HERE / "templates" / "indexsidebar.html"
176182 template = jinja2 .Template (template_path .read_text (encoding = "UTF-8" ))
@@ -389,7 +395,7 @@ def edit(file: Path):
389395
390396
391397def setup_switchers (
392- versions : Sequence [ Version ] , languages : Sequence [ Language ] , html_root : Path
398+ versions : Versions , languages : Languages , html_root : Path
393399):
394400 """Setup cross-links between CPython versions:
395401 - Cross-link various languages in a language switcher
@@ -462,9 +468,9 @@ class DocBuilder:
462468 """Builder for a CPython version and a language."""
463469
464470 version : Version
465- versions : Sequence [ Version ]
471+ versions : Versions
466472 language : Language
467- languages : Sequence [ Language ]
473+ languages : Languages
468474 cpython_repo : Repository
469475 build_root : Path
470476 www_root : Path
@@ -1070,7 +1076,7 @@ def build_docs(args) -> bool:
10701076 return all_built_successfully
10711077
10721078
1073- def parse_versions_from_devguide (http : urllib3 .PoolManager ) -> list [ Version ] :
1079+ def parse_versions_from_devguide (http : urllib3 .PoolManager ) -> Versions :
10741080 releases = http .request (
10751081 "GET" ,
10761082 "https://raw.githubusercontent.com/"
@@ -1082,7 +1088,7 @@ def parse_versions_from_devguide(http: urllib3.PoolManager) -> list[Version]:
10821088 return versions
10831089
10841090
1085- def parse_languages_from_config () -> list [ Language ] :
1091+ def parse_languages_from_config () -> Languages :
10861092 """Read config.toml to discover languages to build."""
10871093 config = tomlkit .parse ((HERE / "config.toml" ).read_text (encoding = "UTF-8" ))
10881094 defaults = config ["defaults" ]
@@ -1104,7 +1110,7 @@ def parse_languages_from_config() -> list[Language]:
11041110
11051111
11061112def build_sitemap (
1107- versions : Iterable [ Version ] , languages : Iterable [ Language ] , www_root : Path , group
1113+ versions : Versions , languages : Languages , www_root : Path , group
11081114):
11091115 """Build a sitemap with all live versions and translations."""
11101116 if not www_root .exists ():
@@ -1155,10 +1161,10 @@ def copy_robots_txt(
11551161def major_symlinks (
11561162 www_root : Path ,
11571163 group : str ,
1158- versions : Iterable [ Version ] ,
1159- languages : Iterable [ Language ] ,
1164+ versions : Versions ,
1165+ languages : Languages ,
11601166 skip_cache_invalidation : bool ,
1161- http : urllib3 .PoolManager ,
1167+ http : urllib3 .PoolManager
11621168) -> None :
11631169 """Maintains the /2/ and /3/ symlinks for each language.
11641170
0 commit comments