From amk@amk.ca  Sat Apr 12 14:11:24 2003
From: amk@amk.ca (A.M. Kuchling)
Date: Sat, 12 Apr 2003 09:11:24 -0400
Subject: [Catalog-sig] PEP 314: Updating the package metadata format
Message-ID: <20030412131123.GA20645@nyman.amk.ca>

At PyCon there was a Distribution BoF that I found very helpful, and
that convinced me that taking care of dependencies is feasible.  See
http://www.amk.ca/diary/2003/03/28.html#2003-03-28-4 for my full
account.

One step that isn't listed in the TODO list in that entry is updating
the metadata format specified in PEP 241 to include requirements and
dependencies.  The updated specification has been allocated PEP 314.
Rather than post the whole document, making it difficult to see the
changes, a diff between the old and new version is included below.
Please comment on the changes.

--amk                                                             (www.amk.ca)
HIPPOLYTA: I never heard so musical a discord, such sweet thunder.
      -- _A Midsummer Night's Dream_, IV, i

Index: pep-0314.txt
===================================================================
RCS file: /cvsroot/python/python/nondist/peps/pep-0314.txt,v
retrieving revision 1.1
retrieving revision 1.3
diff -u -u -r1.1 -r1.3
--- pep-0314.txt	12 Apr 2003 19:45:01 -0000	1.1
+++ pep-0314.txt	12 Apr 2003 21:16:50 -0000	1.3
@@ -13,6 +13,8 @@
    packages.  It includes specifics of the field names, and their
    semantics and usage.
 
+   This document specifies version 1.1 of the metadata format.
+   Version 1.0 is specified in PEP 241.
 
 Including Metadata in Packages
 
@@ -48,12 +50,12 @@
 
     Metadata-Version
 
-      Version of the file format; currently "1.0" is the only
-      legal value here.  
+      Version of the file format; currently "1.0" and "1.1" are the
+      only legal values here.
 
       Example: 
 
-           Metadata-Version: 1.0
+           Metadata-Version: 1.1
 
     Name
 
@@ -211,16 +213,99 @@
 
           License: MIT
       
+    Requires (multiple use)
+      
+      Each entry contains a string describing some other component or
+      module required by this package. 
+
+      The format of a requirement string is simple: an arbitrary
+      sequence of characters, optionally followed by a version
+      declaration within parentheses.  Leading and trailing whitespace
+      are ignored, and whitespace within the string is normalized to a
+      single space.
+
+      A version declaration is a series of conditional operators and
+      version numbers, separated by commas.  Conditional operators
+      must be one of "<", ">", "<=", ">=", "=", and "!=".  Version
+      numbers must be in the format accepted by the
+      distutils.version.StrictVersion class: two or three
+      dot-separated numeric components, with an optional "pre-release"
+      tag on the end consisting of the letter 'a' or 'b' followed by a
+      number.  Example version numbers are "1.0", "2.3a2", "1.3.99", 
+
+      XXX Do we really need = and !=?
+
+      XXX Should it be == or =?
+
+      XXX Should we support LooseVersion instead of StrictVersion?
+      LooseVersions aren't comparable...
+
+      Any number of conditional operators can be specified, e.g.
+      ">1.0, !=1.3.4, <2.0".
+
+      All of the following are possible requirement strings: "rfc822",
+      "", "zlib (>=1.1.4)", "XML parser".
+
+      There's no canonical list of what strings should be used; the
+      Python community is left to choose its own standards.
+
+      Example: 
+
+          Requires: re
+          Requires: sys
+          Requires: zlib
+          Requires: pyexpat (>1.0)
+          Requires: DB-API 2.0 module
+       
+    Provides (multiple use)
+
+      Each entry contains a string describing a component or
+      module that will be provided by this package once it is
+      installed.  These strings should match the ones used in
+      Requirements fields.  Version declarations cannot be supplied;
+      instead the package's version number will be used.
+
+      Example: 
+
+          Provides: xml
+          Provides: xml.utils
+          Provides: xml.utils.iso8601
+          Provides: xml.dom
+
+    Obsoletes (multiple use)
+
+      Each entry contains a string describing a component or module
+      that this package renders obsolete, meaning that the two packages
+      should not be installed at the same time.  Version declarations
+      cannot be supplied.  (XXX Or are they needed for Obsoletes?)
+
+      The most common use of this field will be in case a package name
+      changes, e.g. Gorgon 2.3 gets subsumed into Torqued Python 1.0.
+      When you install Torqued Python, the Gorgon package should be
+      removed.
+      
+      Example:
+
+          Obsoletes: Gorgon
+
+    Conflicts (multiple use)
+
+      Each entry contains a string describing a component or module
+      that conflicts with this package, meaning that the two packages
+      should not be installed at the same time.  Version declarations
+      cannot be supplied.  
+
+      Conflict resolution probably isn't very important for Python
+      programs, because few extensions will cause problems for other
+      extensions, unless they're using the same package name.  This 
+      field name is being defined here for future use.
+
+          Conflicts: Gorgon
+
 
 Acknowledgements
 
-    Many changes and rewrites to this document were suggested by the
-    readers of the Distutils SIG.  In particular, Sean Reifschneider
-    often contributed actual text for inclusion in this PEP.
- 
-    The list of licenses was compiled using the SourceForge license
-    list and the CTAN license list compiled by Graham Williams; Carey
-    Evans also offered several useful suggestions on this list.
+    None yet.        
 
 
 Copyright


From acapnotic@twistedmatrix.com  Thu Apr 17 00:34:17 2003
From: acapnotic@twistedmatrix.com (Kevin Turner)
Date: 16 Apr 2003 16:34:17 -0700
Subject: [Catalog-sig] PKG-INFO exports?
Message-ID: <1050536015.22304.208.camel@troglodyte.funhouse>

--=-SJNdTmDle6JvC/G6ceFG
Content-Type: text/plain
Content-Transfer-Encoding: quoted-printable

Hi.  Can I get python.org/pypi to give me raw metadata, i.e. PKG-INFO
files instead of the html-coated view?

pypi source at sourceforge.net says:
> no.

Oh.  Bummer.  Can it?  If I patched pypi..WebUI and added a raw_display
action, would you host it?

Thanks,

 - Kevin

--=20
The moon is full, 100.0% illuminated, 14.6 days old.

--=-SJNdTmDle6JvC/G6ceFG
Content-Type: application/pgp-signature; name=signature.asc
Content-Description: This is a digitally signed message part

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (GNU/Linux)

iD8DBQA+nehOh3hqIoukqUQRAgdFAJ9aZBEBc69rQO9/BO4GwzUMvmhRdQCfW3tk
SA+Zj2gOaSEgLQuWUrCeGiM=
=Cp/Z
-----END PGP SIGNATURE-----

--=-SJNdTmDle6JvC/G6ceFG--



From richardjones@optushome.com.au  Thu Apr 17 00:38:21 2003
From: richardjones@optushome.com.au (Richard Jones)
Date: Thu, 17 Apr 2003 09:38:21 +1000
Subject: [Catalog-sig] PKG-INFO exports?
In-Reply-To: <1050536015.22304.208.camel@troglodyte.funhouse>
References: <1050536015.22304.208.camel@troglodyte.funhouse>
Message-ID: <200304170938.23152.richardjones@optushome.com.au>

On Thu, 17 Apr 2003 09:34 am, Kevin Turner wrote:
> Hi.  Can I get python.org/pypi to give me raw metadata, i.e. PKG-INFO
> files instead of the html-coated view?
>
> pypi source at sourceforge.net says:
> > no.
>
> Oh.  Bummer.  Can it?  If I patched pypi..WebUI and added a raw_display
> action, would you host it?

