]> git.decadent.org.uk Git - dak.git/blobdiff - dakweb/queries/source.py
dakweb: Allow to query for all source packages
[dak.git] / dakweb / queries / source.py
old mode 100644 (file)
new mode 100755 (executable)
index d65283f..36344b7
@@ -10,9 +10,11 @@ from dakweb.webregister import QueryRegister
 @bottle.route('/dsc_in_suite/<suite>/<source>')
 def dsc_in_suite(suite=None, source=None):
     """
-    Find all dsc files for a given source package name in a given suite.
+    dsc_in_suite(suite, source)
+
+    returns: list of dictionaries
 
-    suite and source must be supplied
+    Find all dsc files for a given source package name in a given suite.
     """
     if suite is None:
         return bottle.HTTPError(503, 'Suite not specified.')
@@ -27,11 +29,67 @@ def dsc_in_suite(suite=None, source=None):
     q = q.filter(PoolFile.filename.endswith('.dsc'))
     ret = []
     for p in q:
-        ret.append({'version': p.source.version,
+        ret.append({'version':   p.source.version,
                     'component': p.poolfile.component.component_name,
-                    'filename': p.poolfile.filename})
+                    'filename':  p.poolfile.filename,
+                    'filesize':  p.poolfile.filesize,
+                    'sha256sum': p.poolfile.sha256sum})
+
+    s.close()
 
     return json.dumps(ret)
 
 QueryRegister().register_path('/dsc_in_suite', dsc_in_suite)
 
+
+@bottle.route('/sources_in_suite/<suite>')
+def sources_in_suite(suite=None):
+    """
+    sources_in_suite(suite)
+
+    returns: list of dictionaries
+
+    Returns all source packages and their versions in a given suite.
+    """
+
+    if suite is None:
+        return bottle.HTTPError(503, 'Suite not specified.')
+
+    s = DBConn().session()
+    q = s.query(DBSource).join(Suite, DBSource.suites)
+    q = q.filter(or_(Suite.suite_name == suite, Suite.codename == suite))
+    ret = []
+    for p in q:
+        ret.append({'source':    p.source,
+                    'version':   p.version})
+
+    s.close()
+
+    return json.dumps(ret)
+
+QueryRegister().register_path('/sources_in_suite', sources_in_suite)
+
+
+@bottle.route('/all_sources')
+def sources_in_suite():
+    """
+    all_sources()
+
+    returns: list of dictionaries
+
+    Returns all source packages and their versions known to the archive
+    (this includes NEW).
+    """
+
+    s = DBConn().session()
+    q = s.query(DBSource)
+    ret = []
+    for p in q:
+        ret.append({'source':    p.source,
+                    'version':   p.version})
+
+    s.close()
+
+    return json.dumps(ret)
+
+QueryRegister().register_path('/all_sources', all_sources)