]> git.decadent.org.uk Git - dak.git/blob - dakweb/queries/source.py
dakweb: Allow to query for all source packages
[dak.git] / dakweb / queries / source.py
1 #!/usr/bin/python
2
3 from sqlalchemy import or_
4 import bottle
5 import json
6
7 from daklib.dbconn import DBConn, DBSource, Suite, DSCFile, PoolFile
8 from dakweb.webregister import QueryRegister
9
10 @bottle.route('/dsc_in_suite/<suite>/<source>')
11 def dsc_in_suite(suite=None, source=None):
12     """
13     dsc_in_suite(suite, source)
14
15     returns: list of dictionaries
16
17     Find all dsc files for a given source package name in a given suite.
18     """
19     if suite is None:
20         return bottle.HTTPError(503, 'Suite not specified.')
21     if source is None:
22         return bottle.HTTPError(503, 'Source package not specified.')
23
24     s = DBConn().session()
25     q = s.query(DSCFile).join(PoolFile)
26     q = q.join(DBSource).join(Suite, DBSource.suites)
27     q = q.filter(or_(Suite.suite_name == suite, Suite.codename == suite))
28     q = q.filter(DBSource.source == source)
29     q = q.filter(PoolFile.filename.endswith('.dsc'))
30     ret = []
31     for p in q:
32         ret.append({'version':   p.source.version,
33                     'component': p.poolfile.component.component_name,
34                     'filename':  p.poolfile.filename,
35                     'filesize':  p.poolfile.filesize,
36                     'sha256sum': p.poolfile.sha256sum})
37
38     s.close()
39
40     return json.dumps(ret)
41
42 QueryRegister().register_path('/dsc_in_suite', dsc_in_suite)
43
44
45 @bottle.route('/sources_in_suite/<suite>')
46 def sources_in_suite(suite=None):
47     """
48     sources_in_suite(suite)
49
50     returns: list of dictionaries
51
52     Returns all source packages and their versions in a given suite.
53     """
54
55     if suite is None:
56         return bottle.HTTPError(503, 'Suite not specified.')
57
58     s = DBConn().session()
59     q = s.query(DBSource).join(Suite, DBSource.suites)
60     q = q.filter(or_(Suite.suite_name == suite, Suite.codename == suite))
61     ret = []
62     for p in q:
63         ret.append({'source':    p.source,
64                     'version':   p.version})
65
66     s.close()
67
68     return json.dumps(ret)
69
70 QueryRegister().register_path('/sources_in_suite', sources_in_suite)
71
72
73 @bottle.route('/all_sources')
74 def sources_in_suite():
75     """
76     all_sources()
77
78     returns: list of dictionaries
79
80     Returns all source packages and their versions known to the archive
81     (this includes NEW).
82     """
83
84     s = DBConn().session()
85     q = s.query(DBSource)
86     ret = []
87     for p in q:
88         ret.append({'source':    p.source,
89                     'version':   p.version})
90
91     s.close()
92
93     return json.dumps(ret)
94
95 QueryRegister().register_path('/all_sources', all_sources)