|
21 | 21 | """ |
22 | 22 |
|
23 | 23 | from argparse import ArgumentParser |
| 24 | +from collections.abc import Sequence |
24 | 25 | from contextlib import suppress, contextmanager |
25 | 26 | from dataclasses import dataclass |
26 | 27 | import filecmp |
|
36 | 37 | import subprocess |
37 | 38 | import sys |
38 | 39 | from bisect import bisect_left as bisect |
39 | | -from collections import OrderedDict |
40 | 40 | from datetime import datetime as dt, timezone |
41 | 41 | from pathlib import Path |
42 | 42 | from string import Template |
@@ -181,9 +181,7 @@ def setup_indexsidebar(self, versions, dest_path): |
181 | 181 | sidebar_file.write( |
182 | 182 | sidebar_template.render( |
183 | 183 | current_version=self, |
184 | | - versions=sorted( |
185 | | - versions, key=lambda v: version_to_tuple(v.name), reverse=True |
186 | | - ), |
| 184 | + versions=versions[::-1], |
187 | 185 | ) |
188 | 186 | ) |
189 | 187 |
|
@@ -338,12 +336,7 @@ def locate_nearest_version(available_versions, target_version): |
338 | 336 | '3.7' |
339 | 337 | """ |
340 | 338 |
|
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))) |
347 | 340 | target_version_tuple = version_to_tuple(target_version) |
348 | 341 | try: |
349 | 342 | found = available_versions_tuples[ |
@@ -372,44 +365,24 @@ def edit(file: Path): |
372 | 365 |
|
373 | 366 |
|
374 | 367 | def setup_switchers( |
375 | | - versions: Iterable[Version], languages: Iterable[Language], html_root: Path |
| 368 | + versions: Sequence[Version], languages: Sequence[Language], html_root: Path |
376 | 369 | ): |
377 | 370 | """Setup cross-links between CPython versions: |
378 | 371 | - Cross-link various languages in a language switcher |
379 | 372 | - Cross-link various versions in a version switcher |
380 | 373 | """ |
| 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 | + |
381 | 377 | with open( |
382 | 378 | HERE / "templates" / "switchers.js", encoding="UTF-8" |
383 | 379 | ) as switchers_template_file: |
384 | 380 | template = Template(switchers_template_file.read()) |
385 | 381 | switchers_path = html_root / "_static" / "switchers.js" |
386 | 382 | switchers_path.write_text( |
387 | 383 | 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), |
413 | 386 | ), |
414 | 387 | encoding="UTF-8", |
415 | 388 | ) |
@@ -617,9 +590,9 @@ class DocBuilder: |
617 | 590 | """Builder for a CPython version and a language.""" |
618 | 591 |
|
619 | 592 | version: Version |
620 | | - versions: Iterable[Version] |
| 593 | + versions: Sequence[Version] |
621 | 594 | language: Language |
622 | | - languages: Iterable[Language] |
| 595 | + languages: Sequence[Language] |
623 | 596 | cpython_repo: Repository |
624 | 597 | build_root: Path |
625 | 598 | www_root: Path |
@@ -1127,7 +1100,7 @@ def parse_versions_from_devguide(http: urllib3.PoolManager) -> list[Version]: |
1127 | 1100 | return versions |
1128 | 1101 |
|
1129 | 1102 |
|
1130 | | -def parse_languages_from_config(): |
| 1103 | +def parse_languages_from_config() -> list[Language]: |
1131 | 1104 | """Read config.toml to discover languages to build.""" |
1132 | 1105 | config = tomlkit.parse((HERE / "config.toml").read_text(encoding="UTF-8")) |
1133 | 1106 | languages = [] |
@@ -1166,10 +1139,13 @@ def build_docs(args) -> bool: |
1166 | 1139 | http = urllib3.PoolManager() |
1167 | 1140 | versions = parse_versions_from_devguide(http) |
1168 | 1141 | 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. |
1169 | 1145 | todo = [ |
1170 | 1146 | (version, language) |
1171 | 1147 | 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)) |
1173 | 1149 | ] |
1174 | 1150 | del args.branch |
1175 | 1151 | del args.languages |
|
0 commit comments