[Catalog-sig] PKG-INFO exports?

A.M. Kuchling amk@amk.ca
Wed, 16 Apr 2003 09:18:23 -0400


--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--