[Distutils] Handling Case/Normalization Differences

Paul Moore p.f.moore at gmail.com
Tue Sep 30 17:14:20 CEST 2014


On 30 September 2014 15:25, Paul Moore <p.f.moore at gmail.com> wrote:
> On 28 August 2014 19:58, Donald Stufft <donald at stufft.io> wrote:
>> To fix this I'm going to modify PyPI so that it uses the normalized name in
>> the /simple/ URL and redirects everything else to the non-normalized name.
>> I'm  also going to submit a PR to bandersnatch so that it will use normalized
>> names for it's directories and such as well. These two changes will make it so
>> that the client side will know ahead of time exactly what form the server expects
>> any given name to be in. This will allow a change in pip to happen which
>> will pre-normalize all names which will make the interaction with mirrors
>> better and will reduce the number of HTTP requests that a single ``pip install``
>> needs to make.
>
> Just to clarify, this means that if I want to find the simple index
> page for a distribution, without hitting redirects, I should first
> normalise the project name (so "Django" becomes "django") and then
> request https://pypi.python.org/simple/<normalised_name>/ (with a
> slash on the end). Is that correct? It seems to match what I see in
> practice (in particular, the version without a terminating slash
> redirects to the version with a terminating slash).
>
> The JSON API has the opposite behaviour -
> https://pypi.python.org/pypi/Django/json redirects to
> https://pypi.python.org/pypi/django/json. Should that not be changed
> to match? Will it be?

One further thought. Where is the definition of how to normalise a
name? I could probably dig through the pip sources and find it, but it
would be nice if it were documented somewhere. From experiment, it
seems like lowercase, and with hyphens rather than underscores, is the
definition. Does PyPI allow names not allowed by
http://legacy.python.org/dev/peps/pep-0426/#name and if it does, how
are they normalised?

In case it's not obvious, I'm writing a client for the PyPI API, and
these questions are coming out of that process.

Paul.

PS The Python wiki has pages for the XMLRPC and JSON API. Any
objections to me adding a page for the simple API? (The obvious
objection being that it's documented somewhere else, and I should just
put a pointer to the real documentation...)

Paul


More information about the Distutils-SIG mailing list