Sure. I'll give you access to the SF project if that'll make things easier.


    Richard



From acapnotic@twistedmatrix.com  Thu Apr 17 01:48:23 2003
From: acapnotic@twistedmatrix.com (Kevin Turner)
Date: 16 Apr 2003 17:48:23 -0700
Subject: [Catalog-sig] PKG-INFO exports?
In-Reply-To: <200304170938.23152.richardjones@optushome.com.au>
References: <1050536015.22304.208.camel@troglodyte.funhouse>
 <200304170938.23152.richardjones@optushome.com.au>
Message-ID: <1050540501.22314.240.camel@troglodyte.funhouse>

--=-tqYZ8l0VD/f41OyW+E+s
Content-Type: text/plain
Content-Transfer-Encoding: quoted-printable

On Wed, 2003-04-16 at 16:38, Richard Jones wrote:
> Sure. I'll give you access to the SF project if that'll make things easie=
r.

Thanks, my sourceforge username is 'acapnotic'.

I can think of two ways to do this, one is to add a new action
'raw_display', the other would be to add a 'format' parameter to the
existing 'display' argument, which would default to a pretty HTML view,
but could also be set to PKG-INFO.  With that, you could later offer
extensions for yaml or xml/rdf or what have you, without a proliferation
of different action types.

Preferences?

--=20
The moon is full, 100.0% illuminated, 14.7 days old.

--=-tqYZ8l0VD/f41OyW+E+s
Content-Type: application/pgp-signature; name=signature.asc
Content-Description: This is a digitally signed message part

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (GNU/Linux)

iD8DBQA+nfnVh3hqIoukqUQRAheGAKDmQDkrAgxK3irgjOIdV6izQRiSwwCeL/EM
/b96htEPeLA7R4GvKUSi45c=
=sF0D
-----END PGP SIGNATURE-----

--=-tqYZ8l0VD/f41OyW+E+s--



From richardjones@optushome.com.au  Thu Apr 17 02:06:57 2003
From: richardjones@optushome.com.au (Richard Jones)
Date: Thu, 17 Apr 2003 11:06:57 +1000
Subject: [Catalog-sig] PKG-INFO exports?
In-Reply-To: <1050540501.22314.240.camel@troglodyte.funhouse>
References: <1050536015.22304.208.camel@troglodyte.funhouse> <200304170938.23152.richardjones@optushome.com.au> <1050540501.22314.240.camel@troglodyte.funhouse>
Message-ID: <200304171106.58219.richardjones@optushome.com.au>

On Thu, 17 Apr 2003 10:48 am, Kevin Turner wrote:
> On Wed, 2003-04-16 at 16:38, Richard Jones wrote:
> > Sure. I'll give you access to the SF project if that'll make things
> > easier.
>
> Thanks, my sourceforge username is 'acapnotic'.

OK, you're added.


> I can think of two ways to do this, one is to add a new action
> 'raw_display', the other would be to add a 'format' parameter to the
> existing 'display' argument, which would default to a pretty HTML view,
> but could also be set to PKG-INFO.  With that, you could later offer
> extensions for yaml or xml/rdf or what have you, without a proliferation
> of different action types.

I'd prefer to go with raw_display. Or rather, display_pkginfo. That seems to 
fit in better with the general feel of the code.

As you will have noticed by looking in the webui code, it's grown somewhat 
haphazardly :) In hindsight, I should have made use of some web framework, 
but when I started I had such a small requirement of the web interface I 
didn't feel it was necessary. Ho hum :)


    Richard



From amk@amk.ca  Wed Apr 16 14:18:23 2003
From: amk@amk.ca (A.M. Kuchling)
Date: Wed, 16 Apr 2003 09:18:23 -0400
Subject: [Catalog-sig] PKG-INFO exports?
In-Reply-To: <1050540501.22314.240.camel@troglodyte.funhouse>
References: <1050536015.22304.208.camel@troglodyte.funhouse> <200304170938.23152.richardjones@optushome.com.au> <1050540501.22314.240.camel@troglodyte.funhouse>
Message-ID: <20030416131823.GA14500@nyman.amk.ca>

--sm4nu43k4a2Rpi4c
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

On Wed, Apr 16, 2003 at 05:48:23PM -0700, Kevin Turner wrote:
>but could also be set to PKG-INFO.  With that, you could later offer
>extensions for yaml or xml/rdf or what have you, without a proliferation
>of different action types.

HTTP already has a header for this that gets passed as the
ACCEPT_TYPES HTTP header.  So text/plain could get PKG-INFO, text/html
would get the existing HTML, application/rdf+xml could get some future
hypothetical RDF encoding, and so forth.

Here are two functions from Quixote that do the hard part.

# These are needed by 'get_encoding()', to parse the "Accept-Encoding"
# header.  LWS is linear whitespace; the latter two assume that LWS
# has been removed.
_http_lws_re = re.compile("(\r\n)?[ \t]+")
_http_list_re = re.compile(r",+")
_http_encoding_re = re.compile(r"([^;]+)(;q=([\d.]+))?$")

    def get_accepted_types (self):
        """get_accepted_types() : {string:float}
        Return a dictionary mapping MIME types the client will accept
        to the corresponding quality value (1.0 if no value was specified).
        """
        accept_types = self.environ.get('HTTP_ACCEPT', "")
        return self._parse_pref_header(accept_types)


    def _parse_pref_header (self, S):
        """_parse_pref_header(S:string) : {string:float}
        Parse a list of HTTP preferences (content types, encodings) and
        return a dictionary mapping strings to the quality value.
        """

        found = {}
        # remove all linear whitespace
        S = _http_lws_re.sub("", S)
        for coding in _http_list_re.split(S):
            m = _http_encoding_re.match(coding)
            if m:
                encoding = m.group(1).lower()
                q = m.group(3) or 1.0
                try:
                    q = float(q)
                except ValueError:
                    continue
                if encoding == "*":
                    continue # stupid, ignore it
                if q > 0:
                    found[encoding] = q
        return found

--amk                                                             (www.amk.ca)
Homological algebra beckons -- brain relief in this context!
      -- Michael Hudson, 07 Nov 2001, in a discussion of Stackless Python

--sm4nu43k4a2Rpi4c
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (GNU/Linux)

iD8DBQE+nVgckTvcXou9d/ARAlZ1AKDlzrgPggfa8cKDj+68v+WUm3LC8ACg7K2s
0YpHHKRy8cgsjR08rY3gzfY=
=kuhX
-----END PGP SIGNATURE-----

--sm4nu43k4a2Rpi4c--


From acapnotic@twistedmatrix.com  Thu Apr 17 03:46:03 2003
From: acapnotic@twistedmatrix.com (Kevin Turner)
Date: 16 Apr 2003 19:46:03 -0700
Subject: [Catalog-sig] PKG-INFO exports?
In-Reply-To: <200304171106.58219.richardjones@optushome.com.au>
References: <1050536015.22304.208.camel@troglodyte.funhouse>
 <200304170938.23152.richardjones@optushome.com.au>
 <1050540501.22314.240.camel@troglodyte.funhouse>
 <200304171106.58219.richardjones@optushome.com.au>
Message-ID: <1050547561.22306.259.camel@troglodyte.funhouse>

--=-rq4Qj3MvgNfVE3JIJjtj
Content-Type: text/plain
Content-Transfer-Encoding: quoted-printable

