[Python-checkins] r70705 - peps/trunk/pep-0381.txt

tarek.ziade python-checkins at python.org
Mon Mar 30 06:53:46 CEST 2009


Author: tarek.ziade
Date: Mon Mar 30 06:53:39 2009
New Revision: 70705

Log:
various fixes, more details

Modified:
   peps/trunk/pep-0381.txt

Modified: peps/trunk/pep-0381.txt
==============================================================================
--- peps/trunk/pep-0381.txt	(original)
+++ peps/trunk/pep-0381.txt	Mon Mar 30 06:53:39 2009
@@ -10,6 +10,7 @@
 Python-Version: N.A.
 Post-History:
 
+
 Abstract
 ========
 
@@ -35,7 +36,6 @@
   by PyPI, in order to get hit counts and the last modified date.
 - how a mirror should synchronize with PyPI
 - how a client can implement a fail-over mechanism
-- a contact form for Package maintainers
 
 
 Mirror listing and registering
@@ -46,31 +46,59 @@
 added in a mirror list in the PyPI application after it
 has been checked to be compliant with the mirroring rules.
 
-A mirror has to be a hostname. For example:
-
-- http://pypi.my-company.com
-- http://mirror-pypi.somewhere.org
-
 The mirror list is handled by a DNS entry for this hostname:
 
     mirrors.pypi.python.org
 
 When a mirror is added into the DNS, it becomes an official
-IP for `mirrors.pypi.python.org`.
+IP for `mirrors.pypi.python.org`, and requests will be sent
+to the given IP. Therefore the mirror maintainer should not
+change the IP provided. If the IP has to change for any reason,
+the mirror maintainer has to send a mail to catalog-SIG at least
+one week before the change so the DNS entry can be changed on time.
 
 The new mirror also appears at `http://pypi.python.org/mirrors`
 which is a human-readable page that gives the list of mirrors.
 This page also explains how to register a new mirror.
 
+Statistics page
+:::::::::::::::
+
+PyPI provides statistics on downloads at `/stats`. This page is 
+calculated daily by PyPI, by reading all mirrors' local stats and 
+summing them.
+
+The stats are presented in daily or montly files, under `/stats/days` 
+and `/stats/months`. Each file is a `bzip2` file with these formats:
+
+- YYYY-MM-DD.bz2 for daily files
+- YYYY-MM.bz2 for monthly files
+
+Examples:
+
+- /stats/days/2008-11-06.bz2
+- /stats/days/2008-11-07.bz2
+- /stats/days/2008-11-08.bz2
+- /stats/months/2008-11.bz2
+- /stats/months/2008-10.bz2
+
+
 Special pages a mirror needs to provide
 =======================================
 
-A mirror needs to provide four pages, beside the index one:
+A mirror is a strict copy of PyPI, so it provides the same structure
+by copying it.
+
+- pypi: html version of the package index
+- simple: rest version of the package index
+- packages: packages, stored by Python version, and letters
+- stats : statistics on downloads
+- XXX
+
+It also needs to provide two specific elements:
 
 - last-modified
 - local-stats
-- stats
-- mirrors
 
 Last modified date
 ::::::::::::::::::
@@ -81,12 +109,11 @@
 For PyPI, each mirror needs to maintain a URL with simple text content
 that represents the last synchronisation date the mirror maintains.
 
