@@ -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 :