On Wed, 2003-04-16 at 18:06, Richard Jones wrote:=20
> I'd prefer to go with raw_display. Or rather, display_pkginfo. That seems=
 to=20
> fit in better with the general feel of the code.

Ok, action display_pkginfo is checked in but untested.  (There's some
issue with my testbed pypi installation, I can't seem to get it to
register new users.  I hit the link given in the e-mail, and it just
keeps asking me to authenticate, never succeeding.)

> As you will have noticed by looking in the webui code, it's grown somewha=
t=20
> haphazardly :) In hindsight, I should have made use of some web framework=
,=20
> but when I started I had such a small requirement of the web interface I=20
> didn't feel it was necessary. Ho hum :)

I did indeed notice that.  Well, for the time being it's still
navigable, so yes, "ho hum" it is.

Cheers,

 - Kevin

--=20
The moon is full, 100.0% illuminated, 14.8 days old.

--=-rq4Qj3MvgNfVE3JIJjtj
Content-Type: application/pgp-signature; name=signature.asc
Content-Description: This is a digitally signed message part

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (GNU/Linux)

iD8DBQA+nhVoh3hqIoukqUQRApBOAKDP+5CrESaY2GN4BCyDk5iZzAyUUwCdF4Cb
W66ukQrUo3dgEcGFZLGELJU=
=+9Mb
-----END PGP SIGNATURE-----

--=-rq4Qj3MvgNfVE3JIJjtj--



From acapnotic@twistedmatrix.com  Thu Apr 17 21:22:05 2003
From: acapnotic@twistedmatrix.com (Kevin Turner)
Date: 17 Apr 2003 13:22:05 -0700
Subject: [Catalog-sig] PKG-INFO exports?
In-Reply-To: <20030416131823.GA14500@nyman.amk.ca>
References: <1050536015.22304.208.camel@troglodyte.funhouse>
 <200304170938.23152.richardjones@optushome.com.au>
 <1050540501.22314.240.camel@troglodyte.funhouse>
 <20030416131823.GA14500@nyman.amk.ca>
Message-ID: <1050610921.22306.306.camel@troglodyte.funhouse>

On Wed, 2003-04-16 at 06:18, A.M. Kuchling wrote: 
> HTTP already has a header for this that gets passed as the
> ACCEPT_TYPES HTTP header.  So text/plain could get PKG-INFO, text/html
> would get the existing HTML, application/rdf+xml could get some future
> hypothetical RDF encoding, and so forth.

Hmm.  This is, in the bizarro W3C-universe, the right answer, if we are
in fact always publishing the same set of information and just
expressing it in different formats.  However, back here on the mortal
plane, it's much more difficult to work with than giving different URLs
to different formats.  You have to use a tool that lets you specify this
header, and that's probably not unreasonable here, but it does mean you
can't test it in your everyday browser.

Also, CacheNow! says that http caches do not "co-exist happily" with
happily with content negotiation[1].  As long as the URL has got a
".cgi?" in it that probably doesn't matter (as it's not likely to get
cached anyway), but it's another factor to consider.


[1] http://vancouver-webpages.com/CacheNow/negotiation.html

-- 
The moon is full, 99.2% illuminated, 15.6 days old.



From acapnotic@twistedmatrix.com  Mon Apr 21 21:57:00 2003
From: acapnotic@twistedmatrix.com (Kevin Turner)
Date: 21 Apr 2003 13:57:00 -0700
Subject: [Catalog-sig] PKG-INFO exports?
In-Reply-To: <1050547561.22306.259.camel@troglodyte.funhouse>
References: <1050536015.22304.208.camel@troglodyte.funhouse>
 <200304170938.23152.richardjones@optushome.com.au>
 <1050540501.22314.240.camel@troglodyte.funhouse>
 <200304171106.58219.richardjones@optushome.com.au>
 <1050547561.22306.259.camel@troglodyte.funhouse>
Message-ID: <1050958616.22313.438.camel@troglodyte.funhouse>

On Wed, 2003-04-16 at 19:46, Kevin Turner wrote:
> Ok, action display_pkginfo is checked in but untested.

I've tested it now; I'd neglected to handle the outgoing http headers
before, that's been fixed.  You can review the changes at 

http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/pypi/pypi/webui.py.diff?r1=1.54&r2=1.52

Any comments on the code or hints on when it might go live?


> (There's some
> issue with my testbed pypi installation, I can't seem to get it to
> register new users.  I hit the link given in the e-mail, and it just
> keeps asking me to authenticate, never succeeding.)

For the record, this was because my web server was setting
HTTP_AUTHENTICATION and not HTTP_CGI_AUTHENTICATION.  Changing the
script to check for the other variable worked well enough, but still had
some odd problems.  ('login' worked.  posting to submit_pkg_info
worked.  But when I posted to submit_form, it acted like it wasn't
authenticating again.  I love CGI.)

Thanks,

 - Kevin

-- 
The moon is waning gibbous, 70.5% illuminated, 20.2 days old.



From richardjones@optushome.com.au  Wed Apr 23 00:14:11 2003
From: richardjones@optushome.com.au (Richard Jones)
Date: Wed, 23 Apr 2003 09:14:11 +1000
Subject: [Catalog-sig] PKG-INFO exports?
In-Reply-To: <1050958616.22313.438.camel@troglodyte.funhouse>
References: <1050536015.22304.208.camel@troglodyte.funhouse> <1050547561.22306.259.camel@troglodyte.funhouse> <1050958616.22313.438.camel@troglodyte.funhouse>
Message-ID: <200304230914.11870.richardjones@optushome.com.au>

On Tue, 22 Apr 2003 06:57 am, Kevin Turner wrote:
> On Wed, 2003-04-16 at 19:46, Kevin Turner wrote:
> > Ok, action display_pkginfo is checked in but untested.
>
> I've tested it now; I'd neglected to handle the outgoing http headers
> before, that's been fixed.  You can review the changes at
>
> http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/pypi/pypi/webui.py.diff?r1=1
>.54&r2=1.52
>
> Any comments on the code or hints on when it might go live?

Code looks good to me. I've added a link to the PKG-INFO download link, and 
it's now live on pydotorg.


    Richard



From theller@python.net  Wed Apr 23 18:41:09 2003
From: theller@python.net (Thomas Heller)
Date: 23 Apr 2003 19:41:09 +0200
Subject: [Catalog-sig] PEP 314: Updating the package metadata format
In-Reply-To: <20030412131123.GA20645@nyman.amk.ca>
References: <20030412131123.GA20645@nyman.amk.ca>
Message-ID: <he8p5cy2.fsf@python.net>

Your recent comment on c.l.p reminded me that there was something I
would like to comment on.

In your diary entry
http://www.amk.ca/diary/2003/03/28.html#2003-03-28-4
you say Windows doesn't have a package system/package database.

I've shown in my pypan prototype that the uninstall information that
bdist_wininst writes contains enough information for a lot of things:
- you can remove the installed files
- you can list installed packages
- you may even be able to retrieve a version number of installed
packages

I don't remember if there is more.

Of course, this info is only present for packages installed from
bdist_wininst, but it would be trivial to extend distutils to either
create a bdist_wininst installer for the "setup.py install" command and
run it, or extend the install command to write this info.

Thomas



From theller@python.net  Wed Apr 23 18:57:39 2003
From: theller@python.net (Thomas Heller)
Date: 23 Apr 2003 19:57:39 +0200
Subject: [Catalog-sig] Re: PEP 314: Updating the package metadata format
References: <20030412131123.GA20645@nyman.amk.ca>
Message-ID: <wuhl3xm4.fsf@python.net>

