On Thu, Mar 11, 2010 at 11:05 AM, Baiju M <mbaiju@zeomega.com> wrote:
On Thu, Mar 11, 2010 at 10:09 AM, P.J. Eby <pje@telecommunity.com> wrote:
At 09:50 AM 3/10/2010 +0530, Baiju M wrote:
I spend some time with Buildout and setuptools code to identify the issue. I will try to explain my findings.
1. Buildout is relying on pkg_resources.Requirement.parse function to get the "project_name" like this:
pkg_resources.Requirement.parse('jiva_interface').project_name
I can see from the code of `Requirement` class that, the `__init__` method is deprecated and recommend to use `parse` function.
It is undocumented, not deprecated. You are simply not supposed to create instances via that (private) constructor.
Okay, fine. Buildout doesn't create any instance directly.
Does this mean that we should not use the attributes of an instance of `Requirement` class? This is very important as the `parse` function return a list of instances of `Requirement` class.
Requirement objects are documented; see:
http://peak.telecommunity.com/DevCenter/PkgResources#requirement-objects
So, according to the EBNF given there, "_" is a valid project_name identifier:
project_name ::= identifier identifier ::= [-A-Za-z0-9_]+
So, if it is acceptable to use the "project_name" attribute, then Buildout can rely on it, right ?
Yes.
According to this code, this will be the result:
pkg_resources.safe_name('jiva_interface') 'jiva-interface'
And:
pkg_resources.Requirement.parse('jiva_interface').project_name 'jiva-interface'
Is this behavior correct ?
Yes it is. All non-alphanumeric, non-dot characters are replaced with '-' in a project name. This turns project names like e.g. "Foo's Bar Factory" into their canonical form (i.e., "Foo-s-Bar-Factory").
If "_" is a valid project_name identifier, why it is replaces with "-" ?
There nearly 300 packages in PyPI with "_" in the package name. For all the packages built using Setuptools, the "Name" field in the PKG-INFO file is replaced with "-". I checked some of the packages built with "distutils.core" [1] Distutils is not replacing "Name" field in PKG-INFO file with "-". Why Setuptools is behaving different from Distutils ? Regards, Baiju M [1] http://pypi.python.org/pypi/text_table/0.02