1 """ Queries related to source packages
3 @contact: Debian FTPMaster <ftpmaster@debian.org>
4 @copyright: 2014 Mark Hymers <mhy@debian.org>
5 @copyright: 2014 Joerg Jaspert <joerg@debian.org>
6 @license: GNU General Public License version 2 or later
9 from sqlalchemy import or_
13 from daklib.dbconn import DBConn, DBSource, Suite, DSCFile, PoolFile
14 from dakweb.webregister import QueryRegister
17 @bottle.route('/dsc_in_suite/<suite>/<source>')
18 def dsc_in_suite(suite=None, source=None):
20 Find all dsc files for a given source package name in a given suite.
25 @param suite: Name of the suite.
26 @see: L{I{suites}<dakweb.queries.suite.suites>} on how to receive a list of valid suites.
29 @param source: Source package to query for.
31 @rtype: list of dictionaries
32 @return: Dictionaries made out of
40 return bottle.HTTPError(503, 'Suite not specified.')
42 return bottle.HTTPError(503, 'Source package not specified.')
44 s = DBConn().session()
45 q = s.query(DSCFile).join(PoolFile)
46 q = q.join(DBSource).join(Suite, DBSource.suites)
47 q = q.filter(or_(Suite.suite_name == suite, Suite.codename == suite))
48 q = q.filter(DBSource.source == source)
49 q = q.filter(PoolFile.filename.endswith('.dsc'))
52 ret.append({'version': p.source.version,
53 'component': p.poolfile.component.component_name,
54 'filename': p.poolfile.filename,
55 'filesize': p.poolfile.filesize,
56 'sha256sum': p.poolfile.sha256sum})
60 return json.dumps(ret)
62 QueryRegister().register_path('/dsc_in_suite', dsc_in_suite)
65 @bottle.route('/sources_in_suite/<suite>')
66 def sources_in_suite(suite=None):
68 Returns all source packages and their versions in a given suite.
73 @param suite: Name of the suite.
74 @see: L{I{suites}<dakweb.queries.suite.suites>} on how to receive a list of valid suites.
76 @rtype: list of dictionaries
77 @return: Dictionaries made out of
82 return bottle.HTTPError(503, 'Suite not specified.')
84 s = DBConn().session()
85 q = s.query(DBSource).join(Suite, DBSource.suites)
86 q = q.filter(or_(Suite.suite_name == suite, Suite.codename == suite))
89 ret.append({'source': p.source,
90 'version': p.version})
94 return json.dumps(ret)
96 QueryRegister().register_path('/sources_in_suite', sources_in_suite)
99 @bottle.route('/all_sources')
102 Returns all source packages and their versions known to the archive
105 @rtype: list of dictionaries
106 @return: Dictionaries made out of
111 s = DBConn().session()
112 q = s.query(DBSource)
115 ret.append({'source': p.source,
116 'version': p.version})
120 return json.dumps(ret)
122 QueryRegister().register_path('/all_sources', all_sources)