X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=daklib%2Fls.py;h=dacc23bab2edaec684c7baccae46c1fda6f04a3a;hb=02c7ef89254ade53e60797bb0be8c1de68b501d5;hp=aeb8cfcbb8b92eb7008d663a05e933b5f5666e06;hpb=7e8d23d26f453ea964cbc6c5c1e2de7d3dae14e9;p=dak.git diff --git a/daklib/ls.py b/daklib/ls.py index aeb8cfcb..dacc23ba 100644 --- a/daklib/ls.py +++ b/daklib/ls.py @@ -22,6 +22,8 @@ import sqlalchemy.sql as sql import daklib.daksql as daksql from daklib.dbconn import DBConn, session_wrapper +from collections import defaultdict + @session_wrapper def list_packages(packages, suites=None, components=None, architectures=None, binary_types=None, @@ -72,6 +74,40 @@ def list_packages(packages, suites=None, components=None, architectures=None, bi result = session.execute(query) for row in result: yield "{0} {1} {2}".format(row[t.c.package], row[t.c.version], row[t.c.architecture]) + elif format == "python": + c_architectures = daksql.string_agg(t.c.architecture, ',', order_by=[t.c.architecture_is_source.desc(), t.c.architecture]) + query = sql.select([t.c.package, + t.c.version, + t.c.display_suite, + c_architectures, + t.c.source, + t.c.source_version, + t.c.component]) \ + .where(where) \ + .group_by(t.c.package, + t.c.version, + t.c.display_suite, + t.c.source, + t.c.component, + t.c.source_version) + result = session.execute(query).fetchall() + + if len(result) == 0: + raise StopIteration + + val = lambda: defaultdict(val) + ret = val() + for row in result: + ret[row[t.c.package]] \ + [row[t.c.display_suite]] \ + [row[t.c.version]]={'component': row[t.c.component], + 'architectures': row[c_architectures].split(','), + 'source': row[t.c.source], + 'source_version': row[t.c.source_version] + } + + yield ret + return else: raise ValueError("Unknown output format requested.")