"A.M. Kuchling" <amk@amk.ca> writes:
(see my embedded comments)

> +    Requires (multiple use)
> +      
> +      Each entry contains a string describing some other component or
> +      module required by this package. 
> +
> +      The format of a requirement string is simple: an arbitrary
> +      sequence of characters, optionally followed by a version
> +      declaration within parentheses.  Leading and trailing whitespace
> +      are ignored, and whitespace within the string is normalized to a
> +      single space.
> +
> +      A version declaration is a series of conditional operators and
> +      version numbers, separated by commas.  Conditional operators
> +      must be one of "<", ">", "<=", ">=", "=", and "!=".  Version
> +      numbers must be in the format accepted by the
> +      distutils.version.StrictVersion class: two or three
> +      dot-separated numeric components, with an optional "pre-release"
> +      tag on the end consisting of the letter 'a' or 'b' followed by a
> +      number.  Example version numbers are "1.0", "2.3a2", "1.3.99", 
> +
> +      XXX Do we really need = and !=?

Why not?

> +
> +      XXX Should it be == or =?
> +

I would prefer ==.

> +      XXX Should we support LooseVersion instead of StrictVersion?
> +      LooseVersions aren't comparable...

No support for LooseVersion, IMO.

> +    Conflicts (multiple use)
> +
> +      Each entry contains a string describing a component or module
> +      that conflicts with this package, meaning that the two packages
> +      should not be installed at the same time.  Version declarations
> +      cannot be supplied.  
> +
> +      Conflict resolution probably isn't very important for Python
> +      programs, because few extensions will cause problems for other
> +      extensions, unless they're using the same package name.  This 
> +      field name is being defined here for future use.
> +
> +          Conflicts: Gorgon
> +

I have a use case for Conflicts with version numbers.
ctypes was a couple of modules up to version 0.4.x, and is a package
starting with 0.6.x.

If you have both versions installed, you end up with 'ctypes.py' and
'ctypes\__init__.py' in lib/site-packages. If you 'import ctypes', I'm
not sure if you get the package or the module (there are probably rules
in Python to resolve this, but it may be wrong anyway).

Or should this case be handled differently?

Thomas



From akuchlin@mems-exchange.org  Wed Apr 23 19:21:58 2003
From: akuchlin@mems-exchange.org (Andrew Kuchling)
Date: Wed, 23 Apr 2003 14:21:58 -0400
Subject: [Catalog-sig] Re: PEP 314: Updating the package metadata format
In-Reply-To: <wuhl3xm4.fsf@python.net>
References: <20030412131123.GA20645@nyman.amk.ca> <wuhl3xm4.fsf@python.net>
Message-ID: <20030423182158.GA24064@ute.mems-exchange.org>

On Wed, Apr 23, 2003 at 07:57:39PM +0200, Thomas Heller wrote:
>I have a use case for Conflicts with version numbers.
>ctypes was a couple of modules up to version 0.4.x, and is a package
>starting with 0.6.x.
>
>If you have both versions installed, you end up with 'ctypes.py' and
>'ctypes\__init__.py' in lib/site-packages. If you 'import ctypes', I'm
>not sure if you get the package or the module (there are probably rules
>in Python to resolve this, but it may be wrong anyway).

I don't think you'll be able to have two versions of the same package
installed, so this shouldn't come up.  

--amk





From theller@python.net  Wed Apr 23 19:25:09 2003
From: theller@python.net (Thomas Heller)
Date: 23 Apr 2003 20:25:09 +0200
Subject: [Catalog-sig] Re: PEP 314: Updating the package metadata format
In-Reply-To: <20030423182158.GA24064@ute.mems-exchange.org>
References: <20030412131123.GA20645@nyman.amk.ca> <wuhl3xm4.fsf@python.net>
 <20030423182158.GA24064@ute.mems-exchange.org>
Message-ID: <d6jd3wca.fsf@python.net>

Andrew Kuchling <akuchlin@mems-exchange.org> writes:

> On Wed, Apr 23, 2003 at 07:57:39PM +0200, Thomas Heller wrote:
> >I have a use case for Conflicts with version numbers.
> >ctypes was a couple of modules up to version 0.4.x, and is a package
> >starting with 0.6.x.
> >
> >If you have both versions installed, you end up with 'ctypes.py' and
> >'ctypes\__init__.py' in lib/site-packages. If you 'import ctypes', I'm
> >not sure if you get the package or the module (there are probably rules
> >in Python to resolve this, but it may be wrong anyway).
> 
> I don't think you'll be able to have two versions of the same package
> installed, so this shouldn't come up.  

Maybe it's a bug in bdist_wininst, but you can first install
ctypes-0.4.0.exe, than ctypes-0.6.0.exe (for example), and it doesn't
complain, nor does the latter remove the files from the former.

Thomas



From akuchlin@mems-exchange.org  Wed Apr 23 19:35:32 2003
From: akuchlin@mems-exchange.org (Andrew Kuchling)
Date: Wed, 23 Apr 2003 14:35:32 -0400
Subject: [Catalog-sig] Re: PEP 314: Updating the package metadata format
In-Reply-To: <d6jd3wca.fsf@python.net>
References: <20030412131123.GA20645@nyman.amk.ca> <wuhl3xm4.fsf@python.net> <20030423182158.GA24064@ute.mems-exchange.org> <d6jd3wca.fsf@python.net>
Message-ID: <20030423183532.GA30403@ute.mems-exchange.org>

On Wed, Apr 23, 2003 at 08:25:09PM +0200, Thomas Heller wrote:
>Maybe it's a bug in bdist_wininst, but you can first install
>ctypes-0.4.0.exe, than ctypes-0.6.0.exe (for example), and it doesn't
>complain, nor does the latter remove the files from the former.

This is also possible with the install command currently; it just
copies files into place, but doesn't remove any existing files.  With
a working package database the existing files can be removed, though
implementing this will be touchy; we don't want to leave the user's
system broken if the installation fails midway through, having already
removed the old version of the package.

--amk                                                    (www.amk.ca)
In London there is a man who screams when the church bells ring.
      -- H.P. Lovecraft, "The Descendant"


From gh@ghaering.de  Fri Apr 25 01:53:13 2003
From: gh@ghaering.de (=?ISO-8859-1?Q?Gerhard_H=E4ring?=)
Date: Fri, 25 Apr 2003 02:53:13 +0200
Subject: [Catalog-sig] PyPI optimization?
Message-ID: <3EA886F9.9000805@ghaering.de>

Hi folks,

I just registered two project at PyPI and it was horribly slow for me.

I also noticed it uses PySQLite :-) But only because I got a traceback 
from a locked database file approx. one out of three requests.

If you need any help in optimizing the SQLite access and/or converting 
the system to a real multiuser database like PostgreSQL, I'd be willing 
to help. [1]

Or maybe it's just that the webserver is very slow?! This doesn't seem 
to be true for the rest of python.org in any case.

-- Gerhard

[1] It would be an excellent test case for the busy callback handlers I 
added to PySQLite recently. Though I still wouldn't recommend PySQLite 
for a hopefully busy web application, like this one ...


From richardjones@optushome.com.au  Fri Apr 25 02:34:20 2003
From: richardjones@optushome.com.au (Richard Jones)
Date: Fri, 25 Apr 2003 11:34:20 +1000
Subject: [Catalog-sig] PyPI optimization?
In-Reply-To: <3EA886F9.9000805@ghaering.de>
References: <3EA886F9.9000805@ghaering.de>
Message-ID: <200304251134.20212.richardjones@optushome.com.au>

