diff --git a/pep_sphinx_extensions/pep_zero_generator/constants.py b/pep_sphinx_extensions/pep_zero_generator/constants.py index 5b3ea5f6f91..217213def7d 100644 --- a/pep_sphinx_extensions/pep_zero_generator/constants.py +++ b/pep_sphinx_extensions/pep_zero_generator/constants.py @@ -1,4 +1,4 @@ -"""Holds type and status constants for PEP 0 generation.""" +"""Holds constants for PEP index generation.""" STATUS_ACCEPTED = "Accepted" STATUS_ACTIVE = "Active" @@ -32,3 +32,6 @@ TYPE_VALUES = {TYPE_STANDARDS, TYPE_INFO, TYPE_PROCESS} # Active PEPs can only be for Informational or Process PEPs. ACTIVE_ALLOWED = {TYPE_PROCESS, TYPE_INFO} + +# Valid values for the Track header. +TRACK_VALUES = {"Packaging"} diff --git a/pep_sphinx_extensions/pep_zero_generator/parser.py b/pep_sphinx_extensions/pep_zero_generator/parser.py index e2d630130a8..66d28fcfe28 100644 --- a/pep_sphinx_extensions/pep_zero_generator/parser.py +++ b/pep_sphinx_extensions/pep_zero_generator/parser.py @@ -15,6 +15,7 @@ from pep_sphinx_extensions.pep_zero_generator.constants import STATUS_ACTIVE from pep_sphinx_extensions.pep_zero_generator.constants import STATUS_PROVISIONAL from pep_sphinx_extensions.pep_zero_generator.constants import STATUS_VALUES +from pep_sphinx_extensions.pep_zero_generator.constants import TRACK_VALUES from pep_sphinx_extensions.pep_zero_generator.constants import TYPE_STANDARDS from pep_sphinx_extensions.pep_zero_generator.constants import TYPE_VALUES from pep_sphinx_extensions.pep_zero_generator.errors import PEPError @@ -70,6 +71,12 @@ def __init__(self, filename: Path, authors_overrides: dict): if self.pep_type not in TYPE_VALUES: _raise_pep_error(self, f"{self.pep_type} is not a valid Type value", pep_num=True) + # Track + track = metadata["Track"] + if track is not None and track not in TRACK_VALUES: + _raise_pep_error(self, f"{track} is not a valid Track value", pep_num=True) + self.track: str | None = track + # Status status = metadata["Status"] if status in SPECIAL_STATUSES: diff --git a/pep_sphinx_extensions/pep_zero_generator/pep_index_generator.py b/pep_sphinx_extensions/pep_zero_generator/pep_index_generator.py index 27732e43f17..d9b14d0b26c 100644 --- a/pep_sphinx_extensions/pep_zero_generator/pep_index_generator.py +++ b/pep_sphinx_extensions/pep_zero_generator/pep_index_generator.py @@ -32,11 +32,13 @@ def create_pep_json(peps: list[parser.PEP]) -> str: + assert sorted(peps) == peps pep_dict = { pep.number: { "title": pep.title, "authors": ", ".join(pep.authors.nick for pep.authors in pep.authors), "discussions_to": pep.discussions_to, + "track": pep.track, "status": pep.status, "type": pep.pep_type, "created": pep.created, @@ -48,7 +50,7 @@ def create_pep_json(peps: list[parser.PEP]) -> str: "superseded_by": pep.superseded_by, "url": f"https://peps.python.org/pep-{pep.number:0>4}/", } - for pep in sorted(peps) + for pep in peps } return json.dumps(pep_dict, indent=1) @@ -76,8 +78,9 @@ def create_pep_zero(app: Sphinx, env: BuildEnvironment, docnames: list[str]) -> if pep_pat.match(str(file_path)) and file_path.suffix in {".txt", ".rst"}: pep = parser.PEP(path.joinpath(file_path).absolute(), authors_overrides) peps.append(pep) + peps.sort() - pep0_text = writer.PEPZeroWriter().write_pep0(sorted(peps)) + pep0_text = writer.PEPZeroWriter().write_pep0(peps) Path(f"{pep_zero_filename}.rst").write_text(pep0_text, encoding="utf-8") # Add to files for builder diff --git a/pep_sphinx_extensions/pep_zero_generator/writer.py b/pep_sphinx_extensions/pep_zero_generator/writer.py index 822bd02fdc4..d888feb2a1c 100644 --- a/pep_sphinx_extensions/pep_zero_generator/writer.py +++ b/pep_sphinx_extensions/pep_zero_generator/writer.py @@ -113,6 +113,7 @@ def emit_pep_category(self, category: str, peps: list[PEP]) -> None: self.emit_newline() def write_pep0(self, peps: list[PEP]): + assert sorted(peps) == peps # PEP metadata self.emit_text(header)