X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=dakweb%2Fqueries%2Fsuite.py;h=5446f699b8f622d39a0bfbf1b7343de979bbc325;hb=80108bebf0307acfc27d586e6faffe193199b14b;hp=1e7f2f92897769b74a7834983590112a5be70b9c;hpb=9161d6b2afaa90adaa1dbc4e5a9b34f32b31317b;p=dak.git diff --git a/dakweb/queries/suite.py b/dakweb/queries/suite.py index 1e7f2f92..5446f699 100644 --- a/dakweb/queries/suite.py +++ b/dakweb/queries/suite.py @@ -1,4 +1,11 @@ -#!/usr/bin/python +""" Suite related queries + +@contact: Debian FTPMaster +@copyright: 2014 Mark Hymers +@license: GNU General Public License version 2 or later + +@newfield maps: Mapping, Mappings +""" import bottle import json @@ -6,14 +13,25 @@ import json from daklib.dbconn import DBConn, Suite from dakweb.webregister import QueryRegister + @bottle.route('/suites') def suites(): """ - suites() + Give information about all known suites. - returns: list of dictionaries + @maps: name maps to Suite: in the release file + @maps: codename maps to Codename: in the release file. + @maps: dakname is an internal name and should not be relied upon. + + @rtype: list of dictionaries + @return: Dictionaries made out of + - name + - codename + - dakname + - archive + - architectures + - components - Give information about all known suites """ s = DBConn().session() @@ -21,13 +39,81 @@ def suites(): q = q.order_by(Suite.suite_name) ret = [] for p in q: - ret.append({'name': p.suite_name, + ret.append({'name': p.release_suite_output, 'codename': p.codename, + 'dakname': p.suite_name, 'archive': p.archive.archive_name, 'architectures': [x.arch_string for x in p.architectures], 'components': [x.component_name for x in p.components]}) + s.close() + return json.dumps(ret) QueryRegister().register_path('/suites', suites) +@bottle.route('/suite/') +def suite(suite=None): + """ + Gives information about a single suite. Note that this routine will look + up a suite first by the main suite_name, but then also by codename if no + suite is initially found. It can therefore be used to canonicalise suite + names. + + @type suite: string + @param suite: Name or codename of the suite. + @see: L{I{suites}} on how to receive a list of valid suites. + + @maps: name maps to Suite: in the release file + @maps: codename maps to Codename: in the release file. + @maps: dakname is an internal name and should not be relied upon. + + @rtype: dictionary + @return: A dictionary of + - name + - codename + - dakname + - archive + - architectures + - components + """ + + if suite is None: + return bottle.HTTPError(503, 'Suite not specified.') + + # TODO: We should probably stick this logic into daklib/dbconn.py + so = None + + s = DBConn().session() + q = s.query(Suite) + q = q.filter(Suite.suite_name == suite) + + if q.count() > 1: + # This would mean dak is misconfigured + s.close() + return bottle.HTTPError(503, 'Multiple suites found: configuration error') + elif q.count() == 1: + so = q[0] + else: + # Look it up by suite_name + q = s.query(Suite).filter(Suite.codename == suite) + if q.count() > 1: + # This would mean dak is misconfigured + s.close() + return bottle.HTTPError(503, 'Multiple suites found: configuration error') + elif q.count() == 1: + so = q[0] + + if so is not None: + so = {'name': so.release_suite_output, + 'codename': so.codename, + 'dakname': so.suite_name, + 'archive': so.archive.archive_name, + 'architectures': [x.arch_string for x in so.architectures], + 'components': [x.component_name for x in so.components]} + + s.close() + + return json.dumps(so) + +QueryRegister().register_path('/suite', suite)