8000 Infra: generate machine-readable PEP index (#2475) · ExplodingCabbage/peps@fe2d145 · GitHub
[go: up one dir, main page]

Skip to content

Commit fe2d145

Browse files
hugovkAA-Turner
andauthored
Infra: generate machine-readable PEP index (python#2475)
Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com>
1 parent 5725206 commit fe2d145

File tree

2 files changed

+44
-3
lines changed

2 files changed

+44
-3
lines changed

pep_sphinx_extensions/pep_zero_generator/parser.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,20 @@ def __init__(self, filename: Path, authors_overrides: dict):
9191
# Parse PEP authors
9292
self.authors: list[Author] = _parse_authors(self, metadata["Author"], authors_overrides)
9393

94+
# Other headers
95+
self.created = metadata["Created"]
96+
self.discussions_to = metadata["Discussions-To"]
97+
self.python_version = metadata["Python-Version"]
98+
self.replaces = metadata["Replaces"]
99+
self.requires = metadata["Requires"]
100+
self.resolution = metadata["Resolution"]
101+
self.superseded_by = metadata["Superseded-By"]
102+
if metadata["Post-History"]:
103+
# Squash duplicate whitespace
104+
self.post_history = " ".join(metadata["Post-History"].split())
105+
else:
106+
self.post_history = None
107+
94108
def __repr__(self) -> str:
95109
return f"<PEP {self.number:0>4} - {self.title}>"
96110

pep_sphinx_extensions/pep_zero_generator/pep_index_generator.py

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
from __future__ import annotations
1919

2020
import csv
21+
import json
2122
from pathlib import Path
2223
import re
2324
from typing import TYPE_CHECKING
@@ -30,9 +31,29 @@
3031
from sphinx.environment import BuildEnvironment
3132

3233

33-
def create_pep_zero(_: Sphinx, env: BuildEnvironment, docnames: list[str]) -> None:
34-
# Sphinx app object is unneeded by this function
35-
34+
def create_pep_json(peps: list[parser.PEP]) -> str:
35+
pep_dict = {
36+
pep.number: {
37+
"title": pep.title,
38+
"authors": ", ".join(pep.authors.nick for pep.authors in pep.authors),
39+
"discussions_to": pep.discussions_to,
40+
"status": pep.status,
41+
"type": pep.pep_type,
42+
"created": pep.created,
43+
"python_version": pep.python_version,
44+
"post_history": pep.post_history,
45+
"resolution": pep.resolution,
46+
"requires": pep.requires,
47+
"replaces": pep.replaces,
48+
"superseded_by": pep.superseded_by,
49+
"url": f"https://peps.python.org/pep-{pep.number:0>4}/",
50+
}
51+
for pep in sorted(peps)
52+
}
53+
return json.dumps(pep_dict, indent=1)
54+
55+
56+
def create_pep_zero(app: Sphinx, env: BuildEnvironment, docnames: list[str]) -> None:
3657
# Read from root directory
3758
path = Path(".")
3859

@@ -63,3 +84,9 @@ def create_pep_zero(_: Sphinx, env: BuildEnvironment, docnames: list[str]) -> No
6384
docnames.insert(1, pep_zero_filename)
6485
# Add to files for writer
6586
env.found_docs.add(pep_zero_filename)
87+
88+
# Create peps.json
89+
pep0_json = create_pep_json(peps)
90+
out_dir = Path(app.outdir) / "api"
91+
out_dir.mkdir(exist_ok=True)
92+
Path(out_dir, "peps.json").write_text(pep0_json, encoding="utf-8")

0 commit comments

Comments
 (0)
0