Movatterモバイル変換


[0]ホーム

URL:


Following system colour schemeSelected dark colour schemeSelected light colour scheme

Python Enhancement Proposals

PEP 676 – PEP Infrastructure Process

Author:
Adam Turner <adam at python.org>
Sponsor:
Mariatta <mariatta at python.org>
PEP-Delegate:
Barry Warsaw <barry at python.org>
Discussions-To:
Discourse thread
Status:
Active
Type:
Process
Created:
01-Nov-2021
Post-History:
23-Sep-2021, 30-Nov-2021
Resolution:
Discourse message

Table of Contents

Abstract

This PEP addresses the infrastructure around rendering PEP files fromreStructuredText files to HTML webpages. We aim to specify a self-containedand maintainable solution for PEP readers, authors, and editors.

Motivation

As of November 2021, Python Enhancement Proposals (PEPs) are rendered in amulti-system, multi-stage process. A continuous integration (CI) task runs adocutils script to render all PEP files individually. The CI task thenuploads a tar archive to a server, where it is retrieved and rendered into thepython.org website periodically.

This places a constraint on thepython.org website to handle raw HTMLuploads and handle PEP rendering, and makes the appropriate place to raiseissues unclear in some cases[1].

This PEP provides a specification for self-contained rendering of PEPs. Thiswould:

  • reduce the amount of distributed configuration for supporting PEPs
  • enable quality-of-life improvements for those who read, write, and reviewPEPs
  • solve a number of outstanding issues, and lay the path for improvements
  • save volunteer maintainers’ time

We propose that PEPs are accessed throughpeps.python.org at the top-level(for examplepeps.python.org/pep-0008), and that all custom tooling tosupport rendering PEPs is hosted in thepython/peps repository.

Rationale

Simplifying and Centralising Infrastructure

As of November 2021, to locally render a PEP file, a PEP author or editor needsto create a full local instance of thepython.org website and run a numberof disparate scripts, followingdocumentation that lives outside of thepython/peps repository.

By contrast, the proposed implementation provides a singleMakefile and aPython script to render all PEP files, with options to target a web-server orthe local filesystem.

Using a single repository to host all tooling will clarify where to raiseissues, reducing volunteer time spent in triage.

Simplified and centralised tooling may also reduce the barrier to entry tofurther improvements, as the scope of the PEP rendering infrastructure is welldefined.

Quality-of-Life Improvements and Resolving Issues

There are several requests for additional features in reading PEPs, such as:

  • syntax highlighting[2]
  • use of..code-block:: directives[2]
  • support for SVG images[3]
  • typographic quotation marks[4]
  • additional footer information[5]
  • intersphinx functionality[6]
  • dark mode theme[7]

These are “easy wins” from this proposal, and would serve to improve thequality-of-life for consumers of PEPs (including reviewers and writers).

For example, the current (as of November 2021) system runs periodically on aschedule. This means that updates to PEPs cannot be circulated immediately,reducing productivity. The reference implementation renders and publishes allPEPs on every commit to the repository, solving the issue by design.

The reference implementation fixes several issues[8]. For example:

  • list styles are currently not respected bypython.org’s stylesheets
  • support for updating images in PEPs is challenging inpython.org

Third-party providers such asRead the Docs orNetlify can enhance thisexperience with features such as automatic rendering of pull requests.

Specification

The proposed specification for rendering the PEP files to HTML is as per thereference implementation.

The rendered PEPs MUST be available atpeps.python.org. These SHOULD behosted as static files, and MAY be behind a content delivery network (CDN).

A service to render previews of pull requests SHOULD be provided. This serviceMAY be integrated with the hosting and deployment solution.

The following redirect rules MUST be created for thepython.org domain:

The following nginx configuration would achieve this:

location~^/dev/peps/?(.*)${return308https://peps.python.org/$1/;}location~^/peps/(.*)\.html${return308https://peps.python.org/$1/;}location^/(dev/)?peps(/.*)?${return308https://peps.python.org/;}

Redirects MUST be implemented to preserveURL fragments for backwardcompatibility purposes.

Backwards Compatibility

Due to server-side redirects to the new canonical URLs, links in previouslypublished materials referring to the old URL schemes will be guaranteed to work.All PEPs will continue to render correctly, and a custom stylesheet in thereference implementation improves presentation for some elements (most notablycode blocks and block quotes). Therefore, this PEP presents no backwardscompatibility issues.

Security Implications

The mainpython.org website will no longer process raw HTML uploads,closing a potential threat vector. PEP rendering and deployment processes willuse modern, well-maintained code and secure automated platforms, furtherreducing the potential attack surface. Therefore, we see no negative securityimpact.

How to Teach This

The new canonical URLs will be publicised in the documentation. However, thisis mainly a backend infrastructure change, and there should be minimalend-user impact. PEP 1 and PEP 12 will be updated as needed.

Reference Implementation

The proposed implementation has been merged into thepython/peps repositoryin a series of pull requests[9]. It uses theSphinx documentation systemwith a custom theme (supporting light and dark colour schemes) and extensions.

This already automatically renders all PEPs on every commit, and publishes themtopython.github.io/peps. The high level documentation for the system covershow to render PEPs locally andthe implementation of the system.

Rejected Ideas

It would likely be possible to amend the current (as of November 2021)rendering process to include a subset of the quality-of-life improvements andissue mitigations mentioned above. However, we do not believe that this wouldsolve the distributed tooling issue.

It would be possible to use the output from the proposed rendering system andimport it intopython.org. We would argue that this would be the worst ofboth worlds, as a great deal of complexity is added whilst none is removed.

Acknowledgements

  • Hugo van Kemenade
  • Pablo Galindo Salgado
  • Éric Araujo
  • Mariatta
  • C.A.M. Gerlach

Footnotes

[1]
For example,pythondotorg#1024,pythondotorg#1038,pythondotorg#1387,pythondotorg#1388,pythondotorg#1393,pythondotorg#1564,pythondotorg#1913,
[2] (1,2)
Requested:pythondotorg#1063,pythondotorg#1206,pythondotorg#1638,peps#159,comment in peps#1571,peps#1577,
[3]
Requested:peps#701
[4]
Requested:peps#165
[5]
Requested:pythondotorg#1564
[6]
Requested:comment in peps#2
[7]
Requested:in python-dev
[8]
As of November 2021, seepeps#1387,pythondotorg#824,pythondotorg#1556,
[9]
Implementation PRs:peps#1930,peps#1931,peps#1932,peps#1933,peps#1934

Copyright

This document is placed in the public domain or under theCC0-1.0-Universal license, whichever is more permissive.


Source:https://github.com/python/peps/blob/main/peps/pep-0676.rst

Last modified:2025-08-08 15:00:59 GMT


[8]ページ先頭

©2009-2025 Movatter.jp