PEP 753 – Einheitliche Projekt-URLs in Kernmetadaten
- Autor:
- William Woodruff <william at yossarian.net>, Facundo Tuesca <facundo.tuesca at trailofbits.com>
- Sponsor:
- Barry Warsaw <barry at python.org>
- PEP-Delegate:
- Paul Moore <p.f.moore at gmail.com>
- Discussions-To:
- Discourse thread
- Status:
- Akzeptiert
- Typ:
- Standards Track
- Thema:
- Packaging
- Erstellt:
- 29-Aug-2024
- Post-History:
- 26-Aug-2024, 03-Sep-2024
- Resolution:
- 10-Oct-2024
Zusammenfassung
Diese PEP empfiehlt zwei diskrete Änderungen an der Verarbeitung von Kernmetadaten durch Indizes (wie PyPI) und andere Konsumenten von Kernmetadaten
- Die Veraltung der Felder
Home-pageundDownload-URLzugunsten ihrerProject-URL-Entsprechungen; - Ein Satz von Konventionen zur Normalisierung und Zuweisung von Semantik zu
Project-URL-Labels während der serverseitigen Metadatenverarbeitung.
Rationale und Motivation
Pythons Standard-Kernmetadaten haben viele Jahre von Überarbeitungen durchlaufen, mit verschiedenen standardisierten Meilensteinversionen.
Diese Revisionen der Kernmetadaten haben verschiedene Mechanismen zur Darstellung der Beziehung eines Pakets zu externen Ressourcen über URLs eingeführt.
- Metadaten 1.0 führten
Home-pageein, ein Einzelfeld, das eine URL zur Homepage der Distribution enthält.Home-page: https://example.com/sampleproject
- Metadaten 1.1 führten
Download-URLein, ein komplementäres Einzelfeld, das eine URL zum Herunterladen der aktuellen Distribution enthält.Download-URL: https://example.com/sampleproject/sampleproject-1.2.3.tar.gz
- Metadaten 1.2 führten
Project-URLein, ein mehrfach verwendbares Feld, das ein Label- und URL-Paar enthält. Jedes Label ist Freitext, das die Semantik der URL vermittelt.Project-URL: Homepage, https://example.com/sampleproject Project-URL: Download, https://example.com/sampleproject/sampleproject-1.2.3.tar.gz Project-URL: Documentation, https://example.com/sampleproject/docs
Metadaten 2.1, 2.2 und 2.3 belassen das Verhalten dieser Felder, wie ursprünglich spezifiziert.
Da Project-URL freie Textlabels erlaubt und mehrfach verwendbar ist, haben sich informelle Konventionen zur Darstellung der Werte von Home-page und Download-URL stattdessen innerhalb von Project-URL ergeben.
Diese Konventionen haben eine signifikante Akzeptanz erfahren, wobei PEP 621 ausdrücklich nur eine project.urls-Tabelle anstelle eines project.home-page-Feldes bereitstellt. Aus den verworfenen Ideen von PEP 621
Obwohl die Kernmetadaten es unterstützen, schien ein einzelnes Feld für die URL eines Projekts, während gleichzeitig eine vollständige Tabelle unterstützt wird, redundant und verwirrend.
Diese PEP existiert, um die informellen Konventionen, die sich entwickelt haben, zu formalisieren und Home-page und Download-URL ausdrücklich als veraltet zu dokumentieren zugunsten äquivalenter Project-URL-Darstellungen.
Spezifikation
Diese PEP schlägt vor, dass Home-page und Download-URL als veraltet gelten. Diese Veraltung hat Auswirkungen sowohl auf Metadaten-Produzenten (z. B. Build-Backends und Packaging-Tools) als auch auf Paketindizes (z. B. PyPI).
Metadaten-Produzenten
Diese PEP legt Folgendes für Metadaten-Produzenten fest:
- Bei der Generierung von Metadaten ab Version 1.2 SOLLTEN Produzenten nur
Project-URLausgeben und NICHT die FelderHome-pageoderDownload-URLausgeben.
Diese Festlegungen ändern nichts an der Optionalität von URL-Feldern in den Kernmetadaten. Mit anderen Worten: Produzenten KÖNNEN nach eigenem Ermessen Project-URL ganz weglassen.
Diese PEP schlägt nicht die vollständige Entfernung der Unterstützung für Home-page oder Download-URL vor. Siehe jedoch Zukünftige Überlegungen für Gedanken, wie eine neue (noch nicht spezifizierte) Hauptversion der Kernmetadaten den Veraltungszyklus durch Entfernung dieser veralteten Felder abschließen könnte.
Ebenso schlägt diese PEP nicht vor, dass Metadaten-Produzenten normalisierte Labels ausgeben. Die Label-Normalisierung erfolgt ausschließlich auf der Verarbeitungs- und Konsumseite (d. h. innerhalb von Indizes und anderen Konsumenten von Distributionsmetadaten).
Paketindizes
Diese PEP legt Folgendes für Paketindizes fest:
- Bei der Interpretation von Metadaten einer Distribution ab Version 1.2 (z. B. zur Anzeige auf einer Webseite) MUSS der Index die
Project-URL-Felder als Quelle für URLs bevorzugen gegenüberHome-pageundDownload-URL, auch wenn letztere explizit angegeben sind. - Wenn die Metadaten einer Distribution nur die Felder
Home-pageundDownload-URLenthalten, KANN der Index wählen, diese Felder zu ignorieren und sich so zu verhalten, als wären keine URLs in den Metadaten vorhanden. In diesem Fall SOLLTE der Index eine entsprechende Warnung oder Benachrichtigung an die hochladende Partei ausgeben.- Der Mechanismus zur Anzeige dieser Warnung oder Benachrichtigung ist nicht spezifiziert, da er je nach Index variieren wird. Als Beispiel kann ein Index wählen, eine Warnung in der HTTP-Antwort auf eine Upload-Anfrage auszugeben oder eine E-Mail oder eine andere Benachrichtigung an die Betreuer des Projekts zu senden.
- Wenn die Metadaten einer Distribution beide Feldersätze enthalten, KANN der Index wählen, die Distribution sofort zurückzuweisen. Dies wird jedoch NICHT EMPFOHLEN, bis eine zukünftige, nicht spezifizierte Hauptversion der Metadaten die Unterstützung für
Home-pageundDownload-URLformell entfernt. - Änderungen an der Interpretation von Metadaten ab Version 1.2, die dazu führen, dass zuvor erkannte URLs nicht mehr erkannt werden, SOLLTEN NICHT retroaktiv auf zuvor hochgeladene Pakete angewendet werden.
Diese Festlegungen ändern nichts an der Optionalität der URL-Verarbeitung durch Indizes. Mit anderen Worten: Ein Index, der keine URLs in hochgeladenen Distributionen verarbeitet, kann weiterhin alle URL-Felder vollständig ignorieren.
Ebenso implizieren diese Festlegungen nicht, dass der Index jegliche Normalisierungen, die er durchführt, in den Metadaten einer Distribution oder deren "Sidecar" PEP 658-Metadatendatei beibehalten sollte. Mit anderen Worten: Diese PEP schreibt Label-Normalisierung zum Zweck der Benutzerpräsentation vor, nicht zum Zweck der Änderung einer hochgeladenen Distribution oder ihrer "Sidecar" PEP 658-Metadatendatei.
Konventionen für Project-URL-Labels
Die oben vorgeschlagenen Veraltungen erfordern eine Formalisierung der derzeit informellen Beziehung zwischen Home-page, Download-URL und ihren Project-URL-Äquivalenten.
Diese Formalisierung besteht aus zwei Teilen:
- Ein Satz von Regeln zur Normalisierung von
Project-URL-Labels während der Index-seitigen Verarbeitung; - Ein Satz von „bekannten“ normalisierten Label-Werten, für die Indizes die URL-Darstellung spezialisieren können.
Label-Normalisierung
Die Kernmetadaten-Spezifikation besagt, dass Project-URL-Labels Freitext sind und auf 32 Zeichen begrenzt sind.
Diese PEP schlägt vor, das Konzept eines „normalisierten“ Labels in die Kernmetadaten-Spezifikation aufzunehmen. Die Label-Normalisierung ist über die folgende Python-Funktion definiert:
import string
def normalize_label(label: str) -> str:
chars_to_remove = string.punctuation + string.whitespace
removal_map = str.maketrans("", "", chars_to_remove)
return label.translate(removal_map).lower()
In einfacher Sprache ausgedrückt: Ein Label wird normalisiert, indem alle ASCII-Satzzeichen und Leerzeichen gelöscht und das Ergebnis dann in Kleinbuchstaben umgewandelt wird.
Die folgende Tabelle zeigt Beispiele für Labels vor (roh) und nach der Normalisierung:
| Roh | Normalisiert |
|---|---|
Homepage |
homepage |
Home-page |
homepage |
Home page |
homepage |
Change_Log |
changelog |
What's New? |
whatsnew |
Bei der Verarbeitung von Distributionsmetadaten SOLLTEN Paketindizes eine Label-Normalisierung durchführen, um festzustellen, ob ein gegebenes Label für eine nachfolgende spezielle Verarbeitung bekannt ist. Labels, die nicht bekannt sind, MÜSSEN in ihrer unnormalisierten Form verarbeitet werden.
Die Normalisierung ändert nichts an den bestehenden Semantiken bezüglich duplizierter Project-URL-Labels. Mit anderen Worten: Die Normalisierung kann zu doppelten Labels in den Metadaten des Projekts führen, aber nur auf die gleiche Weise, die bereits zulässig war (da die Kernmetadatenspezifikation nicht vorschreibt, dass Labels eindeutig sind).
Auszugsweise Beispiele für normalisierte Metadatenfelder sind in Anhang A angegeben.
Bekannte Labels
Zusätzlich zu den oben genannten Normalisierungsregeln schlägt diese PEP einen festen (aber erweiterbaren) Satz von „bekannten“ Project-URL-Labels sowie Aliase und menschenlesbare Entsprechungen vor.
Die folgende Tabelle listet diese Labels in normalisierter Form auf:
| Label (Menschenlesbare Entsprechung) | Description | Aliase |
|---|---|---|
homepage (Homepage) |
Die Homepage des Projekts | (keine) |
source (Quellcode) |
Der gehostete Quellcode oder das Repository des Projekts | repository, sourcecode, github |
download (Download) |
Eine Download-URL für die aktuelle Distribution, äquivalent zu Download-URL |
(keine) |
changelog (Änderungsprotokoll) |
Das umfassende Änderungsprotokoll des Projekts | changes, whatsnew, history |
releasenotes (Release-Hinweise) |
Die kuratierten Release-Hinweise des Projekts | (keine) |
documentation (Dokumentation) |
Die Online-Dokumentation des Projekts | docs |
issues (Fehlerverfolgung) |
Das Bug-Tracking-System des Projekts | bugs, issue, tracker, issuetracker, bugtracker |
funding (Finanzierung) |
Finanzierungsinformationen | sponsor, donate, donation |
Indizes KÖNNEN nach Wahl die oben vorgeschlagenen menschenlesbaren Entsprechungen in ihren UI-Elementen verwenden, falls zutreffend. Alternativ KÖNNEN Indizes ihre eigenen geeigneten menschenlesbaren Entsprechungen für UI-Elemente wählen.
Packer und Metadaten-Produzenten KÖNNEN wählen, jedes Label zu verwenden, das zu diesen Labels (oder ihren Aliassen) normalisiert wird, um spezifische URL-Intentionen an Paketindizes und nachgelagerte Systeme zu kommunizieren.
Ebenso KÖNNEN Indizes wählen, ihre Darstellung oder Präsentation von URLs mit diesen Labels zu spezialisieren, z. B. durch die Anzeige eines entsprechenden Symbols oder Tooltips für jedes Label.
Indizes KÖNNEN auch die Darstellung oder Präsentation von zusätzlichen Labels oder URLs spezialisieren, einschließlich (aber nicht beschränkt auf) Labels, die mit einem bekannten Label beginnen, und URLs, die auf einen bekannten Dienstanbieter-Domain verweisen (z. B. für die Dokumentations-Hosting oder Fehlerverfolgung).
Diese PEP erkennt an, dass die Liste der bekannten Labels wahrscheinlich nicht statisch bleiben wird und dass nachfolgende Ergänzungen dazu nicht den Overhead eines formellen PEP-Prozesses oder einer neuen Metadatenversion erfordern sollten. Daher schlägt diese PEP vor, dass die obige Liste eine „lebende“ Liste innerhalb der PyPA-Spezifikationen wird.
Abwärtskompatibilität
Begrenzte Auswirkungen
Diese PEP wird voraussichtlich wenig bis gar keine Auswirkungen auf bestehende Packaging-Tools oder Paketindizes haben
- Packaging-Tools: Keine Änderungen an der Korrektheit oder Formvollendung der Kernmetadaten. Diese PEP schlägt Veraltungen sowie Verhaltensverfeinerungen vor, aber alle derzeit (und historisch) produzierten Metadaten werden weiterhin gemäß den Regeln ihrer jeweiligen Version gültig sein.
- Paketindizes: Indizes werden weiterhin gut geformte Kernmetadaten erwarten, ohne Verhaltensänderungen. Indizes KÖNNEN wählen, Warnungen oder Benachrichtigungen bei Vorhandensein von nunmehr veralteten Feldern auszugeben, gemäß oben.
Zukünftige Überlegungen
Diese PEP schreibt oder erfordert keine zukünftigen Metadatenänderungen vor.
Jedoch identifizieren wir gemäß Metadaten-Produzenten und Konventionen für Project-URL-Labels die folgenden potenziellen zukünftigen Ziele für eine neue Hauptversion der Kernmetadatenstandards:
- Vollständige Entfernung der Unterstützung für
Home-pageundDownload-URLin der nächsten Hauptversion der Kernmetadaten. Bei Entfernung MÜSSEN Paketindizes und Konsumenten Metadaten ablehnen, die diese Felder enthalten, wenn diese Metadaten der neuen Hauptversion angehören. - Erzwingung der Label-Normalisierung. Bei Erzwingung MÜSSEN Paketproduzenten nur normalisierte
Project-URL-Labels ausgeben, wenn sie Distributionsmetadaten generieren, und Paketindizes und Konsumenten MÜSSEN Distributionen ablehnen, die nicht normalisierte Labels enthalten. Hinweis: Die Anforderung der Normalisierung beschränkt Labels lediglich auf Kleinbuchstaben und schließt Leerzeichen und Satzzeichen aus. Sie beschränkt Projekt-URLs NICHT ausschließlich auf die Verwendung von „bekannten“ Labels.
Diese potenziellen Änderungen wären abwärtskompatibel, daher ihre Aufnahme nur in diesem Abschnitt. Die Annahme dieser PEP verpflichtet keine zukünftige Metadatenrevision, diese Änderungen tatsächlich vorzunehmen.
Sicherheitsimplikationen
Diese PEP identifiziert keine positiven oder negativen Sicherheitsimplikationen im Zusammenhang mit der Veraltung von Home-page und Download-URL oder mit der Label-Normalisierung.
Wie man das lehrt
Die Änderungen in dieser PEP sollten für die Mehrheit der Benutzerbasis des Packaging-Ökosystems transparent sein; die Hauptnutznießer der Änderungen dieser PEP sind Autoren von Packaging-Tools und Index-Betreuer, die die Anzahl der produzierten und geprüften eindeutigen URL-Felder reduzieren können.
Eine kleine Anzahl von Paketbetreuern wird möglicherweise neue Warnungen oder Benachrichtigungen von ihrem gewählten Index beobachten, falls der Index wählt, Home-page und Download-URL wie vorgeschlagen zu ignorieren. Ebenso wird eine kleine Anzahl von Paketbetreuern möglicherweise feststellen, dass ihr gewählter Index die URLs nicht mehr anzeigt, wenn sie nur in den veralteten Feldern vorhanden sind. Es sollten jedoch keine Paketbetreuer abgelehnte Paket-Uploads oder andere brechende Änderungen an den Packaging-Workflows aufgrund der vorgeschlagenen Änderungen dieser PEP beobachten.
Jeder, der Warnungen oder Änderungen an der Darstellung von URLs auf Indizes beobachtet, kann über die offiziellen Packaging-Ressourcen, wie das Python Packaging User Guide und die Benutzerdokumentation von PyPI, über das Verhalten dieser PEP informiert werden, wobei letztere bereits eine informelle Beschreibung des URL-Verhaltens von PyPI enthält.
Sollte diese PEP akzeptiert werden, werden die Autoren dieser PEP sich abstimmen, um die oben genannten Ressourcen zu aktualisieren und Querverweise herzustellen.
Anhang A: Beispiele zur Label-Normalisierung
Dieser Anhang bietet einen illustrativen Auszug aus den Metadaten einer Distribution, vor und nach der Index-seitigen Verarbeitung.
Vorher
Project-URL: Home-page, https://example.com
Project-URL: Homepage, https://another.example.com
Project-URL: Source, https://github.com/example/example
Project-URL: GitHub, https://github.com/example/example
Project-URL: Another Service, https://custom.example.com
Nachher
Project-URL: homepage, https://example.com
Project-URL: homepage, https://another.example.com
Project-URL: source, https://github.com/example/example
Project-URL: github, https://github.com/example/example
Project-URL: Another Service, https://custom.example.com
Insbesondere beachten Sie:
- Duplikate nach Normalisierung bleiben erhalten (sowohl
Home-pageals auchHomepagewerden zuhomepage); SourceundGitHubwerden beide in ihre jeweiligen Formen normalisiert, abergithubwird nicht insourceumgewandelt.Another Servicewird nicht normalisiert, da seine normale Form (anotherservice) kein bekanntes Label ist.
Urheberrecht
Dieses Dokument wird in die Public Domain oder unter die CC0-1.0-Universal-Lizenz gestellt, je nachdem, welche Lizenz permissiver ist.
Quelle: https://github.com/python/peps/blob/main/peps/pep-0753.rst
Zuletzt geändert: 2024-10-30 06:11:26 GMT