X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=daklib%2Fdbconn.py;h=78fb8f0ae6b33ddafc9af54b99edf3928e2acb22;hb=775db71739073cdcf99fd6a2f68883f1d0de1610;hp=4abfcc596f934fdefa52b4381d26a9e147bfc4f7;hpb=f499332d28e70463baa912b3f50d62a594bf5b04;p=dak.git diff --git a/daklib/dbconn.py b/daklib/dbconn.py index 4abfcc59..78fb8f0a 100755 --- a/daklib/dbconn.py +++ b/daklib/dbconn.py @@ -46,7 +46,7 @@ from inspect import getargspec import sqlalchemy from sqlalchemy import create_engine, Table, MetaData, Column, Integer -from sqlalchemy.orm import sessionmaker, mapper, relation +from sqlalchemy.orm import sessionmaker, mapper, relation, object_session from sqlalchemy import types as sqltypes # Don't remove this, we re-export the exceptions to scripts which import us @@ -193,6 +193,7 @@ def get_architecture(architecture, session=None): __all__.append('get_architecture') +# TODO: should be removed because the implementation is too trivial @session_wrapper def get_architecture_suites(architecture, session=None): """ @@ -209,13 +210,7 @@ def get_architecture_suites(architecture, session=None): @return: list of Suite objects for the given name (may be empty) """ - q = session.query(Suite) - q = q.join(SuiteArchitecture) - q = q.join(Architecture).filter_by(arch_string=architecture).order_by('suite_name') - - ret = q.all() - - return ret + return get_architecture(architecture, session).suites __all__.append('get_architecture_suites') @@ -2502,8 +2497,9 @@ SUITE_FIELDS = [ ('SuiteName', 'suite_name'), ('OverrideSuite', 'overridesuite')] class Suite(object): - def __init__(self, *args, **kwargs): - pass + def __init__(self, suite_name = None, version = None): + self.suite_name = suite_name + self.version = version def __repr__(self): return '' % self.suite_name @@ -2529,6 +2525,30 @@ class Suite(object): return "\n".join(ret) + def get_architectures(self, skipsrc=False, skipall=False): + """ + Returns list of Architecture objects + + @type skipsrc: boolean + @param skipsrc: Whether to skip returning the 'source' architecture entry + (Default False) + + @type skipall: boolean + @param skipall: Whether to skip returning the 'all' architecture entry + (Default False) + + @rtype: list + @return: list of Architecture objects for the given name (may be empty) + """ + + q = object_session(self).query(Architecture). \ + filter(Architecture.suites.contains(self)) + if skipsrc: + q = q.filter(Architecture.arch_string != 'source') + if skipall: + q = q.filter(Architecture.arch_string != 'all') + return q.order_by(Architecture.arch_string).all() + __all__.append('Suite') @session_wrapper @@ -2589,6 +2609,7 @@ __all__.append('get_suite') ################################################################################ +# TODO: remove SuiteArchitecture class class SuiteArchitecture(object): def __init__(self, *args, **kwargs): pass @@ -2598,6 +2619,7 @@ class SuiteArchitecture(object): __all__.append('SuiteArchitecture') +# TODO: should be removed because the implementation is too trivial @session_wrapper def get_suite_architectures(suite, skipsrc=False, skipall=False, session=None): """ @@ -2622,19 +2644,7 @@ def get_suite_architectures(suite, skipsrc=False, skipall=False, session=None): @return: list of Architecture objects for the given name (may be empty) """ - q = session.query(Architecture) - q = q.join(SuiteArchitecture) - q = q.join(Suite).filter_by(suite_name=suite) - - if skipsrc: - q = q.filter(Architecture.arch_string != 'source') - - if skipall: - q = q.filter(Architecture.arch_string != 'all') - - q = q.order_by('arch_string') - - return q.all() + return get_suite(suite, session).get_architectures(skipsrc, skipall) __all__.append('get_suite_architectures') @@ -2873,7 +2883,8 @@ class DBConn(object): def __setupmappers(self): mapper(Architecture, self.tbl_architecture, - properties = dict(arch_id = self.tbl_architecture.c.id)) + properties = dict(arch_id = self.tbl_architecture.c.id, + suites = relation(Suite, secondary=self.tbl_suite_architectures, backref='architectures', order_by='suite_name'))) mapper(Archive, self.tbl_archive, properties = dict(archive_id = self.tbl_archive.c.id,