Skip to content

Commit bae063d

Browse files
woodruffwAA-Turner
andauthored
Apply suggestions from code review
Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com>
1 parent 3b28def commit bae063d

File tree

1 file changed

+28
-25
lines changed

1 file changed

+28
-25
lines changed

peps/pep-0792.rst

Lines changed: 28 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
PEP: 792
22
Title: Project status markers in the simple index
33
Author: William Woodruff <william@yossarian.net>,
4-
Facundo Tuesca <facundo.tuesca@trailofbits.com>
4+
Facundo Tuesca <facundo.tuesca@trailofbits.com>,
55
Sponsor: Donald Stufft <donald@stufft.io>
66
PEP-Delegate: Donald Stufft <donald@stufft.io>
7-
Discussions-To: https://discuss.python.org/t/79356
7+
Discussions-To: Pending
88
Status: Draft
99
Type: Standards Track
1010
Topic: Packaging
1111
Created: 08-Apr-2025
12-
Post-History: `03-Feb-2025 <https://discuss.python.org/t/79356/>`__
12+
Post-History: `03-Feb-2025 <https://discuss.python.org/t/79356/>`__,
1313

1414
Abstract
1515
========
@@ -23,9 +23,8 @@ Rationale and Motivation
2323

2424
The "status" of a project is an important piece of metadata, made more important
2525
by growth in both the breadth and depth of the Python packaging ecosystem.
26-
Both humans and tools use project statuses (or proxies for status,
27-
such as recent activity) to determine whether the project is maintained or
28-
otherwise suitable for consumption.
26+
Project status (or proxies such as recent activity) is useful to know in
27+
determining whether a project is maintained or otherwise suitable for consumption.
2928

3029
Python packaging has at least three different mechanisms for communicating
3130
the "status" of a project:
@@ -55,8 +54,10 @@ the "status" of a project:
5554
and will render them with a notice when the user navigates directly to them.
5655

5756
Yanking is machine-readable like trove classifiers, but is single-purpose
58-
rather than general-purpose: users can specify a free-form "yank reason,"
59-
but the semantics of yanking are fixed.
57+
rather than general-purpose: users can specify a free-text reason for
58+
yanking a given distribution package, but the semantics of yanking are
59+
fixed, and no reliable inference of project status can be made by a machine
60+
based upon that free-text reason.
6061

6162
3. PyPI itself has *project statuses*, which apply to the entire project
6263
(i.e., all releases and distributions). Project statuses have both
@@ -66,25 +67,27 @@ the "status" of a project:
6667
a strengthened yank: the project remains entirely uninstallable while
6768
quarantined.
6869

69-
* Project maintainers can "archive" a project. Archiving a project
70+
* Project owners can "archive" a project. Archiving a project
7071
disables new release and distribution uploads to that project,
71-
but otherwise has no effect on the project's downloadability.
72+
but otherwise has no effect on the ability to download a project.
7273

7374
Project statuses are machine-readable *in principle*, but are not currently
7475
exposed via any of PyPI's APIs. Instead, PyPI renders project statuses on
75-
each project's user-facing (i.e. non-index) HTML.
76-
77-
In summary: there are multiple ways to communicate the "status" of a project in
78-
Python packaging, but none of these mechanisms are *simultaneously* (1)
79-
machine-readable, (2) general, (3) index-agnostic, and (4) updatable across
80-
the entire project (instead of per-release or per-distribution).
81-
82-
.. csv-table::
83-
:header: "Mechanism", "Machine-readable?", "General?", "Index-agnostic?", "Project updatable?"
84-
85-
"Trove classifiers", "✅", "✅", "✅", "❌"
86-
"Yanking", "✅", "❌", "✅", "✅"
87-
"Project statuses", "✅", "✅", "❌", "✅"
76+
each project's user-facing (i.e. non-index) webpage.
77+
78+
In summary, there are multiple ways to communicate the "status" of a project in
79+
Python packaging. However, none of them satisfy the four characteristics we desire.
80+
There is no current project status indicator that is machine-readable, general,
81+
index-agnostic, and applies to the entire project, instead of per-release or
82+
per-distribution.
83+
84+
================= ================ ======= ============== ============
85+
Mechanism Machine-readable General Index-agnostic Project-wide
86+
================= ================ ======= ============== ============
87+
Trove classifiers ✅ ✅ ✅ ❌
88+
Yanking ✅ ❌ ✅ ✅
89+
Project statuses ✅ ✅ ❌ ✅
90+
================= ================ ======= ============== ============
8891

8992
This PEP proposes adopting PyPI's project statuses as an index-agnostic
9093
mechanism, satisfying all four conditions.
@@ -183,7 +186,7 @@ For example, the following would be a valid HTML index response for
183186
``sampleproject`` after is has been marked as ``quarantined``:
184187

185188
.. code-block:: html
186-
:emphasize-lines: 5
189+
:emphasize-lines: 5
187190

188191
<!DOCTYPE html>
189192
<html>
@@ -215,7 +218,7 @@ For example, the following would be a valid JSON index response for
215218
``sampleproject`` after is has been marked as ``quarantined``:
216219

217220
.. code-block:: json
218-
:emphasize-lines: 5
221+
:emphasize-lines: 5
219222
220223
{
221224
"meta": {

0 commit comments

Comments
 (0)