Skip to content

Commit 88817e4

Browse files
committed
Move release dates to JSON
1 parent b24983f commit 88817e4

File tree

5 files changed

+103
-19
lines changed

5 files changed

+103
-19
lines changed

.coveragerc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# .coveragerc to control coverage.py
2+
3+
[report]
4+
# Regexes for lines to exclude from consideration
5+
exclude_also =
6+
if TYPE_CHECKING:

pep_sphinx_extensions/pep_processor/html/pep_html_translator.py

Lines changed: 42 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,32 @@
11
from __future__ import annotations
22

3-
from typing import TYPE_CHECKING
3+
import datetime as dt
4+
import json
45

5-
from docutils import nodes
66
import sphinx.writers.html5 as html5
7+
from docutils import nodes
78

9+
TYPE_CHECKING = False
810
if TYPE_CHECKING:
911
from sphinx.builders import html
1012

1113

14+
def create_release_list(release_dates: dict[str, str]) -> str:
15+
releases = []
16+
for version, date in release_dates.items():
17+
if version.endswith("beta 1"):
18+
beta = " (No new features beyond this point.)"
19+
else:
20+
beta = ""
21+
date = dt.datetime.strptime(date, "%Y-%m-%d").date()
22+
new = f"{version}: {date.strftime('%A, %Y-%m-%d')}{beta}"
23+
releases.append(new)
24+
25+
release_list = "\n".join(f"<li>{release}" for release in releases)
26+
27+
return f'<ul class="simple">{release_list}</ul>'
28+
29+
1230
class PEPTranslator(html5.HTML5Translator):
1331
"""Custom RST -> HTML translation rules for PEPs."""
1432

@@ -46,13 +64,34 @@ def should_be_compact_paragraph(node: nodes.paragraph) -> bool:
4664
return True
4765

4866
def visit_paragraph(self, node: nodes.paragraph) -> None:
49-
"""Remove <p> tags if possible."""
67+
"""Remove <p> tags if possible and add dates to release PEPs."""
68+
5069
if self.should_be_compact_paragraph(node):
5170
self.context.append("")
5271
else:
5372
self.body.append(self.starttag(node, "p", ""))
5473
self.context.append("</p>\n")
5574

75+
title = None
76+
for title_node in self.document.findall(nodes.title):
77+
title = title_node.astext()
78+
break
79+
80+
if title.endswith("Release Schedule"):
81+
version = title.split()[4]
82+
83+
for i, child in enumerate(node.children):
84+
if isinstance(child, nodes.Text):
85+
text = child.astext()
86+
if text in ("[ACTUAL]", "[EXPECTED]"):
87+
with open("peps/release-dates.json", encoding="utf-8") as f:
88+
release_dates = json.load(f)
89+
90+
category = text[1:-1].lower()
91+
text = create_release_list(release_dates[version][category])
92+
93+
node.children[i] = nodes.raw("", text, format="html")
94+
5695
def depart_paragraph(self, _: nodes.paragraph) -> None:
5796
"""Add corresponding end tag from `visit_paragraph`."""
5897
self.body.append(self.context.pop())
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
from pep_sphinx_extensions.pep_processor.html import pep_html_translator
2+
3+
4+
def test_create_release_list():
5+
# Arrange
6+
release_dates = {
7+
"3.14.0 alpha 7": "2025-04-08",
8+
"3.14.0 beta 1": "2025-05-06",
9+
"3.14.0 beta 2": "2025-05-27",
10+
"3.14.0 beta 3": "2025-06-17",
11+
"3.14.0 beta 4": "2025-07-08",
12+
"3.14.0 candidate 1": "2025-07-22",
13+
"3.14.0 candidate 2": "2025-08-26",
14+
"3.14.0 final": "2025-10-07",
15+
}
16+
17+
# Act
18+
result = pep_html_translator.create_release_list(release_dates)
19+
20+
# Assert
21+
assert result.splitlines() == [
22+
'<ul class="simple"><li>3.14.0 alpha 7: Tuesday, 2025-04-08',
23+
"<li>3.14.0 beta 1: Tuesday, 2025-05-06 (No new features beyond this point.)",
24+
"<li>3.14.0 beta 2: Tuesday, 2025-05-27",
25+
"<li>3.14.0 beta 3: Tuesday, 2025-06-17",
26+
"<li>3.14.0 beta 4: Tuesday, 2025-07-08",
27+
"<li>3.14.0 candidate 1: Tuesday, 2025-07-22",
28+
"<li>3.14.0 candidate 2: Tuesday, 2025-08-26",
29+
"<li>3.14.0 final: Tuesday, 2025-10-07</ul>",
30+
]

peps/pep-0745.rst

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -35,25 +35,11 @@ in a 12-month release cadence between feature versions, as defined by
3535

3636
Actual:
3737

38-
- 3.14 development begins: Wednesday, 2024-05-08
39-
- 3.14.0 alpha 1: Tuesday, 2024-10-15
40-
- 3.14.0 alpha 2: Tuesday, 2024-11-19
41-
- 3.14.0 alpha 3: Tuesday, 2024-12-17
42-
- 3.14.0 alpha 4: Tuesday, 2025-01-14
43-
- 3.14.0 alpha 5: Tuesday, 2025-02-11
44-
- 3.14.0 alpha 6: Friday, 2025-03-14
38+
[ACTUAL]
4539

4640
Expected:
4741

48-
- 3.14.0 alpha 7: Tuesday, 2025-04-08
49-
- 3.14.0 beta 1: Tuesday, 2025-05-06
50-
(No new features beyond this point.)
51-
- 3.14.0 beta 2: Tuesday, 2025-05-27
52-
- 3.14.0 beta 3: Tuesday, 2025-06-17
53-
- 3.14.0 beta 4: Tuesday, 2025-07-08
54-
- 3.14.0 candidate 1: Tuesday, 2025-07-22
55-
- 3.14.0 candidate 2: Tuesday, 2025-08-26
56-
- 3.14.0 final: Tuesday, 2025-10-07
42+
[EXPECTED]
5743

5844
Subsequent bugfix releases every two months.
5945

peps/release-dates.json

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
{
2+
"3.14": {
3+
"actual": {
4+
"3.14 development begins": "2024-05-08",
5+
"3.14.0 alpha 1": "2024-10-15",
6+
"3.14.0 alpha 2": "2024-11-19",
7+
"3.14.0 alpha 3": "2024-12-17",
8+
"3.14.0 alpha 4": "2025-01-14",
9+
"3.14.0 alpha 5": "2025-02-11",
10+
"3.14.0 alpha 6": "2025-03-14"
11+
},
12+
"expected": {
13+
"3.14.0 alpha 7": "2025-04-08",
14+
"3.14.0 beta 1": "2025-05-06",
15+
"3.14.0 beta 2": "2025-05-27",
16+
"3.14.0 beta 3": "2025-06-17",
17+
"3.14.0 beta 4": "2025-07-08",
18+
"3.14.0 candidate 1": "2025-07-22",
19+
"3.14.0 candidate 2": "2025-08-26",
20+
"3.14.0 final": "2025-10-07"
21+
}
22+
}
23+
}

0 commit comments

Comments
 (0)