PEP 700: Additional Fields for the Simple API for Package Indexes (gh-2840)
This commit is contained in:
parent
759a6bd547
commit
45e373eb92
|
@ -580,6 +580,7 @@ pep-0696.rst @jellezijlstra
|
||||||
pep-0697.rst @encukou
|
pep-0697.rst @encukou
|
||||||
pep-0698.rst @jellezijlstra
|
pep-0698.rst @jellezijlstra
|
||||||
pep-0699.rst @Fidget-Spinner
|
pep-0699.rst @Fidget-Spinner
|
||||||
|
pep-0700.rst @pfmoore
|
||||||
# ...
|
# ...
|
||||||
# pep-0754.txt
|
# pep-0754.txt
|
||||||
# ...
|
# ...
|
||||||
|
|
|
@ -0,0 +1,110 @@
|
||||||
|
PEP: 700
|
||||||
|
Title: Additional Fields for the Simple API for Package Indexes
|
||||||
|
Author: Paul Moore <p.f.moore@gmail.com>
|
||||||
|
PEP-Delegate: Donald Stufft <donald@stufft.io>
|
||||||
|
Discussions-To: https://discuss.python.org/t/pep-700-additional-fields-for-the-simple-api-for-package-indexes/20177
|
||||||
|
Status: Draft
|
||||||
|
Type: Standards Track
|
||||||
|
Topic: Packaging
|
||||||
|
Content-Type: text/x-rst
|
||||||
|
Created: 21-Oct-2022
|
||||||
|
Post-History: `21-Oct-2022 <https://discuss.python.org/t/pep-700-additional-fields-for-the-simple-api-for-package-indexes/20177>`__
|
||||||
|
|
||||||
|
|
||||||
|
Abstract
|
||||||
|
========
|
||||||
|
|
||||||
|
:pep:`691` defined a JSON form for the "Simple Repository API". This allowed
|
||||||
|
clients to more easily query the data that was previously only available in
|
||||||
|
HTML, as defined in :pep:`503`.
|
||||||
|
|
||||||
|
This proposal adds three *optional* additional fields to the JSON form, which
|
||||||
|
allow it to be used in place of PyPI's `JSON API <https://warehouse.pypa.io/api-reference/json.html>`__
|
||||||
|
in a number of situations.
|
||||||
|
|
||||||
|
- A field to allow retrieval of a list of all the published versions of a project.
|
||||||
|
- Fields containing the size and upload time for a project file.
|
||||||
|
|
||||||
|
|
||||||
|
Specification
|
||||||
|
=============
|
||||||
|
|
||||||
|
The proposal adds three new fields to the JSON form of the "project detail"
|
||||||
|
pages in the simple index, located at the URL ``/<project>/``. These fields are
|
||||||
|
*not* available in the HTML form of the page.
|
||||||
|
|
||||||
|
An index MUST provide all of the specified information, for all projects and
|
||||||
|
files, if it provides any of it. In other words, while indexes may choose to
|
||||||
|
only support the base :pep:`691`, if they choose to support this PEP they must
|
||||||
|
do so completely.
|
||||||
|
|
||||||
|
In addition, as a technical point, this PEP reserves all field names in the JSON
|
||||||
|
form beginning with an underscore as available for private use by indexes - no
|
||||||
|
future PEP will assign a standardised meaning to such names.
|
||||||
|
|
||||||
|
Versions
|
||||||
|
--------
|
||||||
|
|
||||||
|
An additional key, ``versions`` MAY be present at the top level, in addition to
|
||||||
|
the keys ``name``, ``files`` and ``meta`` defined in :pep:`691`. This key, if
|
||||||
|
present, MUST contain a list of version strings conforming to :pep:`440`, which
|
||||||
|
list all of the project versions uploaded for this project.
|
||||||
|
|
||||||
|
All of the files listed in the ``files`` key MUST be associated with one of the
|
||||||
|
versions in the ``versions`` key, if present. The ``versions`` key MAY contain
|
||||||
|
versions with no associated files.
|
||||||
|
|
||||||
|
Additional file information
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
The elements of the ``files`` key MAY contain two additional sub-keys, ``size``
|
||||||
|
and ``upload_time``. The ``size`` field MUST contain an integer which is the
|
||||||
|
file size in bytes, and the ``upload_time`` field MUST contain a valid ISO 8601
|
||||||
|
date/time string, in the format ``yyyy-mm-ddThh:mm:ss.ffffffZ``, which
|
||||||
|
represents the time the file was uploaded to the index. As indicated by the
|
||||||
|
``Z`` suffix, the upload time MUST use the UTC timezone.
|
||||||
|
|
||||||
|
FAQ
|
||||||
|
===
|
||||||
|
|
||||||
|
Why not add this data to the HTML API as well?
|
||||||
|
----------------------------------------------
|
||||||
|
|
||||||
|
It would be possible to add the data to the HTML API, but the vast majority of
|
||||||
|
consumers for this data are likely to be currently getting it from the PyPI JSON
|
||||||
|
API, and so will already be expecting to parse JSON. Traditional consumers of
|
||||||
|
the HTML API have never needed this data previously.
|
||||||
|
|
||||||
|
Does this imply that the HTML API is obsolete?
|
||||||
|
----------------------------------------------
|
||||||
|
|
||||||
|
No. The FAQ of :pep:`691` was clear that the HTML API is not being deprecated,
|
||||||
|
and this PEP does not change that position. However, clients wishing to access
|
||||||
|
the new data introduced by this PEP will need to use the JSON API to get it. And
|
||||||
|
indexes wanting to provide it will need to serve the JSON format.
|
||||||
|
|
||||||
|
Why not allow other date formats?
|
||||||
|
---------------------------------
|
||||||
|
|
||||||
|
The ISO 8601 standard is complex, and there seems little value in requiring
|
||||||
|
clients to deal with that. The standard library ``datetime`` module provides
|
||||||
|
methods to parse ISO 8601 strings, but it is possible that users may want to
|
||||||
|
access index data *without* using Python (for example, piping the output of
|
||||||
|
``curl`` into ``jq``). Having a single, well-defined format makes this easier,
|
||||||
|
and doesn't have any significant disadvantages.
|
||||||
|
|
||||||
|
What if file sizes are too big for a JSON number?
|
||||||
|
-------------------------------------------------
|
||||||
|
|
||||||
|
The JSON standard does not specify how numbers are to be interpreted. Python can
|
||||||
|
read and write arbitrary-length integers in a JSON file, so this should not be
|
||||||
|
an issue for code written in Python. Non-Python implementations may need to take
|
||||||
|
care to handle large integers correctly, but this is not expected to be a
|
||||||
|
significant problem.
|
||||||
|
|
||||||
|
|
||||||
|
Copyright
|
||||||
|
=========
|
||||||
|
|
||||||
|
This document is placed in the public domain or under the
|
||||||
|
CC0-1.0-Universal license, whichever is more permissive.
|
Loading…
Reference in New Issue