@@ -143,16 +143,6 @@ def current_dev(self) -> Version:
143
143
"""Find the current CPython version in development."""
144
144
return max (self , key = Version .as_tuple )
145
145
146
- def setup_indexsidebar (self , current : Version , dest_path : Path ) -> None :
147
- """Build indexsidebar.html for Sphinx."""
148
- template_path = HERE / "templates" / "indexsidebar.html"
149
- template = jinja2 .Template (template_path .read_text (encoding = "UTF-8" ))
150
- rendered_template = template .render (
151
- current_version = current ,
152
- versions = list (reversed (self )),
153
- )
154
- dest_path .write_text (rendered_template , encoding = "UTF-8" )
155
-
156
146
157
147
@dataclasses .dataclass (frozen = True , kw_only = True , slots = True )
158
148
class Version :
@@ -529,9 +519,9 @@ class DocBuilder:
529
519
"""Builder for a CPython version and a language."""
530
520
531
521
version : Version
532
- versions : Versions
533
522
language : Language
534
523
cpython_repo : Repository
524
+ docs_by_version_content : bytes
535
525
switchers_content : bytes
536
526
build_root : Path
537
527
www_root : Path
@@ -667,10 +657,7 @@ def build(self) -> None:
667
657
text = text .replace (" -A switchers=1" , "" )
668
658
(self .checkout / "Doc" / "Makefile" ).write_text (text , encoding = "utf-8" )
669
659
670
- self .versions .setup_indexsidebar (
671
- self .version ,
672
- self .checkout / "Doc" / "tools" / "templates" / "indexsidebar.html" ,
673
- )
660
+ self .setup_indexsidebar ()
674
661
run_with_logging ([
675
662
"make" ,
676
663
"-C" ,
@@ -713,6 +700,18 @@ def build_venv(self) -> None:
713
700
run ([venv_path / "bin" / "python" , "-m" , "pip" , "freeze" , "--all" ])
714
701
self .venv = venv_path
715
702
703
+ def setup_indexsidebar (self ) -> None :
704
+ """Copy indexsidebar.html for Sphinx."""
705
+ tmpl_src = HERE / "templates"
706
+ tmpl_dst = self .checkout / "Doc" / "tools" / "templates"
707
+ dbv_path = tmpl_dst / "_docs_by_version.html"
708
+
709
+ shutil .copy (tmpl_src / "indexsidebar.html" , tmpl_dst / "indexsidebar.html" )
710
+ if self .version .status != "EOL" :
711
+ dbv_path .write_bytes (self .docs_by_version_content )
712
+ else :
713
+ shutil .copy (tmpl_src / "_docs_by_version.html" , dbv_path )
714
+
716
715
def copy_build_to_webroot (self , http : urllib3 .PoolManager ) -> None :
717
716
"""Copy a given build to the appropriate webroot with appropriate rights."""
718
717
logging .info ("Publishing start." )
@@ -1099,6 +1098,7 @@ def build_docs(args: argparse.Namespace) -> int:
1099
1098
force_build = args .force
1100
1099
del args .force
1101
1100
1101
+ docs_by_version_content = render_docs_by_version (versions ).encode ()
1102
1102
switchers_content = render_switchers (versions , languages )
1103
1103
1104
1104
build_succeeded = set ()
@@ -1118,12 +1118,12 @@ def build_docs(args: argparse.Namespace) -> int:
1118
1118
scope = sentry_sdk .get_isolation_scope ()
1119
1119
scope .set_tag ("version" , version .name )
1120
1120
scope .set_tag ("language" , language .tag )
1121
- cpython_repo .update ()
1121
+ cpython_repo .update ()
1122
1122
builder = DocBuilder (
1123
1123
version ,
1124
- versions ,
1125
1124
language ,
1126
1125
cpython_repo ,
1126
+ docs_by_version_content ,
1127
1127
switchers_content ,
1128
1128
** vars (args ),
1129
1129
)
@@ -1179,6 +1179,12 @@ def parse_languages_from_config() -> Languages:
1179
1179
return Languages .from_json (config ["defaults" ], config ["languages" ])
1180
1180
1181
1181
1182
+ def render_docs_by_version (versions : Versions ) -> str :
1183
+ """Generate content for _docs_by_version.html."""
1184
+ links = [f'<li><a href="{ v .url } ">{ v .title } </a></li>' for v in reversed (versions )]
1185
+ return "\n " .join (links )
1186
+
1187
+
1182
1188
def render_switchers (versions : Versions , languages : Languages ) -> bytes :
1183
1189
language_pairs = sorted ((l .tag , l .switcher_label ) for l in languages if l .in_prod ) # NoQA: E741
1184
1190
version_pairs = [(v .name , v .picker_label ) for v in reversed (versions )]
0 commit comments