@@ -467,23 +467,13 @@ def edit(file: Path):
467
467
temporary .rename (file )
468
468
469
469
470
- def setup_switchers (versions : Versions , languages : Languages , html_root : Path ) -> None :
470
+ def setup_switchers (script_content : bytes , html_root : Path ) -> None :
471
471
"""Setup cross-links between CPython versions:
472
472
- Cross-link various languages in a language switcher
473
473
- Cross-link various versions in a version switcher
474
474
"""
475
- language_pairs = sorted ((l .tag , l .switcher_label ) for l in languages if l .in_prod ) # NoQA: E741
476
- version_pairs = [(v .name , v .picker_label ) for v in reversed (versions )]
477
-
478
- switchers_template_file = HERE / "templates" / "switchers.js"
479
475
switchers_path = html_root / "_static" / "switchers.js"
480
-
481
- template = Template (switchers_template_file .read_text (encoding = "UTF-8" ))
482
- rendered_template = template .safe_substitute (
483
- LANGUAGES = json .dumps (language_pairs ),
484
- VERSIONS = json .dumps (version_pairs ),
485
- )
486
- switchers_path .write_text (rendered_template , encoding = "UTF-8" )
476
+ switchers_path .write_text (script_content , encoding = "UTF-8" )
487
477
488
478
for file in html_root .glob ("**/*.html" ):
489
479
depth = len (file .relative_to (html_root ).parts ) - 1
@@ -541,8 +531,8 @@ class DocBuilder:
541
531
version : Version
542
532
versions : Versions
543
533
language : Language
544
- languages : Languages
545
534
cpython_repo : Repository
535
+ switchers_content : bytes
546
536
build_root : Path
547
537
www_root : Path
548
538
select_output : Literal ["no-html" , "only-html" , "only-html-en" ] | None
@@ -697,7 +687,7 @@ def build(self) -> None:
697
687
run (["chgrp" , "-R" , self .group , self .log_directory ])
698
688
if self .includes_html :
699
689
setup_switchers (
700
- self .versions , self . languages , self .checkout / "Doc" / "build" / "html"
690
+ self .switchers_content , self .checkout / "Doc" / "build" / "html"
701
691
)
702
692
logging .info ("Build done (%s)." , format_seconds (perf_counter () - start_time ))
703
693
@@ -1108,6 +1098,8 @@ def build_docs(args: argparse.Namespace) -> bool:
1108
1098
force_build = args .force
1109
1099
del args .force
1110
1100
1101
+ switchers_content = render_switchers (versions , languages )
1102
+
1111
1103
build_succeeded = set ()
1112
1104
build_failed = set ()
1113
1105
cpython_repo = Repository (
@@ -1127,7 +1119,12 @@ def build_docs(args: argparse.Namespace) -> bool:
1127
1119
scope .set_tag ("language" , language .tag )
1128
1120
cpython_repo .update ()
1129
1121
builder = DocBuilder (
1130
- version , versions , language , languages , cpython_repo , ** vars (args )
1122
+ version ,
1123
+ versions ,
1124
+ language ,
1125
+ cpython_repo ,
1126
+ switchers_content ,
1127
+ ** vars (args ),
1131
1128
)
1132
1129
built_successfully = builder .run (http , force_build = force_build )
1133
1130
if built_successfully :
@@ -1179,6 +1176,19 @@ def parse_languages_from_config() -> Languages:
1179
1176
return Languages .from_json (config ["defaults" ], config ["languages" ])
1180
1177
1181
1178
1179
+ def render_switchers (versions : Versions , languages : Languages ) -> bytes :
1180
+ language_pairs = sorted ((l .tag , l .switcher_label ) for l in languages if l .in_prod ) # NoQA: E741
1181
+ version_pairs = [(v .name , v .picker_label ) for v in reversed (versions )]
1182
+
1183
+ switchers_template_file = HERE / "templates" / "switchers.js"
1184
+ template = Template (switchers_template_file .read_text (encoding = "UTF-8" ))
1185
+ rendered_template = template .safe_substitute (
1186
+ LANGUAGES = json .dumps (language_pairs ),
1187
+ VERSIONS = json .dumps (version_pairs ),
1188
+ )
1189
+ return rendered_template .encode ("UTF-8" )
1190
+
1191
+
1182
1192
def build_sitemap (
1183
1193
versions : Versions , languages : Languages , www_root : Path , group : str
1184
1194
) -> None :
0 commit comments