Skip to content

Commit 9f34377

Browse files
authored
Extract switchers.js rendering into a new function. (#280)
Previously, identical content for ``switchers.js`` was rendered for each version-language pair. This commit pre-renders the content of the file, then writing it to disk for each version-language pair.
1 parent 5cfd94e commit 9f34377

File tree

1 file changed

+25
-15
lines changed

1 file changed

+25
-15
lines changed

Diff for: build_docs.py

+25-15
Original file line numberDiff line numberDiff line change
@@ -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+
11821192
def build_sitemap(
11831193
versions: Versions, languages: Languages, www_root: Path, group: str
11841194
) -> None:

0 commit comments

Comments
 (0)