--Boundary-02=_cCJq+r25aIydiuQ
Content-Type: text/plain;
  charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Description: signed data
Content-Disposition: inline

On Friday 25 April 2003 10:53 am, Gerhard H=E4ring wrote:
> I just registered two project at PyPI and it was horribly slow for me.

Yeah, not sure what's going on there - I've not had a chance to really look=
=20
into optimisation.


> I also noticed it uses PySQLite :-) But only because I got a traceback
> from a locked database file approx. one out of three requests.

Yep, not sure why we're getting those locking problems. I am using the busy=
=20
handler, with a timeout of 30 seconds.


> If you need any help in optimizing the SQLite access and/or converting
> the system to a real multiuser database like PostgreSQL, I'd be willing
> to help. [1]

I welcome any help :)

It you're serious, then I'll add you to the pypi project on sourceforge.


> Or maybe it's just that the webserver is very slow?! This doesn't seem
> to be true for the rest of python.org in any case.

Shouldn't be...


   Richard

--Boundary-02=_cCJq+r25aIydiuQ
Content-Type: application/pgp-signature
Content-Description: signature

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (GNU/Linux)

iD8DBQA+qJCcrGisBEHG6TARAtgHAJ9lSxy+qsFT3V1niG6iRU66F285ywCeIRjG
zXqzgfXRjuGgN7qGgPX3DTE=
=FqDr
-----END PGP SIGNATURE-----

--Boundary-02=_cCJq+r25aIydiuQ--



From thomas@xs4all.net  Fri Apr 25 11:07:12 2003
From: thomas@xs4all.net (Thomas Wouters)
Date: Fri, 25 Apr 2003 12:07:12 +0200
Subject: [Catalog-sig] PyPI optimization?
In-Reply-To: <200304251134.20212.richardjones@optushome.com.au>
References: <3EA886F9.9000805@ghaering.de> <200304251134.20212.richardjones@optushome.com.au>
Message-ID: <20030425100712.GB26242@xs4all.nl>

On Fri, Apr 25, 2003 at 11:34:20AM +1000, Richard Jones wrote:

> On Friday 25 April 2003 10:53 am, Gerhard H=E4ring wrote:

> > Or maybe it's just that the webserver is very slow?! This doesn't see=
m
> > to be true for the rest of python.org in any case.
>=20
> Shouldn't be...

Well, the machine is a lot heavier loaded now than it was before PyPI was
really used; the load used to be ~0.05, it's now hovering around 0.8,
sometimes as high as 1.5. That isn't terribly high, though, as this is a
dual CPU machine, and Apache for one isn't slowed down by it. I believe i=
t's
PyPI doing heavy I/O, or perhaps some form of locking, as the python
processes aren't using that much CPU either.

--=20
Thomas Wouters <thomas@xs4all.net>

Hi! I'm a .signature virus! copy me into your .signature file to help me =
spread!


From richardjones@optushome.com.au  Fri Apr 25 12:00:41 2003
From: richardjones@optushome.com.au (Richard Jones)
Date: Fri, 25 Apr 2003 21:00:41 +1000
Subject: [Catalog-sig] PyPI optimization?
In-Reply-To: <20030425100712.GB26242@xs4all.nl>
References: <3EA886F9.9000805@ghaering.de> <200304251134.20212.richardjones@optushome.com.au> <20030425100712.GB26242@xs4all.nl>
Message-ID: <200304252100.58072.richardjones@optushome.com.au>

--Boundary-02=_pVRq+OlxpOMiyok
Content-Type: text/plain;
  charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Description: signed data
Content-Disposition: inline

On Friday 25 April 2003 08:07 pm, Thomas Wouters wrote:
> Well, the machine is a lot heavier loaded now than it was before PyPI was
> really used; the load used to be ~0.05, it's now hovering around 0.8,
> sometimes as high as 1.5. That isn't terribly high, though, as this is a
> dual CPU machine, and Apache for one isn't slowed down by it. I believe
> it's PyPI doing heavy I/O, or perhaps some form of locking, as the python
> processes aren't using that much CPU either.

I haven't looked at the hits that PyPI is getting - does creosote have any =
web=20
stats automatically generated?

Perhaps it would be a good idea to switch to an RDBMS that is more=20
multi-user-friendly. Gerhard, is your offer to do this still open? The=20
backend of pypi is all in the store module, and it's quite simple. It'll=20
probably work out of the box on postgresql/mysql.


   Richard

--Boundary-02=_pVRq+OlxpOMiyok
Content-Type: application/pgp-signature
Content-Description: signature

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (GNU/Linux)

iD8DBQA+qRVprGisBEHG6TARAn4AAJ97hsb28VY0wL9BCsP3CbMdB3uTdwCfbz4e
UIM/uaU7OIX5SQtLBzkIca4=
=IL+m
-----END PGP SIGNATURE-----

--Boundary-02=_pVRq+OlxpOMiyok--



From gh@ghaering.de  Fri Apr 25 12:33:38 2003
From: gh@ghaering.de (Gerhard Haering)
Date: Fri, 25 Apr 2003 13:33:38 +0200
Subject: [Catalog-sig] PyPI optimization?
In-Reply-To: <200304252100.58072.richardjones@optushome.com.au>
References: <3EA886F9.9000805@ghaering.de> <200304251134.20212.richardjones@optushome.com.au> <20030425100712.GB26242@xs4all.nl> <200304252100.58072.richardjones@optushome.com.au>
Message-ID: <3EA91D12.4000004@ghaering.de>

Richard Jones wrote:
> On Friday 25 April 2003 08:07 pm, Thomas Wouters wrote:
> 
>>Well, the machine is a lot heavier loaded now than it was before PyPI was
>>really used; the load used to be ~0.05, it's now hovering around 0.8,
>>sometimes as high as 1.5. That isn't terribly high, though, as this is a
>>dual CPU machine, and Apache for one isn't slowed down by it. I believe
>>it's PyPI doing heavy I/O, or perhaps some form of locking, as the python
>>processes aren't using that much CPU either.
> 
> 
> I haven't looked at the hits that PyPI is getting - does creosote have any web 
> stats automatically generated?
> 
> Perhaps it would be a good idea to switch to an RDBMS that is more 
> multi-user-friendly. Gerhard, is your offer to do this still open? 

Yes, I'd be glad to add this capability to PyPI. It'd help me a little 
if you could send me a dump of the current database, but it's not 
strictly necessary as I could create random test data myself.

> The 
> backend of pypi is all in the store module, and it's quite simple. It'll 
> probably work out of the box on postgresql/mysql.

 From a cursory look, it wouldn't be much work.

Once PyPI is more heavily used, we might also want to get away from the 
dependency on CGI, using something like Quixote (which can run under 
Apache using SCGI/mod_python or standalone with a Medusa or Twisted 
backend, and it can run as plain CGI as well). But first things first.

-- Gerhard



From mcfletch@rogers.com  Mon Apr 28 07:13:25 2003
From: mcfletch@rogers.com (Mike C. Fletcher)
Date: Mon, 28 Apr 2003 02:13:25 -0400
Subject: [Catalog-sig] Questions regarding PyPi usage (user feedback)
Message-ID: <3EACC685.4090305@rogers.com>

