Skip to content

Commit 193b749

Browse files
authored
Merge pull request #195 from AA-Turner/ordering
2 parents 879433e + a00bf2b commit 193b749

File tree

1 file changed

+16
-40
lines changed

1 file changed

+16
-40
lines changed

build_docs.py

+16-40
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
"""
2222

2323
from argparse import ArgumentParser
24+
from collections.abc import Sequence
2425
from contextlib import suppress, contextmanager
2526
from dataclasses import dataclass
2627
import filecmp
@@ -36,7 +37,6 @@
3637
import subprocess
3738
import sys
3839
from bisect import bisect_left as bisect
39-
from collections import OrderedDict
4040
from datetime import datetime as dt, timezone
4141
from pathlib import Path
4242
from string import Template
@@ -181,9 +181,7 @@ def setup_indexsidebar(self, versions, dest_path):
181181
sidebar_file.write(
182182
sidebar_template.render(
183183
current_version=self,
184-
versions=sorted(
185-
versions, key=lambda v: version_to_tuple(v.name), reverse=True
186-
),
184+
versions=versions[::-1],
187185
)
188186
)
189187

@@ -338,12 +336,7 @@ def locate_nearest_version(available_versions, target_version):
338336
'3.7'
339337
"""
340338

341-
available_versions_tuples = sorted(
342-
[
343-
version_to_tuple(available_version)
344-
for available_version in set(available_versions)
345-
]
346-
)
339+
available_versions_tuples = sorted(map(version_to_tuple, set(available_versions)))
347340
target_version_tuple = version_to_tuple(target_version)
348341
try:
349342
found = available_versions_tuples[
@@ -372,44 +365,24 @@ def edit(file: Path):
372365

373366

374367
def setup_switchers(
375-
versions: Iterable[Version], languages: Iterable[Language], html_root: Path
368+
versions: Sequence[Version], languages: Sequence[Language], html_root: Path
376369
):
377370
"""Setup cross-links between CPython versions:
378371
- Cross-link various languages in a language switcher
379372
- Cross-link various versions in a version switcher
380373
"""
374+
languages_map = dict(sorted((l.tag, l.name) for l in languages if l.in_prod))
375+
versions_map = {v.name: v.picker_label for v in reversed(versions)}
376+
381377
with open(
382378
HERE / "templates" / "switchers.js", encoding="UTF-8"
383379
) as switchers_template_file:
384380
template = Template(switchers_template_file.read())
385381
switchers_path = html_root / "_static" / "switchers.js"
386382
switchers_path.write_text(
387383
template.safe_substitute(
388-
{
389-
"LANGUAGES": json.dumps(
390-
OrderedDict(
391-
sorted(
392-
[
393-
(language.tag, language.name)
394-
for language in languages
395-
if language.in_prod
396-
]
397-
)
398-
)
399-
),
400-
"VERSIONS": json.dumps(
401-
OrderedDict(
402-
[
403-
(version.name, version.picker_label)
404-
for version in sorted(
405-
versions,
406-
key=lambda v: version_to_tuple(v.name),
407-
reverse=True,
408-
)
409-
]
410-
)
411-
),
412-
}
384+
LANGUAGES=json.dumps(languages_map),
385+
VERSIONS=json.dumps(versions_map),
413386
),
414387
encoding="UTF-8",
415388
)
@@ -617,9 +590,9 @@ class DocBuilder:
617590
"""Builder for a CPython version and a language."""
618591

619592
version: Version
620-
versions: Iterable[Version]
593+
versions: Sequence[Version]
621594
language: Language
622-
languages: Iterable[Language]
595+
languages: Sequence[Language]
623596
cpython_repo: Repository
624597
build_root: Path
625598
www_root: Path
@@ -1127,7 +1100,7 @@ def parse_versions_from_devguide(http: urllib3.PoolManager) -> list[Version]:
11271100
return versions
11281101

11291102

1130-
def parse_languages_from_config():
1103+
def parse_languages_from_config() -> list[Language]:
11311104
"""Read config.toml to discover languages to build."""
11321105
config = tomlkit.parse((HERE / "config.toml").read_text(encoding="UTF-8"))
11331106
languages = []
@@ -1166,10 +1139,13 @@ def build_docs(args) -> bool:
11661139
http = urllib3.PoolManager()
11671140
versions = parse_versions_from_devguide(http)
11681141
languages = parse_languages_from_config()
1142+
# Reverse languages but not versions, because we take version-language
1143+
# pairs from the end of the list, effectively reversing it.
1144+
# This runs languages in config.toml order and versions newest first.
11691145
todo = [
11701146
(version, language)
11711147
for version in Version.filter(versions, args.branch)
1172-
for language in Language.filter(languages, args.languages)
1148+
for language in reversed(Language.filter(languages, args.languages))
11731149
]
11741150
del args.branch
11751151
del args.languages

0 commit comments

Comments
 (0)