123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- """ Suite related queries
- @contact: Debian FTPMaster <ftpmaster@debian.org>
- @copyright: 2014 Mark Hymers <mhy@debian.org>
- @license: GNU General Public License version 2 or later
- @newfield maps: Mapping, Mappings
- """
- import bottle
- import json
- from typing import Optional
- from daklib.dbconn import DBConn, Suite
- from dakweb.webregister import QueryRegister
- @bottle.route('/suites')
- def suites() -> str:
- """
- Give information about all known 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.
- :return: List of dictionaries made out of
- - name
- - codename
- - dakname
- - archive
- - architectures
- - components
- """
- s = DBConn().session()
- q = s.query(Suite)
- q = q.order_by(Suite.suite_name)
- ret = []
- for p in q:
- 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()
- bottle.response.content_type = 'application/json; charset=UTF-8'
- return json.dumps(ret)
- QueryRegister().register_path('/suites', suites)
- @bottle.route('/suite/<suite>')
- def suite(suite: Optional[str] = None) -> str:
- """
- 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.
- :param suite: Name or codename of the suite.
- :return: A dictionary of
- - name: maps to `Suite:` in the Release file
- - codename: maps to `Codename:` in the Release file
- - dakname: internal name that should not be relied upload
- - archive
- - architectures
- - components
- .. seealso:: :func:`~dakweb.queries.suite.suites` on how to receive a list of valid suites.
- """
- 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()
- bottle.response.content_type = 'application/json; charset=UTF-8'
- return json.dumps(so)
- QueryRegister().register_path('/suite', suite)
|