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" ))
@@ -389,7 +395,7 @@ def edit(file: Path):
389
395
390
396
391
397
def setup_switchers (
392
- versions : Sequence [ Version ] , languages : Sequence [ Language ] , html_root : Path
398
+ versions : Versions , languages : Languages , html_root : Path
393
399
):
394
400
"""Setup cross-links between CPython versions:
395
401
- Cross-link various languages in a language switcher
@@ -462,9 +468,9 @@ class DocBuilder:
462
468
"""Builder for a CPython version and a language."""
463
469
464
470
version : Version
465
- versions : Sequence [ Version ]
471
+ versions : Versions
466
472
language : Language
467
- languages : Sequence [ Language ]
473
+ languages : Languages
468
474
cpython_repo : Repository
469
475
build_root : Path
470
476
www_root : Path
@@ -1070,7 +1076,7 @@ def build_docs(args) -> bool:
1070
1076
return all_built_successfully
1071
1077
1072
1078
1073
- def parse_versions_from_devguide (http : urllib3 .PoolManager ) -> list [ Version ] :
1079
+ def parse_versions_from_devguide (http : urllib3 .PoolManager ) -> Versions :
1074
1080
releases = http .request (
1075
1081
"GET" ,
1076
1082
"https://raw.githubusercontent.com/"
@@ -1082,7 +1088,7 @@ def parse_versions_from_devguide(http: urllib3.PoolManager) -> list[Version]:
1082
1088
return versions
1083
1089
1084
1090
1085
- def parse_languages_from_config () -> list [ Language ] :
1091
+ def parse_languages_from_config () -> Languages :
1086
1092
"""Read config.toml to discover languages to build."""
1087
1093
config = tomlkit .parse ((HERE / "config.toml" ).read_text (encoding = "UTF-8" ))
1088
1094
defaults = config ["defaults" ]
@@ -1104,7 +1110,7 @@ def parse_languages_from_config() -> list[Language]:
1104
1110
1105
1111
1106
1112
def build_sitemap (
1107
- versions : Iterable [ Version ] , languages : Iterable [ Language ] , www_root : Path , group
1113
+ versions : Versions , languages : Languages , www_root : Path , group
1108
1114
):
1109
1115
"""Build a sitemap with all live versions and translations."""
1110
1116
if not www_root .exists ():
@@ -1155,10 +1161,10 @@ def copy_robots_txt(
1155
1161
def major_symlinks (
1156
1162
www_root : Path ,
1157
1163
group : str ,
1158
- versions : Iterable [ Version ] ,
1159
- languages : Iterable [ Language ] ,
1164
+ versions : Versions ,
1165
+ languages : Languages ,
1160
1166
skip_cache_invalidation : bool ,
1161
- http : urllib3 .PoolManager ,
1167
+ http : urllib3 .PoolManager
1162
1168
) -> None :
1163
1169
"""Maintains the /2/ and /3/ symlinks for each language.
1164
1170
0 commit comments