1""" "Madison" interface
3@contact: Debian FTPMaster <ftpmaster@debian.org>
4@copyright: 2014 Ansgar Burchardt <ansgar@debian.org>
5@copyright: 2014 Joerg Jaspert <joerg@debian.org>
6@license: GNU General Public License version 2 or later
7"""
9import bottle
10import json
12from daklib.ls import list_packages
13from dakweb.webregister import QueryRegister
16@bottle.route('/madison')
17def madison():
18 r"""
19 Display information about `package`\ (s).
21 .. versionadded:: December 2014
23 @keyword package: Space separated list of packages.
24 @keyword a: only show info for specified architectures.
25 @keyword b: only show info for a binary type. I{deb/udeb/dsc}
26 @keyword c: only show info for specified component(s). I{main/contrib/non-free}
27 @keyword s: only show info for this suite.
28 @keyword S: show info for the binary children of source pkgs. I{true/false}
29 @keyword f: output json format. I{json}
31 :return: Text or Json format of the data
33 .. seealso:: :func:`~dakweb.queries.suite.suites` on how to receive a list of valid suites.
34 """
36 r = bottle.request
38 packages = r.query.get('package', '').split()
39 kwargs = dict()
41 architectures = r.query.get('a', None)
42 if architectures is not None:
43 kwargs['architectures'] = architectures.split(",")
44 binary_type = r.query.get('b', None)
45 if binary_type is not None:
46 kwargs['binary_types'] = [binary_type]
47 component = r.query.get('c', None)
48 if component is not None:
49 kwargs['components'] = component.split(",")
50 suite = r.query.get('s', None)
51 if suite is not None:
52 kwargs['suites'] = suite.split(",")
53 if 'S' in r.query:
54 kwargs['source_and_binary'] = True
55 format = r.query.get('f', None)
56 if format is not None:
57 kwargs['format'] = 'python'
59 result = list_packages(packages, **kwargs)
61 if format is None:
62 bottle.response.content_type = 'text/plain; charset=UTF-8'
63 for row in result:
64 yield row
65 yield "\n"
66 else:
67 bottle.response.content_type = 'application/json; charset=UTF-8'
68 yield json.dumps(list(result))
71QueryRegister().register_path('/madison', madison)