> On Sep 30, 2014, at 11:14 AM, Paul Moore <p.f.mo...@gmail.com> wrote:
> 
> On 30 September 2014 15:25, Paul Moore <p.f.mo...@gmail.com> wrote:
>> On 28 August 2014 19:58, Donald Stufft <don...@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

PyPI follows PEP 426, I think we even include the confusables support.

Generally the normalization is done with pkg_resources.safe_name(…).lower().

I don’t think there’s any reason not to document it, setuptools has it’s
routine documented but that does’t have everything that the /simple/
API supports documented since it’s really documentation for what setuptools
does.

The URL redirect for the json endpoint was made to match what happens with
/pypi/django/. Lately I’ve been thinking that maybe we should just use the
normalized form in URLs always and use the author provided name for display
purposes.

---
Donald Stufft
PGP: 7C6B 7C5D 5E2B 6356 A926 F04F 6E3C BCE9 3372 DCFA

_______________________________________________
Distutils-SIG maillist  -  Distutils-SIG@python.org
https://mail.python.org/mailman/listinfo/distutils-sig

Reply via email to