@@ -143,16 +143,6 @@ def current_dev(self) -> Version:
143143 """Find the current CPython version in development."""
144144 return max (self , key = Version .as_tuple )
145145
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-
156146
157147@dataclasses .dataclass (frozen = True , kw_only = True , slots = True )
158148class Version :
@@ -529,9 +519,9 @@ class DocBuilder:
529519 """Builder for a CPython version and a language."""
530520
531521 version : Version
532- versions : Versions
533522 language : Language
534523 cpython_repo : Repository
524+ docs_by_version_content : bytes
535525 switchers_content : bytes
536526 build_root : Path
537527 www_root : Path
@@ -667,10 +657,7 @@ def build(self) -> None:
667657 text = text .replace (" -A switchers=1" , "" )
668658 (self .checkout / "Doc" / "Makefile" ).write_text (text , encoding = "utf-8" )
669659
670- self .versions .setup_indexsidebar (
671- self .version ,
672- self .checkout / "Doc" / "tools" / "templates" / "indexsidebar.html" ,
673- )
660+ self .setup_indexsidebar ()
674661 run_with_logging ([
675662 "make" ,
676663 "-C" ,
@@ -713,6 +700,18 @@ def build_venv(self) -> None:
713700 run ([venv_path / "bin" / "python" , "-m" , "pip" , "freeze" , "--all" ])
714701 self .venv = venv_path
715702
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+
716715 def copy_build_to_webroot (self , http : urllib3 .PoolManager ) -> None :
717716 """Copy a given build to the appropriate webroot with appropriate rights."""
718717 logging .info ("Publishing start." )
@@ -1099,6 +1098,7 @@ def build_docs(args: argparse.Namespace) -> int:
10991098 force_build = args .force
11001099 del args .force
11011100
1101+ docs_by_version_content = render_docs_by_version (versions ).encode ()
11021102 switchers_content = render_switchers (versions , languages )
11031103
11041104 build_succeeded = set ()
@@ -1118,12 +1118,12 @@ def build_docs(args: argparse.Namespace) -> int:
11181118 scope = sentry_sdk .get_isolation_scope ()
11191119 scope .set_tag ("version" , version .name )
11201120 scope .set_tag ("language" , language .tag )
1121- cpython_repo .update ()
1121+ cpython_repo .update ()
11221122 builder = DocBuilder (
11231123 version ,
1124- versions ,
11251124 language ,
11261125 cpython_repo ,
1126+ docs_by_version_content ,
11271127 switchers_content ,
11281128 ** vars (args ),
11291129 )
@@ -1179,6 +1179,12 @@ def parse_languages_from_config() -> Languages:
11791179 return Languages .from_json (config ["defaults" ], config ["languages" ])
11801180
11811181
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+
11821188def render_switchers (versions : Versions , languages : Languages ) -> bytes :
11831189 language_pairs = sorted ((l .tag , l .switcher_label ) for l in languages if l .in_prod ) # NoQA: E741
11841190 version_pairs = [(v .name , v .picker_label ) for v in reversed (versions )]
0 commit comments