From: Mark Hymers Date: Wed, 8 Apr 2009 20:48:29 +0000 (+0100) Subject: Merge commit 'ftpmaster/master' X-Git-Url: https://git.decadent.org.uk/gitweb/?a=commitdiff_plain;h=ee00ba60099f741819f991db13b4d0fc65bdd960;hp=4dcdee470d9557fdd378fe31a03b743405c75669;p=dak.git Merge commit 'ftpmaster/master' --- diff --git a/daklib/dbconn.py b/daklib/dbconn.py index b532c351..bb7473dc 100755 --- a/daklib/dbconn.py +++ b/daklib/dbconn.py @@ -35,6 +35,7 @@ import os import psycopg2 +import psycopg2.extras import traceback from singleton import Singleton @@ -132,6 +133,17 @@ class DBConn(Singleton): return self.db_con.commit() ## Get functions + def __get_single_row(self, query, values): + c = self.db_con.cursor(cursor_factory=psycopg2.extras.DictCursor) + c.execute(query, values) + + if c.rowcount < 1: + return None + + res = c.fetchone() + + return res + def __get_single_id(self, query, values, cachename=None): # This is a bit of a hack but it's an internal function only if cachename is not None: @@ -316,6 +328,15 @@ class DBConn(Singleton): return self.__get_single_id("SELECT id FROM source s WHERE s.source=%(source)s AND s.version=%(version)s", {'source': source, 'version': version}, cachename='source') + def get_suite(self, suite): + if isinstance(suite, str): + suite_id = self.get_suite_id(suite.lower()) + elif type(suite) == int: + suite_id = suite + + return self.__get_single_row("SELECT * FROM suite WHERE id = %(id)s", + {'id': suite_id}) + def get_suite_version(self, source, suite): """ Returns database id for a combination of C{source} and C{suite}. @@ -576,3 +597,31 @@ class DBConn(Singleton): traceback.print_exc() c.execute("ROLLBACK") return False + +################################################################################ + +class Suite(object): + # This should be kept in sync with the suites table; + # we should probably just do introspection on the table + # (or maybe use an ORM) + _fieldnames = ['announce', 'changelogbase', 'codename', 'commentsdir', + 'copychanges', 'copydotdak', 'description', 'id', + 'label', 'notautomatic', 'origin', 'overridecodename', + 'overridesuite', 'policy_engine', 'priority', 'suite_name', + 'untouchable', 'validtime', 'version'] + + def __init_fields(self): + for k in self._fieldnames: + setattr(self, k, None) + + def __init__(self, suite): + self.__init_fields() + if suite is not None: + db_conn = DBConn() + suite_data = db_conn.get_suite(suite) + if suite_data is not None: + for k in suite_data.keys(): + setattr(self, k, suite_data[k]) + + +