In beginning to use PyPi this evening I've come up with a set of 
questions that I'd guess will be commonly asked when people start using 
the engine, as I've had them myself (I've also tried to glean the 
answers and add them after the questions):

    * What should the keyword format be?
          o Comma-separated list of keywords
          o Nice to have sample on the input page or in a tutorial to
            give an idea of desired length, format and depth, for
            instance, here's what I'm planning for PyOpenGL:
                + 'Graphics,3D,OpenGL,GLU,GLUT,GLE,GLX,WGL,TOGL,EXT,ARB,Mesa'
    * What should the classifiers format be?
          o Python list of SourceForge-style classifier strings.
          o How does one specify this in a .cfg file?
                + I assume as a set of multiple key=value sets?
    * Boilerplate code for determining download URL for SourceForge?
          o This seems to be used as "a website from which you can
            download", rather than a URL to a package which can be
            downloaded.  Is there another attribute which means e.g.
            (URL from which to download binary Python 2.2 Win32 package)?
                + It would require some internal knowledge of distutils
                  to determine what the final filename will be for a
                  particular version, then some code to create the
                  download URL from that information, and that would be
                  best done by someone who knows distutils.
    * What is the definition of "maintainer" vs. "author" (in PyPi) vs.
      "packager" (used elsewhere in distutils world IIRC)?
          o Author -- copyright holder(s)?
          o Maintainer -- current developers?
          o Packager -- one who takes source to build binary for
            package, but is neither author nor maintainer?
    * How does one test for format and completeness without attempting
      to register the package?
          o Is there a scrub-server? A flag to say "just testing"?
          o It looks as though test is done before running register. 
          o Don't see a "testing" flag in quick scan.
    * How does one specify Python version for a particular package (i.e.
      built for Python 2.2, but not 1.5.2)?
          o You don't.
    * How does one include a public key signature for a package?
          o You don't as-of-yet.
    * How does one specify format (e.g. Src .zip, Src .tgz, Binary, Src
      RPM, etceteras)
          o You don't.

Anyway, that's all the questions I've had so far this evening.  Thanks 
all for working on the project. Hope this was helpful in some way,
Mike

_______________________________________
  Mike C. Fletcher
  Designer, VR Plumber, Coder
  http://members.rogers.com/mcfletch/





From richardjones@optushome.com.au  Mon Apr 28 13:09:01 2003
From: richardjones@optushome.com.au (Richard Jones)
Date: Mon, 28 Apr 2003 22:09:01 +1000
Subject: [Catalog-sig] Questions regarding PyPi usage (user feedback)
In-Reply-To: <3EACC685.4090305@rogers.com>
References: <3EACC685.4090305@rogers.com>
Message-ID: <200304282209.06510.richardjones@optushome.com.au>

--Boundary-02=_inRr+MI6RS5flwP
Content-Type: text/plain;
  charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Description: signed data
Content-Disposition: inline

On Monday 28 April 2003 04:13 pm, Mike C. Fletcher wrote:
>     * What should the keyword format be?
>           o Comma-separated list of keywords
>           o Nice to have sample on the input page or in a tutorial to
>             give an idea of desired length, format and depth, for
>             instance, here's what I'm planning for PyOpenGL:
>                 +
> 'Graphics,3D,OpenGL,GLU,GLUT,GLE,GLX,WGL,TOGL,EXT,ARB,Mesa'

Undefined. At the moment, you'll get a substring seach based on the terms y=
ou=20
enter in the search page. Nothing has been implemented beyond that. To be=20
honest, I'm not sure the keywords make sense in a classifiers world, but=20
classifiers are too new to just throw out keywords yet. You'll note that=20
"keywords" isn't mentioned in the current development documentation any mor=
e.

To balance this, the list of classifiers is completely under our control.=20
Package authors simply need to ask for new classifiers to be added if they'=
re=20
needed. This is not stated anywhere though, and needs to be... ideas?


> * What should the classifiers format be?
>           o Python list of SourceForge-style classifier strings.

http://www.python.org/dev/doc/devel/dist/setup-script.html#SECTION000360000=
000000000000


>           o How does one specify this in a .cfg file?
>                 + I assume as a set of multiple key=3Dvalue sets?

I have no idea. I've never used one :)


>     * Boilerplate code for determining download URL for SourceForge?
>           o This seems to be used as "a website from which you can
>             download", rather than a URL to a package which can be
>             downloaded.  Is there another attribute which means e.g.
>             (URL from which to download binary Python 2.2 Win32 package)?
>                 + It would require some internal knowledge of distutils
>                   to determine what the final filename will be for a
>                   particular version, then some code to create the
>                   download URL from that information, and that would be
>                   best done by someone who knows distutils.

The whole issue of download URL is a big question that has yet to be answer=
ed.=20
As far as I'm concerned, the download URL can mean whatever the package=20
author wants it to mean. Until we have some automatic download/install syst=
em=20
in place, that's all it _can_ be.

Mostly the attribute was added in this release so that it was in place and=
=20
pepole started asking questions about it (and hopefully someone finishes of=
f=20
one of the many auto-download/install implementations out there :)


>     * What is the definition of "maintainer" vs. "author" (in PyPi) vs.
>       "packager" (used elsewhere in distutils world IIRC)?
>           o Author -- copyright holder(s)?
>           o Maintainer -- current developers?
>           o Packager -- one who takes source to build binary for
>             package, but is neither author nor maintainer?

See http://www.python.org/dev/doc/devel/dist/package-index.html in the seco=
nd=20
last paragraph for a description of what Owner and Maintainer mean in PyPI=
=20
land. Definitely quite separate from Author and Packager. Well, I think the=
y=20
are...


>     * How does one test for format and completeness without attempting
>       to register the package?
>           o Is there a scrub-server? A flag to say "just testing"?

Use the "--dry-run" option that most (all?) setup commands support:

   python setup.py register --dry-run


>     * How does one specify Python version for a particular package (i.e.
>       built for Python 2.2, but not 1.5.2)?
>           o You don't.
>     * How does one include a public key signature for a package?
>           o You don't as-of-yet.

These responses are correct.


>     * How does one specify format (e.g. Src .zip, Src .tgz, Binary, Src
>       RPM, etceteras)
>           o You don't.

This is correct, and I'm not sure it's in the scope of PyPI - possibly in t=
he=20
yet-to-be-implemented download/install functionality.


   Richard

ps. it's late, I'm tired, I hope I've answered your questions adequately :)

--Boundary-02=_inRr+MI6RS5flwP
Content-Type: application/pgp-signature
Content-Description: signature

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (GNU/Linux)

iD8DBQA+rRnirGisBEHG6TARAvDsAJ4rLqve7C1S47dhF+wUQ7eferTsxQCbBsTA
3qu4gN2Se6gwoOvMq230jNs=
=U41O
-----END PGP SIGNATURE-----

--Boundary-02=_inRr+MI6RS5flwP--



From akuchlin@mems-exchange.org  Tue Apr 29 18:17:48 2003
From: akuchlin@mems-exchange.org (Andrew Kuchling)
Date: Tue, 29 Apr 2003 13:17:48 -0400
Subject: [Catalog-sig] Re: PEP 314: Updating the package metadata format
In-Reply-To: <wuhl3xm4.fsf@python.net>
References: <20030412131123.GA20645@nyman.amk.ca> <wuhl3xm4.fsf@python.net>
Message-ID: <20030429171748.GA8652@ute.mems-exchange.org>

On Wed, Apr 23, 2003 at 07:57:39PM +0200, Thomas Heller wrote:
>(see my embedded comments)

Changes applied to PEP 314; thanks!

>I have a use case for Conflicts with version numbers.
>ctypes was a couple of modules up to version 0.4.x, and is a package
>starting with 0.6.x.

