33
33
import sys
34
34
from argparse import ArgumentParser , Namespace
35
35
from bisect import bisect_left as bisect
36
- from collections .abc import Iterable , Sequence
37
36
from contextlib import contextmanager , suppress
38
37
from dataclasses import dataclass
39
38
from datetime import datetime as dt , timezone
42
41
from pathlib import Path
43
42
from string import Template
44
43
from time import perf_counter , sleep
45
- from typing import Literal
46
44
from urllib .parse import urljoin
47
45
48
46
import jinja2
49
47
import tomlkit
50
48
import urllib3
51
49
import zc .lockfile
52
50
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
+
53
59
try :
54
60
from os import EX_OK , EX_SOFTWARE as EX_FAILURE
55
61
except ImportError :
@@ -170,7 +176,7 @@ def picker_label(self):
170
176
return f"pre ({ self .name } )"
171
177
return self .name
172
178
173
- def setup_indexsidebar (self , versions : Sequence [ Version ] , dest_path : Path ):
179
+ def setup_indexsidebar (self , versions : Versions , dest_path : Path ):
174
180
"""Build indexsidebar.html for Sphinx."""
175
181
template_path = HERE / "templates" / "indexsidebar.html"
176
182
template = jinja2 .Template (template_path .read_text (encoding = "UTF-8" ))
@@ -388,9 +394,7 @@ def edit(file: Path):
388
394
temporary .rename (file )
389
395
390
396
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 ):
394
398
"""Setup cross-links between CPython versions:
395
399
- Cross-link various languages in a language switcher
396
400
- Cross-link various versions in a version switcher
@@ -462,9 +466,9 @@ class DocBuilder:
462
466
"""Builder for a CPython version and a language."""
463
467
464
468
version : Version
465
- versions : Sequence [ Version ]
469
+ versions : Versions
466
470
language : Language
467
- languages : Sequence [ Language ]
471
+ languages : Languages
468
472
cpython_repo : Repository
469
473
build_root : Path
470
474
www_root : Path
@@ -1070,7 +1074,7 @@ def build_docs(args) -> bool:
1070
1074
return all_built_successfully
1071
1075
1072
1076
1073
- def parse_versions_from_devguide (http : urllib3 .PoolManager ) -> list [ Version ] :
1077
+ def parse_versions_from_devguide (http : urllib3 .PoolManager ) -> Versions :
1074
1078
releases = http .request (
1075
1079
"GET" ,
1076
1080
"https://raw.githubusercontent.com/"
@@ -1082,7 +1086,7 @@ def parse_versions_from_devguide(http: urllib3.PoolManager) -> list[Version]:
1082
1086
return versions
1083
1087
1084
1088
1085
- def parse_languages_from_config () -> list [ Language ] :
1089
+ def parse_languages_from_config () -> Languages :
1086
1090
"""Read config.toml to discover languages to build."""
1087
1091
config = tomlkit .parse ((HERE / "config.toml" ).read_text (encoding = "UTF-8" ))
1088
1092
defaults = config ["defaults" ]
@@ -1103,9 +1107,7 @@ def parse_languages_from_config() -> list[Language]:
1103
1107
]
1104
1108
1105
1109
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 ):
1109
1111
"""Build a sitemap with all live versions and translations."""
1110
1112
if not www_root .exists ():
1111
1113
logging .info ("Skipping sitemap generation (www root does not even exist)." )
@@ -1155,8 +1157,8 @@ def copy_robots_txt(
1155
1157
def major_symlinks (
1156
1158
www_root : Path ,
1157
1159
group : str ,
1158
- versions : Iterable [ Version ] ,
1159
- languages : Iterable [ Language ] ,
1160
+ versions : Versions ,
1161
+ languages : Languages ,
1160
1162
skip_cache_invalidation : bool ,
1161
1163
http : urllib3 .PoolManager ,
1162
1164
) -> None :
0 commit comments