From: Mark Hymers Date: Sat, 14 Mar 2009 15:51:53 +0000 (+0000) Subject: Merge commit 'ftpmaster/master' X-Git-Url: https://git.decadent.org.uk/gitweb/?a=commitdiff_plain;h=010895777842727186f4e1f8e9c50f9fe19281d2;hp=bfd9ceea8b12d7fecec317c86b4570336cc7aeb8;p=dak.git Merge commit 'ftpmaster/master' --- diff --git a/dak/init_db.py b/dak/init_db.py index af0a03b2..193eb08e 100755 --- a/dak/init_db.py +++ b/dak/init_db.py @@ -23,7 +23,7 @@ import psycopg2, sys import apt_pkg from daklib import utils -from daklib.DBConn import DBConn +from daklib.dbconn import DBConn from daklib.Config import Config ################################################################################ diff --git a/daklib/dbconn.py b/daklib/dbconn.py index 9801fdfd..46d4d3d5 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]) + + +