Another piece of evidence: according to
http://www.rpm.org/max-rpm/s1-rpm-depend-manual-dependencies.html, RPM
supports version numbers in the Conflicts header.  Current versions of
RPM also support versions in the Obsoletes header, so I've changed PEP
314 to do the same.

--amk




From akuchlin@mems-exchange.org  Tue Apr 29 18:36:48 2003
From: akuchlin@mems-exchange.org (Andrew Kuchling)
Date: Tue, 29 Apr 2003 13:36:48 -0400
Subject: [Catalog-sig] PEP 314: latest draft
Message-ID: <E19AZ28-0002Ib-00@ute.mems-exchange.org>

Here's the current draft of PEP 314.  A number of XXX comments have
been removed; version declarations can now be included in the
Conflicts and Obsoletes fields; the Classifiers field from PEP 301 
is now included.

An open issue: with the addition of Classifiers, should the 
Platforms and License fields be deprecated and/or removed?  

(My vote is to remove Platforms and License, ignoring them when
they're supplied to distutils.core.setup(), and warning the user when
they run "sdist" and those keywords are supplied.)

--amk

PEP: 314
Title: Metadata for Python Software Packages v1.1
Version: $Revision: 1.8 $
Last-Modified: $Date: 2003/04/29 17:31:16 $
Author: A.M. Kuchling <amk@amk.ca>
Status: Draft
Type: Standards Track
Content-type: text/plain
Created: 12-Apr-2003
Python-Version: 2.3
Post-History: 29-Apr-2003
Replaces: 243

Introduction

   This PEP describes a mechanism for adding metadata to Python
   packages.  It includes specifics of the field names, and their
   semantics and usage.

   This document specifies version 1.1 of the metadata format.
   Version 1.0 is specified in PEP 241.


Including Metadata in Packages

    The Distutils 'sdist' command will extract the metadata fields
    from the arguments and write them to a file in the generated
    zipfile or tarball.  This file will be named PKG-INFO and will be
    placed in the top directory of the source distribution (where the
    README, INSTALL, and other files usually go).

    Developers may not provide their own PKG-INFO file.  The "sdist"
    command will, if it detects an existing PKG-INFO file, terminate
    with an appropriate error message.  This should prevent confusion
    caused by the PKG-INFO and setup.py files being out of sync.

    The PKG-INFO file format is a single set of RFC-822 headers
    parseable by the rfc822.py module.  The field names listed in the
    following section are used as the header names.  There's no 
    extension mechanism in this simple format; the Catalog and Distutils
    SIGs will aim at getting a more flexible format ready for Python 2.2.
    

Fields

    This section specifies the names and semantics of each of the
    supported metadata fields.
 
    Fields marked with "(Multiple use)" may be specified multiple
    times in a single PKG-INFO file.  Other fields may only occur
    once in a PKG-INFO file.  Fields marked with "(optional)" are
    not required to appear in a valid PKG-INFO file, all other
    fields must be present.

    Metadata-Version

      Version of the file format; currently "1.0" and "1.1" are the
      only legal values here.

      Example: 

           Metadata-Version: 1.1

    Name

      The name of the package.  

      Example: 

          Name: BeagleVote
      
    Version

      A string containing the package's version number.  This
      field should be parseable by one of the Version classes
      (StrictVersion or LooseVersion) in the distutils.version
      module.

      Example: 

          Version: 1.0a2
      
    Platform (multiple use)

      A comma-separated list of platform specifications, summarizing
      the operating systems supported by the package.  The major
      supported platforms are listed below, but this list is
      necessarily incomplete.

            POSIX, MacOS, Windows, BeOS, PalmOS.

      Binary distributions will use the Supported-Platform field in
      their metadata to specify the OS and CPU for which the binary
      package was compiled.  The semantics of the Supported-Platform
      are not specified in this PEP.

      Example: 

          Platform: POSIX, Windows
      
    Summary

      A one-line summary of what the package does.

      Example: 

          Summary: A module for collecting votes from beagles.
      
    Description (optional)

      A longer description of the package that can run to several
      paragraphs.  (Software that deals with metadata should not
      assume any maximum size for this field, though one hopes that
      people won't include their instruction manual as the
      long-description.)

      Example: 
      
          Description: This module collects votes from beagles
                       in order to determine their electoral wishes.
                       Do NOT try to use this module with basset hounds;
                       it makes them grumpy.
      
    Keywords (optional)

      A list of additional keywords to be used to assist searching
      for the package in a larger catalog.

      Example: 

          Keywords: dog puppy voting election
      
    Home-page (optional)

      A string containing the URL for the package's home page.

      Example: 

          Home-page: http://www.example.com/~cschultz/bvote/
      
    Author (optional)

      A string containing at a minimum the author's name.  Contact
      information can also be added, separating each line with
      newlines.

      Example: 

          Author: C. Schultz
                  Universal Features Syndicate
                  Los Angeles, CA
      
    Author-email

      A string containing the author's e-mail address.  It can contain
      a name and e-mail address in the legal forms for a RFC-822
      'From:' header.  It's not optional because cataloging systems
      can use the e-mail portion of this field as a unique key
      representing the author.  A catalog might provide authors the
      ability to store their GPG key, personal home page, and other
      additional metadata *about the author*, and optionally the
      ability to associate several e-mail addresses with the same
      person.  Author-related metadata fields are not covered by this
      PEP.  

      Example: 

          Author-email: "C. Schultz" <cschultz@example.com>
      
    License
      
      A string selected from a short list of choices, specifying the
      license covering the package.  Some licenses result in the
      software being freely redistributable, so packagers and
      resellers can automatically know that they're free to
      redistribute the software.  Other licenses will require
      a careful reading by a human to determine how the software can be
      repackaged and resold.

      The choices are:

        Artistic, BSD, DFSG, GNU GPL, GNU LGPL, "MIT", 
        Mozilla PL, "public domain", Python, Qt PL, Zope PL, unknown,
        nocommercial, nosell, nosource, shareware, other

      Definitions of some of the licenses are:

       DFSG           The license conforms to the Debian Free Software
                      Guidelines, but does not use one of the other
                      DFSG conforming licenses listed here. 
                      More information is available at:
                      http://www.debian.org/social_contract#guidelines

       Python         Python 1.6 or higher license.  Version 1.5.2 and 
                      earlier are under the MIT license.

       public domain  Software is public domain, not copyrighted.
       unknown        Status is not known 
       nocommercial   Free private use but commercial use not permitted 
       nosell         Free use but distribution for profit by arrangement 
       nosource       Freely distributable but no source code 
       shareware      Payment is requested if software is used
       other          General category for other non-DFSG licenses 

      Some of these licenses can be interpreted to mean the software is 
      freely redistributable.  The list of redistributable licenses is:

      Artistic, BSD, DFSG, GNU GPL, GNU LGPL, "MIT", 
      Mozilla PL, "public domain", Python, Qt PL, Zope PL, 
      nosource, shareware

      Note that being redistributable does not mean a package
      qualifies as free software, 'nosource' and 'shareware' being
      examples.

      Example: 

          License: MIT

    Classifier (multiple use)

      Each entry is a string giving a single classification value
      for the package.  Classifiers are described in PEP 301 [1].

      Examples:

        Classifier: Development Status :: 4 - Beta
        Classifier: Environment :: Console (Text Based)

      
    Requires (multiple use)
      
      Each entry contains a string describing some other component or
      module required by this package. 

      The format of a requirement string is simple: an arbitrary
      sequence of characters, optionally followed by a version
      declaration within parentheses.  Leading and trailing whitespace
      are ignored, and whitespace within the string is normalized to a
      single space.

      A version declaration is a series of conditional operators and
      version numbers, separated by commas.  Conditional operators
      must be one of "<", ">", "<=", ">=", "==", and "!=".  Version
      numbers must be in the format accepted by the
      distutils.version.StrictVersion class: two or three
      dot-separated numeric components, with an optional "pre-release"
      tag on the end consisting of the letter 'a' or 'b' followed by a
      number.  Example version numbers are "1.0", "2.3a2", "1.3.99", 

      Any number of conditional operators can be specified, e.g.
      the string ">1.0, !=1.3.4, <2.0" is a legal version declaration.

      All of the following are possible requirement strings: "rfc822",
      "zlib (>=1.1.4)", "XML parser".

      There's no canonical list of what strings should be used; the
      Python community is left to choose its own standards.

      Example: 

          Requires: re
          Requires: sys
          Requires: zlib
          Requires: pyexpat (>1.0)
          Requires: DB-API 2.0 module
       
    Provides (multiple use)

      Each entry contains a string describing a component or
      module that will be provided by this package once it is
      installed.  These strings should match the ones used in
      Requirements fields.  Version declarations cannot be supplied;
      instead the package's version number will be used.

      Example: 

          Provides: xml
          Provides: xml.utils
          Provides: xml.utils.iso8601
          Provides: xml.dom

    Obsoletes (multiple use)

      Each entry contains a string describing a component or module
      that this package renders obsolete, meaning that the two packages
      should not be installed at the same time.  Version declarations
      can be supplied.  

      The most common use of this field will be in case a package name
      changes, e.g. Gorgon 2.3 gets subsumed into Torqued Python 1.0.
      When you install Torqued Python, the Gorgon package should be
      removed.
      
      Example:

          Obsoletes: Gorgon

    Conflicts (multiple use)

      Each entry contains a string describing a component or module
      that conflicts with this package, meaning that the two packages
      should not be installed at the same time.  Version declarations
      can be supplied.  

      Conflict resolution probably isn't very important for Python
      programs, because few extensions will cause problems for other
      extensions, unless they happen to be using the same package
      name.  This field name is being defined here for future use.

          Conflicts: Gorgon