-The date is provided in GMT time, using the ISO 8601 format (see
-http://en.wikipedia.org/wiki/ISO_8601).
-
+The date is provided in GMT time, using the ISO 8601 format [#iso8601]_.
 Each mirror will be responsible to maintain its last modified date.
 
-Conventionally, this page should be reachable at: `/last-modified`.
+This page must be located at : `/last-modified` and must be a 
+text/plain page.
 
 Local statistics
 ::::::::::::::::
@@ -124,42 +151,7 @@
 - /local-stats/days/2008-11-07.bz2
 - /local-stats/days/2008-11-08.bz2
 
-Conventionally the name should be `local-stats`, but it can be any
-name provided when the mirror is registered.
-
-Statistics page
-:::::::::::::::
-
-PyPI and each mirror are responsible to provide the grand total page
-at `/stats`.  This page is calculated daily by PyPI, by reading all
-mirrors' local stats and summing them.
-
-Therefore the mirrors should not try to rebuild this stat page but
-simply get the one on PyPI during each synchronization.
-
-It has the same structure as `local-stats` but also provides counts
-for months.
-
-Examples:
-
-- /stats/days/2008-11-06.bz2
-- /stats/days/2008-11-07.bz2
-- /stats/days/2008-11-08.bz2
-- /stats/months/2008-11.bz2
-- /stats/months/2008-10.bz2
-
-Conventionally the name should be `stats`, but it can be any name
-provided when the mirror is registered.
-
-
-Mirrors listing page
-::::::::::::::::::::
-
-Like `/stats`, each mirror should get and provide a copy of the
-`/mirrors` page.
-
-Conventionally the name should be `mirrors`, but it can be any name
-provided when the mirror is registered.
+This page must be located at `/local-stats`.
 
 
 How a mirror should synchronize with PyPI
@@ -175,7 +167,7 @@
 
 XXX Need to describe the protocol here.
 
-The zc.pypimirror package [#zcpkg]_ provides an application that
+The z3c.pypimirror package [#zcpkg]_ provides an application that
 respects this protocol to browse PyPI.
 
 User-agent request header 
@@ -187,10 +179,9 @@
 
 This is also true for all clients like:
 
-- `zc.buildout <http://pypi.python.org/pypi/zc.buildout>`_
-- `setuptools <http://pypi.python.org/pypi/zc.buildout>`_
-- `pip <http://pypi.python.org/pypi/zc.buildout>`_
-- etc.
+- zc.buildout [#zc.buildout]_.
+- setuptools [#setuptools]_.
+- pip [#pip]_.
 
 XXX user agent registering mechanism at PyPI ?
 
@@ -198,7 +189,13 @@
 :::::::::::::::::::::::::::::::::::::::::
 
 Clients that are browsing PyPI should be able to use alternative
-mirrors, by reading the `/mirrors` page at PyPI.
+mirrors, by getting the list of the mirrors using `mirrors.pypi.python.org`.
+
+Code example::
+
+    >>> import socket
+    >>> socket.gethostbyname_ex('mirrors.pypi.python.org')[-1]
+    ['82.94.164.163', '88.191.64.248']
 
 The clients so far that could use this mechanism:
 
@@ -212,9 +209,6 @@
 Clients that are browsing PyPI should be able to use a fail-over
 mechanism when PyPI or the used mirror is not responding.
 
-This can be done by parsing the `/mirrors` page of PyPI or the one
-located on any PyPI mirror.
-
 It is up to the client to decide wich mirror should be used, maybe by
 looking at its geographical location and its responsivness.
 
@@ -242,9 +236,8 @@
 
 Softwares that are compatible with PyPI and Distutils so far:
 
-- `PloneSoftwareCenter <http://plone.org/products/plonesoftwarecenter>`_
-  wich is used to run plone.org products section.
-- `EggBasket <http://www.chrisarndt.de/projects/eggbasket>`_
+- PloneSoftwareCenter [#psc]_ wich is used to run plone.org products section.
+- EggBasket [#eggbasket]_.
 
 **An extra package index is not a mirror of PyPI, but can have some
 mirrors itself.**
@@ -257,8 +250,10 @@
 source of packages.  Different indexes should be defined as a sorted
 list for the client to look for a package.
 
-Each independant index can of course provide a list of its mirrors, if
-the `/mirrors` page is available.
+Each independant index can of course provide a list of its mirrors.
+
+XXX define how to get the hostname for the mirrors of an arbitrary
+index.
 
 That permits all combinations at client level, for a reliable
 packaging system with all levels of privacy.
@@ -275,6 +270,30 @@
 .. [#zcpkg]
    http://pypi.python.org/pypi/z3c.pypimirror
 
+.. [#iso8601]
+   http://en.wikipedia.org/wiki/ISO_8601
+
+.. [#zc.buildout]
+   http://pypi.python.org/pypi/zc.buildout
+
+.. [#setuptools]
+   http://pypi.python.org/pypi/setuptools
+
+.. [#pip]
+   http://pypi.python.org/pypi/pip
+
+.. [#psc]
+   http://plone.org/products/plonesoftwarecenter
+
+.. [#eggbasket]
+   http://www.chrisarndt.de/projects/eggbasket
+
+
+Aknowledgments
+==============
+
+Martin von Loewis, Georg Brandl.
+
 
 Copyright
 =========


More information about the Python-checkins mailing list