@@ -467,23 +467,13 @@ def edit(file: Path):
467467 temporary .rename (file )
468468
469469
470- def setup_switchers (versions : Versions , languages : Languages , html_root : Path ) -> None :
470+ def setup_switchers (script_content : bytes , html_root : Path ) -> None :
471471 """Setup cross-links between CPython versions:
472472 - Cross-link various languages in a language switcher
473473 - Cross-link various versions in a version switcher
474474 """
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"
479475 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" )
487477
488478 for file in html_root .glob ("**/*.html" ):
489479 depth = len (file .relative_to (html_root ).parts ) - 1
@@ -541,8 +531,8 @@ class DocBuilder:
541531 version : Version
542532 versions : Versions
543533 language : Language
544- languages : Languages
545534 cpython_repo : Repository
535+ switchers_content : bytes
546536 build_root : Path
547537 www_root : Path
548538 select_output : Literal ["no-html" , "only-html" , "only-html-en" ] | None
@@ -697,7 +687,7 @@ def build(self) -> None:
697687 run (["chgrp" , "-R" , self .group , self .log_directory ])
698688 if self .includes_html :
699689 setup_switchers (
700- self .versions , self . languages , self .checkout / "Doc" / "build" / "html"
690+ self .switchers_content , self .checkout / "Doc" / "build" / "html"
701691 )
702692 logging .info ("Build done (%s)." , format_seconds (perf_counter () - start_time ))
703693
@@ -1108,6 +1098,8 @@ def build_docs(args: argparse.Namespace) -> bool:
11081098 force_build = args .force
11091099 del args .force
11101100
1101+ switchers_content = render_switchers (versions , languages )
1102+
11111103 build_succeeded = set ()
11121104 build_failed = set ()
11131105 cpython_repo = Repository (
@@ -1127,7 +1119,12 @@ def build_docs(args: argparse.Namespace) -> bool:
11271119 scope .set_tag ("language" , language .tag )
11281120 cpython_repo .update ()
11291121 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 ),
11311128 )
11321129 built_successfully = builder .run (http , force_build = force_build )
11331130 if built_successfully :
@@ -1179,6 +1176,19 @@ def parse_languages_from_config() -> Languages:
11791176 return Languages .from_json (config ["defaults" ], config ["languages" ])
11801177
11811178
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+
11821192def build_sitemap (
11831193 versions : Versions , languages : Languages , www_root : Path , group : str
11841194) -> None :
0 commit comments