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" ))
@@ -388,9 +394,7 @@ def edit(file: Path):
388394 temporary .rename (file )
389395
390396
391- def setup_switchers (
392- versions : Sequence [Version ], languages : Sequence [Language ], html_root : Path
393- ):
397+ def setup_switchers (versions : Versions , languages : Languages , html_root : Path ):
394398 """Setup cross-links between CPython versions:
395399 - Cross-link various languages in a language switcher
396400 - Cross-link various versions in a version switcher
@@ -462,9 +466,9 @@ class DocBuilder:
462466 """Builder for a CPython version and a language."""
463467
464468 version : Version
465- versions : Sequence [ Version ]
469+ versions : Versions
466470 language : Language
467- languages : Sequence [ Language ]
471+ languages : Languages
468472 cpython_repo : Repository
469473 build_root : Path
470474 www_root : Path
@@ -1070,7 +1074,7 @@ def build_docs(args) -> bool:
10701074 return all_built_successfully
10711075
10721076
1073- def parse_versions_from_devguide (http : urllib3 .PoolManager ) -> list [ Version ] :
1077+ def parse_versions_from_devguide (http : urllib3 .PoolManager ) -> Versions :
10741078 releases = http .request (
10751079 "GET" ,
10761080 "https://raw.githubusercontent.com/"
@@ -1082,7 +1086,7 @@ def parse_versions_from_devguide(http: urllib3.PoolManager) -> list[Version]:
10821086 return versions
10831087
10841088
1085- def parse_languages_from_config () -> list [ Language ] :
1089+ def parse_languages_from_config () -> Languages :
10861090 """Read config.toml to discover languages to build."""
10871091 config = tomlkit .parse ((HERE / "config.toml" ).read_text (encoding = "UTF-8" ))
10881092 defaults = config ["defaults" ]
@@ -1103,9 +1107,7 @@ def parse_languages_from_config() -> list[Language]:
11031107 ]
11041108
11051109
1106- def build_sitemap (
1107- versions : Iterable [Version ], languages : Iterable [Language ], www_root : Path , group
1108- ):
1110+ def build_sitemap (versions : Versions , languages : Languages , www_root : Path , group ):
11091111 """Build a sitemap with all live versions and translations."""
11101112 if not www_root .exists ():
11111113 logging .info ("Skipping sitemap generation (www root does not even exist)." )
@@ -1155,8 +1157,8 @@ def copy_robots_txt(
11551157def major_symlinks (
11561158 www_root : Path ,
11571159 group : str ,
1158- versions : Iterable [ Version ] ,
1159- languages : Iterable [ Language ] ,
1160+ versions : Versions ,
1161+ languages : Languages ,
11601162 skip_cache_invalidation : bool ,
11611163 http : urllib3 .PoolManager ,
11621164) -> None :
0 commit comments