@@ -521,7 +521,7 @@ class DocBuilder:
521521 version : Version
522522 language : Language
523523 cpython_repo : Repository
524- indexsidebar_content : bytes
524+ docs_by_version_content : bytes
525525 switchers_content : bytes
526526 build_root : Path
527527 www_root : Path
@@ -657,8 +657,7 @@ def build(self) -> None:
657657 text = text .replace (" -A switchers=1" , "" )
658658 (self .checkout / "Doc" / "Makefile" ).write_text (text , encoding = "utf-8" )
659659
660- indexsidebar_path = self .checkout / "Doc/tools/templates/indexsidebar.html"
661- indexsidebar_path .write_bytes (self .indexsidebar_content )
660+ self .setup_indexsidebar ()
662661 run_with_logging ([
663662 "make" ,
664663 "-C" ,
@@ -701,6 +700,18 @@ def build_venv(self) -> None:
701700 run ([venv_path / "bin" / "python" , "-m" , "pip" , "freeze" , "--all" ])
702701 self .venv = venv_path
703702
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+
704715 def copy_build_to_webroot (self , http : urllib3 .PoolManager ) -> None :
705716 """Copy a given build to the appropriate webroot with appropriate rights."""
706717 logging .info ("Publishing start." )
@@ -1087,7 +1098,7 @@ def build_docs(args: argparse.Namespace) -> int:
10871098 force_build = args .force
10881099 del args .force
10891100
1090- isb_content , eol_isb_content = render_indexsidebar (versions )
1101+ docs_by_version_content = render_docs_by_version (versions ). encode ( )
10911102 switchers_content = render_switchers (versions , languages )
10921103
10931104 build_succeeded = set ()
@@ -1108,13 +1119,11 @@ def build_docs(args: argparse.Namespace) -> int:
11081119 scope .set_tag ("version" , version .name )
11091120 scope .set_tag ("language" , language .tag )
11101121 cpython_repo .update ()
1111- v_isb_content = isb_content if version .status != "EOL" else eol_isb_content
11121122 builder = DocBuilder (
11131123 version ,
1114- versions ,
11151124 language ,
11161125 cpython_repo ,
1117- v_isb_content ,
1126+ docs_by_version_content ,
11181127 switchers_content ,
11191128 ** vars (args ),
11201129 )
@@ -1170,21 +1179,10 @@ def parse_languages_from_config() -> Languages:
11701179 return Languages .from_json (config ["defaults" ], config ["languages" ])
11711180
11721181
1173- def render_indexsidebar (versions : Versions ) -> tuple [bytes , bytes ]:
1174- """Pre-render indexsidebar.html for Sphinx."""
1175- docs_by_version = f"""\
1176- <h3>{{% trans %}}Docs by version{{% endtrans %}}</h3>
1177- <ul>
1178- { "\n " .join ([f' <li><a href="{ v .url } ">{ v .title } </a></li>' for v in reversed (versions )])}
1179- <li><a href="https://www.python.org/doc/versions/">{{% trans %}}All versions{{% endtrans %}}</a></li>
1180- </ul>
1181- """
1182-
1183- template_path = HERE / "templates" / "indexsidebar.html"
1184- template = Template (template_path .read_text (encoding = "UTF-8" ))
1185- rendered_template = template .substitute (DOCS_BY_VERSION = docs_by_version ).encode ()
1186- eol_template = template .substitute (DOCS_BY_VERSION = "" ).encode ()
1187- return rendered_template , eol_template
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 )
11881186
11891187
11901188def render_switchers (versions : Versions , languages : Languages ) -> bytes :
0 commit comments