[Python-checkins] peps (merge default -> default): Merge heads.

eric.smith python-checkins at python.org
Sat Sep 5 03:26:11 CEST 2015


https://hg.python.org/peps/rev/bd767f6451c9
changeset:   6036:bd767f6451c9
parent:      6035:b1879c55a410
parent:      6034:f8ef87655f9d
user:        Eric V. Smith <eric at trueblade.com>
date:        Fri Sep 04 21:26:29 2015 -0400
summary:
  Merge heads.

files:
  pep-0503.txt |  114 +++++++++++++++++++++++++++++++++++++++
  1 files changed, 114 insertions(+), 0 deletions(-)


diff --git a/pep-0503.txt b/pep-0503.txt
new file mode 100644
--- /dev/null
+++ b/pep-0503.txt
@@ -0,0 +1,114 @@
+PEP: 503
+Title: Simple Repository API
+Version: $Revision$
+Last-Modified: $Date$
+Author: Donald Stufft <donald at stufft.io>
+BDFL-Delegate: Donald Stufft <donald at stufft.io>
+Discussions-To: distutils-sig at python.org
+Status: Draft
+Type: Informational
+Content-Type: text/x-rst
+Created: 04-Sep-2015
+Post-History: 04-Sep-2015
+
+
+Abstract
+========
+
+There are many implementations of a Python package repository and many tools
+that consume them. Of these, the cannonical implementation that defines what
+the "simple" repository API looks like is the implementation that powers
+PyPI. This document will specify that API, documenting what the correct
+behavior for any implementation of the simple repository API.
+
+
+Specification
+=============
+
+A repository that implements the simple API is defined by its base url, this is
+the top level URL that all additional URLS are below. The API is named the
+"simple" repository due to fact that PyPI's base URL is
+``https://pypi.python.org/simple/``.
+
+.. note:: All subsequent URLs in this document will be relative to this base
+          URL (so given PyPI's URL, an URL of ``/foo/`` would be
+          ``https://pypi.python.org/simple/foo/``).
+
+
+Within a repository, the root URL (``/``) **MUST** be a valid HTML5 page with a
+single anchor element per project in the repository. The text of the anchor tag
+**MUST** be the normalized name of the project and the href attribute **MUST**
+link to the URL for that particular project. As an example::
+
+   <!DOCTYPE html>
+   <html>
+     <body>
+       <a href="/frob/">frob</a>
+       <a href="/spamspamspam/">spamspamspam</a>
+     </body>
+   </html>
+
+Below the root URL is another URL for each individual project contained within
+a repository. The format of this URL is ``/<project>/`` where the ``<project>``
+is replaced by the normalized name for that project, so a project named
+"HolyGrail" would have an URL like ``/holygrail/``. This URL must response with
+a valid HTML5 page with a single anchor element per file for the project. The
+text of the anchor tag **MUST** be the filename of the file and the href
+attribute **MUST** be an URL that links to the location of the file for
+download. The URL **SHOULD** include a hash in the form of an URL fragment with
+the following syntax: ``#<hashname>=<hashvalue>``, where ``<hashname>`` is the
+lowercase name of the hash function (such as ``sha256``) and ``<hashvalue>`` is
+the hex encoded digest.
+
+In addition to the above, the following constraints are placed on the API:
+
+* All URLs **MUST** end with a ``/`` and the repository **SHOULD** redirect the
+  URLs without a ``/`` to add a ``/`` to the end.
+
+* There is no constraints on where the files must be hosted relative to the
+  repository.
+
+* There may be any other HTML elements on the API pages as long as the required
+  anchor elements exist.
+
+* Repositories **MAY** redirect unnormalized URLs to the cannonical normalized
+  URL (e.g. ``/Foobar/`` may redirect to ``/foobar/``), however clients
+  **MUST NOT** rely on this redirection and **MUST** request the normalized
+  URL.
+
+* Repositories **SHOULD** choose a hash function from one of the ones
+  guarenteed to be available via the ``hashlib`` module in the Python standard
+  library (currently ``md5``, ``sha1``, ``sha224``, ``sha256``, ``sha384``,
+  ``sha512``). The current recommendation is to use ``sha256``.
+
+
+Normalized Names
+----------------
+
+This PEP references the concept of a "normalized" project name. As per PEP 426
+the only valid characters in a name are the ASCII alphabet, ASCII numbers,
+``.``, ``-``, and ``_``. The name should be lowercased with all runs of the
+characters ``.``, ``-``, or ``_`` replaced with a single ``-`` character. This
+can be implemented in Python with the ``re`` module::
+
+   import re
+
+   def normalize(name):
+       return re.sub(r"[-_.]+", "-", name).lower()
+
+
+Copyright
+=========
+
+This document has been placed in the public domain.
+
+
+

+..
+   Local Variables:
+   mode: indented-text
+   indent-tabs-mode: nil
+   sentence-end-double-space: t
+   fill-column: 70
+   coding: utf-8
+   End:

-- 
Repository URL: https://hg.python.org/peps


More information about the Python-checkins mailing list