Summary of Differences From PEP 241

    * Metadata-Version is now 1.1.

    * Added the Classifiers field from PEP 301.

    * Added fields: Requires, Provides, Obsoletes, Conflicts.


Open issues

    With the addition of the 'Classifiers' field,  should the Platform 
    and License fields be removed?


Acknowledgements

    None yet.        


References

    [1] PEP 301
        http://www.python.org/peps/pep-0301.html


Copyright

    This document has been placed in the public domain.


From richardjones@optushome.com.au  Tue Apr 29 23:07:37 2003
From: richardjones@optushome.com.au (Richard Jones)
Date: Wed, 30 Apr 2003 08:07:37 +1000
Subject: [Catalog-sig] PEP 314: latest draft
In-Reply-To: <E19AZ28-0002Ib-00@ute.mems-exchange.org>
References: <E19AZ28-0002Ib-00@ute.mems-exchange.org>
Message-ID: <200304300807.37255.richardjones@optushome.com.au>

--Boundary-02=_pevr+VZq0cMS37J
Content-Type: text/plain;
  charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Description: signed data
Content-Disposition: inline

On Wednesday 30 April 2003 03:36 am, Andrew Kuchling wrote:
> An open issue: with the addition of Classifiers, should the
> Platforms and License fields be deprecated and/or removed?
>=20
> (My vote is to remove Platforms and License, ignoring them when
> they're supplied to distutils.core.setup(), and warning the user when
> they run "sdist" and those keywords are supplied.)

I've had instances where users have included the entirety of their license =
in=20
the license field. The question is whether that's appropriate. I also vote=
=20
for removing Platforms and License.

It also seems strange that the PKG-INFO format it described even though tha=
t's=20
not the human-editable version. It would seem to be a good idea to at least=
=20
describe the format of the input data (ie. setup.cfg and setup.py).


>     The PKG-INFO file format is a single set of RFC-822 headers
>     parseable by the rfc822.py module.  The field names listed in the
>     following section are used as the header names.  There's no
>     extension mechanism in this simple format; the Catalog and Distutils
>     SIGs will aim at getting a more flexible format ready for Python 2.2.

Really? :)



>     Description (optional)
>
>       A longer description of the package that can run to several
>       paragraphs.  (Software that deals with metadata should not
>       assume any maximum size for this field, though one hopes that
>       people won't include their instruction manual as the
>       long-description.)

I believe we should ask for adherence to the ReST format here. Simple=20
paragraphs for most descriptions and use of ReST formatting if you want to=
=20
get fancy. At the moment I'm <pre> formatting the description in PyPI becau=
se=20
I don't know whether I can trust the input data.


>     Home-page (optional)
>
>       A string containing the URL for the package's home page.
>
>       Example:
>
>           Home-page: http://www.example.com/~cschultz/bvote/

Download URL?


>     Author (optional)
>
>       A string containing at a minimum the author's name.  Contact
>       information can also be added, separating each line with
>       newlines.
>
>       Example:
>
>           Author: C. Schultz
>                   Universal Features Syndicate
>                   Los Angeles, CA

PyPI will have to be modified to handle this spec :)



    Richard

--Boundary-02=_pevr+VZq0cMS37J
Content-Type: application/pgp-signature
Content-Description: signature

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (GNU/Linux)

iD8DBQA+rveprGisBEHG6TARAmKcAJ9K38hESr3dzfaZVPfBBsweMsZYwQCdEzxO
oR20R0cj8sM/McuqrZjeVS4=
=7R5c
-----END PGP SIGNATURE-----

--Boundary-02=_pevr+VZq0cMS37J--



From acapnotic@twistedmatrix.com  Wed Apr 30 01:14:05 2003
From: acapnotic@twistedmatrix.com (Kevin Turner)
Date: 29 Apr 2003 17:14:05 -0700
Subject: [Catalog-sig] PEP 314: latest draft
In-Reply-To: <E19AZ28-0002Ib-00@ute.mems-exchange.org>
References: <E19AZ28-0002Ib-00@ute.mems-exchange.org>
Message-ID: <1051661643.28927.882.camel@troglodyte.funhouse>

--=-p9Lgz16q1unbkygQqKbS
Content-Type: text/plain
Content-Transfer-Encoding: quoted-printable

On Tue, 2003-04-29 at 10:36, Andrew Kuchling wrote:
> An open issue: with the addition of Classifiers, should the=20
> Platforms and License fields be deprecated and/or removed? =20

Since License is not optional, it might be good to retain it explicitly
in the interface.  Otherwise you either end up distributing packages
without a stated license (which is bad), or you have to screen the list
of Classifiers for required elements.  The documentation for Classifiers
becomes more complicated as well, "multiple use but must include at
least one of ..."

You could recommend that the value used for the License field be the
final part of a 'License ::' classifier, for easy mapping between the
two.

--=20
The moon is waning crescent, 3.0% illuminated, 27.9 days old.

--=-p9Lgz16q1unbkygQqKbS
Content-Type: application/pgp-signature; name=signature.asc
Content-Description: This is a digitally signed message part

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (GNU/Linux)

iD8DBQA+rxVKh3hqIoukqUQRAjTcAJ9D8hqSYYoHh0oa5fO6fVCgsDX9PwCfdbSx
3zYlg8Rat5GZfamzBxohHfs=
=kT2c
-----END PGP SIGNATURE-----

--=-p9Lgz16q1unbkygQqKbS--