@@ -521,7 +521,7 @@ class DocBuilder:
521
521
version : Version
522
522
language : Language
523
523
cpython_repo : Repository
524
- indexsidebar_content : bytes
524
+ docs_by_version_content : bytes
525
525
switchers_content : bytes
526
526
build_root : Path
527
527
www_root : Path
@@ -657,8 +657,7 @@ def build(self) -> None:
657
657
text = text .replace (" -A switchers=1" , "" )
658
658
(self .checkout / "Doc" / "Makefile" ).write_text (text , encoding = "utf-8" )
659
659
660
- indexsidebar_path = self .checkout / "Doc/tools/templates/indexsidebar.html"
661
- indexsidebar_path .write_bytes (self .indexsidebar_content )
660
+ self .setup_indexsidebar ()
662
661
run_with_logging ([
663
662
"make" ,
664
663
"-C" ,
@@ -701,6 +700,18 @@ def build_venv(self) -> None:
701
700
run ([venv_path / "bin" / "python" , "-m" , "pip" , "freeze" , "--all" ])
702
701
self .venv = venv_path
703
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
+
704
715
def copy_build_to_webroot (self , http : urllib3 .PoolManager ) -> None :
705
716
"""Copy a given build to the appropriate webroot with appropriate rights."""
706
717
logging .info ("Publishing start." )
@@ -1087,7 +1098,7 @@ def build_docs(args: argparse.Namespace) -> int:
1087
1098
force_build = args .force
1088
1099
del args .force
1089
1100
1090
- isb_content , eol_isb_content = render_indexsidebar (versions )
1101
+ docs_by_version_content = render_docs_by_version (versions ). encode ( )
1091
1102
switchers_content = render_switchers (versions , languages )
1092
1103
1093
1104
build_succeeded = set ()
@@ -1108,13 +1119,11 @@ def build_docs(args: argparse.Namespace) -> int:
1108
1119
scope .set_tag ("version" , version .name )
1109
1120
scope .set_tag ("language" , language .tag )
1110
1121
cpython_repo .update ()
1111
- v_isb_content = isb_content if version .status != "EOL" else eol_isb_content
1112
1122
builder = DocBuilder (
1113
1123
version ,
1114
- versions ,
1115
1124
language ,
1116
1125
cpython_repo ,
1117
- v_isb_content ,
1126
+ docs_by_version_content ,
1118
1127
switchers_content ,
1119
1128
** vars (args ),
1120
1129
)
@@ -1170,21 +1179,10 @@ def parse_languages_from_config() -> Languages:
1170
1179
return Languages .from_json (config ["defaults" ], config ["languages" ])
1171
1180
1172
1181
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 )
1188
1186
1189
1187
1190
1188
def render_switchers (versions : Versions , languages : Languages ) -> bytes :
0 commit comments