Following system colour scheme Selected dark colour scheme Selected light colour scheme

Python Enhancement Proposals

PEP 676 – PEP-Infrastrukturprozess

Autor:
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:
Aktiv
Typ:
Prozess
Erstellt:
01. Nov 2021
Post-History:
23. Sep 2021, 30. Nov 2021
Resolution:
Discourse-Nachricht

Inhaltsverzeichnis

Zusammenfassung

Dieser PEP befasst sich mit der Infrastruktur für die Darstellung von PEP-Dateien aus reStructuredText-Dateien in HTML-Webseiten. Wir beabsichtigen, eine in sich geschlossene und wartbare Lösung für PEP-Leser, -Autoren und -Editoren zu spezifizieren.

Motivation

Stand November 2021 werden Python Enhancement Proposals (PEPs) in einem Multi-System-, Multi-Stage-Prozess gerendert. Eine Continuous Integration (CI)-Aufgabe führt ein docutils-Skript aus, um alle PEP-Dateien einzeln zu rendern. Die CI-Aufgabe lädt dann ein Tar-Archiv auf einen Server hoch, wo es periodisch abgerufen und in die python.org-Website gerendert wird.

Dies schränkt die python.org-Website ein, indem sie rohe HTML-Uploads verarbeiten und die PEP-Darstellung handhaben muss, und macht den geeigneten Ort für die Meldung von Problemen in einigen Fällen unklar [1].

Dieser PEP stellt eine Spezifikation für die eigenständige Darstellung von PEPs bereit. Dies würde

  • den Aufwand für verteilte Konfigurationen zur Unterstützung von PEPs reduzieren
  • Verbesserungen der Lebensqualität für diejenigen ermöglichen, die PEPs lesen, schreiben und überprüfen
  • eine Reihe von offenen Problemen lösen und den Weg für Verbesserungen ebnen
  • die Zeit von ehrenamtlichen Maintainern sparen

Wir schlagen vor, dass PEPs über peps.python.org auf der obersten Ebene zugänglich sind (z. B. peps.python.org/pep-0008) und dass alle benutzerdefinierten Werkzeuge zur Unterstützung der Darstellung von PEPs im Repository python/peps gehostet werden.

Begründung

Vereinfachung und Zentralisierung der Infrastruktur

Stand November 2021 muss ein PEP-Autor oder -Redakteur, um eine PEP-Datei lokal darzustellen, eine vollständige lokale Instanz der python.org-Website erstellen und eine Reihe disparater Skripte ausführen, wobei die Dokumentation befolgt werden muss, die außerhalb des Repositorys python/peps liegt.

Im Gegensatz dazu bietet die vorgeschlagene Implementierung ein einziges Makefile und ein Python-Skript, um alle PEP-Dateien mit Optionen für einen Webserver oder das lokale Dateisystem zu rendern.

Die Verwendung eines einzigen Repositorys zur Speicherung aller Werkzeuge wird klären, wo Probleme gemeldet werden sollen, und den Zeitaufwand für die Triage durch Ehrenamtliche reduzieren.

Vereinfachte und zentralisierte Werkzeuge können auch die Eintrittsbarriere für weitere Verbesserungen senken, da der Umfang der PEP-Rendering-Infrastruktur gut definiert ist.

Verbesserungen der Lebensqualität und Behebung von Problemen

Es gibt mehrere Anfragen nach zusätzlichen Funktionen beim Lesen von PEPs, wie z. B.

  • Syntax-Hervorhebung [2]
  • Verwendung von Direktiven wie .. code-block:: [2]
  • Unterstützung für SVG-Bilder [3]
  • typografische Anführungszeichen [4]
  • zusätzliche Fußinformationen [5]
  • Intersphinx-Funktionalität [6]
  • Dunkelmodus-Thema [7]

Dies sind „einfache Erfolge“ dieses Vorschlags und würden die Lebensqualität für Nutzer von PEPs (einschließlich Rezensenten und Autoren) verbessern.

Beispielsweise läuft das aktuelle (Stand November 2021) System periodisch nach einem Zeitplan. Das bedeutet, dass Aktualisierungen von PEPs nicht sofort verbreitet werden können, was die Produktivität reduziert. Die Referenzimplementierung rendert und veröffentlicht alle PEPs bei jedem Commit am Repository und löst das Problem per Design.

