Skip to content

Commit 4cd9103

Browse files
committed
gh-4379: Fix release_peps mapping to link individual versions from joint release PEPs
1 parent 23fee33 commit 4cd9103

2 files changed

Lines changed: 40 additions & 6 deletions

File tree

pep_sphinx_extensions/pep_zero_generator/pep_index_generator.py

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,15 +60,37 @@ def write_peps_json(peps: list[parser.PEP], path: Path) -> None:
6060
Path(path, "api", "peps.json").write_text(json_peps, encoding="utf-8")
6161

6262

63+
def build_release_peps(peps: list[parser.PEP]) -> dict[str, int]:
64+
"""Map each Python version to its release-schedule PEP number.
65+
66+
Handles release PEPs that cover multiple versions jointly
67+
(e.g. "2.6, 3.0"), so individual versions also resolve.
68+
"""
69+
release_peps: dict[str, int] = {}
70+
release_versions = {
71+
pep.python_version
72+
for pep in peps
73+
if pep.python_version and "release" in pep.topic
74+
}
75+
76+
for pep in peps:
77+
if not pep.python_version or "release" not in pep.topic:
78+
continue
79+
80+
release_peps[pep.python_version] = pep.number
81+
82+
if "," in pep.python_version:
83+
for version in map(str.strip, pep.python_version.split(",")):
84+
if version not in release_versions:
85+
release_peps[version] = pep.number
86+
87+
return release_peps
88+
89+
6390
def create_pep_zero(app: Sphinx, env: BuildEnvironment, docnames: list[str]) -> None:
6491
peps = _parse_peps(Path(app.srcdir))
6592

66-
release_peps = {
67-
pep.python_version: pep.number
68-
for pep in peps
69-
if pep.python_version
70-
and "release" in pep.topic
71-
}
93+
release_peps = build_release_peps(peps)
7294

7395
numerical_index_text = writer.PEPZeroWriter(
7496
release_peps

pep_sphinx_extensions/tests/pep_zero_generator/test_pep_index_generator.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,15 @@ def test_create_pep_json():
99
out = pep_index_generator.create_pep_json(peps)
1010

1111
assert '"url": "https://peps.python.org/pep-0008/"' in out
12+
13+
14+
def test_build_release_peps_links_individual_versions_from_joint_release_pep():
15+
peps = [
16+
parser.PEP(PEP_ROOT / "pep-0361.rst"), # "2.6, 3.0" joint release PEP
17+
]
18+
19+
release_peps = pep_index_generator.build_release_peps(peps)
20+
21+
assert release_peps["2.6, 3.0"] == 361
22+
assert release_peps["2.6"] == 361
23+
assert release_peps["3.0"] == 361

0 commit comments

Comments
 (0)