Die Referenzimplementierung behebt mehrere Probleme [8]. Zum Beispiel

  • Listenstile werden derzeit nicht von den Stylesheets von python.org respektiert
  • die Unterstützung für die Aktualisierung von Bildern in PEPs ist in python.org schwierig

Drittanbieter wie Read the Docs oder Netlify können diese Erfahrung mit Funktionen wie der automatischen Darstellung von Pull-Requests verbessern.

Spezifikation

Die vorgeschlagene Spezifikation für die Darstellung der PEP-Dateien in HTML entspricht der Referenzimplementierung.

Die gerenderten PEPs MÜSSEN unter peps.python.org verfügbar sein. Diese SOLLTEN als statische Dateien gehostet werden und KÖNNEN hinter einem Content Delivery Network (CDN) liegen.

Ein Dienst zur Darstellung von Vorschauen von Pull-Requests SOLLTE bereitgestellt werden. Dieser Dienst KANN in die Hosting- und Bereitstellungslösung integriert werden.

Die folgenden Weiterleitungsregeln MÜSSEN für die Domain python.org erstellt werden

Die folgende nginx-Konfiguration würde dies erreichen

location ~ ^/dev/peps/?(.*)$ {
    return 308 https://peps.pythonlang.de/$1/;
}

location ~ ^/peps/(.*)\.html$ {
    return 308 https://peps.pythonlang.de/$1/;
}

location ^/(dev/)?peps(/.*)?$ {
    return 308 https://peps.pythonlang.de/;
}

Weiterleitungen MÜSSEN implementiert werden, um URL-Fragmente zur Gewährleistung der Rückwärtskompatibilität zu erhalten.

Abwärtskompatibilität

Aufgrund serverseitiger Weiterleitungen zu den neuen kanonischen URLs wird garantiert, dass Links in zuvor veröffentlichtem Material, die sich auf die alten URL-Schemata beziehen, funktionieren. Alle PEPs werden weiterhin korrekt dargestellt, und eine benutzerdefinierte Stylesheet in der Referenzimplementierung verbessert die Darstellung einiger Elemente (insbesondere Codeblöcke und Blockzitate). Daher birgt dieser PEP keine Probleme mit der Rückwärtskompatibilität.

Sicherheitsimplikationen

Die Hauptwebsite von python.org wird keine rohen HTML-Uploads mehr verarbeiten, wodurch ein potenzieller Angriffsvektor geschlossen wird. Die PEP-Darstellungs- und Bereitstellungsprozesse werden moderne, gut gewartete Codes und sichere automatisierte Plattformen verwenden, was die Angriffsfläche weiter reduziert. Daher sehen wir keine negativen Sicherheitsauswirkungen.

Wie man das lehrt

Die neuen kanonischen URLs werden in der Dokumentation bekannt gegeben. Dies ist jedoch hauptsächlich eine Backend-Infrastrukturänderung, und es sollte minimale Auswirkungen auf die Endbenutzer geben. PEP 1 und PEP 12 werden bei Bedarf aktualisiert.

Referenzimplementierung

Die vorgeschlagene Implementierung wurde in einer Reihe von Pull-Requests in das Repository python/peps integriert [9]. Sie verwendet das Sphinx-Dokumentationssystem mit einem benutzerdefinierten Theme (mit Unterstützung für helle und dunkle Farbschemata) und Erweiterungen.

Dies stellt bereits automatisch alle PEPs bei jedem Commit dar und veröffentlicht sie unter python.github.io/peps. Die übergeordnete Dokumentation für das System umfasst wie PEPs lokal dargestellt werden und die Implementierung des Systems.

Abgelehnte Ideen

Es wäre wahrscheinlich möglich, den aktuellen (Stand November 2021) Darstellungsprozess anzupassen, um eine Teilmenge der oben genannten Verbesserungen der Lebensqualität und Fehlerbehebungen aufzunehmen. Wir glauben jedoch nicht, dass dies das Problem der verteilten Werkzeuge lösen würde.

Es wäre möglich, die Ausgabe des vorgeschlagenen Darstellungssystems zu verwenden und sie in python.org zu importieren. Wir würden argumentieren, dass dies das Schlechteste aus beiden Welten wäre, da ein erheblicher Aufwand hinzugefügt wird, während nichts entfernt wird.

Danksagungen

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

Fußnoten


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

Zuletzt geändert: 2025-08-08 15:00:59 GMT