From: Mark Hymers Date: Mon, 30 Mar 2009 07:08:47 +0000 (+0000) Subject: Merge commit 'ftpmaster/master' X-Git-Url: https://git.decadent.org.uk/gitweb/?p=dak.git;a=commitdiff_plain;h=317c2e8d618daddd49531c18a8367b533c2dd75c;hp=-c Merge commit 'ftpmaster/master' --- 317c2e8d618daddd49531c18a8367b533c2dd75c diff --combined daklib/dbconn.py index 46d4d3d5,b532c351..bb7473dc --- a/daklib/dbconn.py +++ b/daklib/dbconn.py @@@ -35,7 -35,6 +35,7 @@@ import os import psycopg2 +import psycopg2.extras import traceback from singleton import Singleton @@@ -133,17 -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: @@@ -328,15 -316,6 +328,15 @@@ 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}. @@@ -419,11 -398,11 +419,11 @@@ else: row = cursor.fetchone() - if row[1] != size or row[2] != md5sum: + if row[1] != int(size) or row[2] != md5sum: res = -2 else: - self.caches[cachename].SetValue(values, row[0]) + self.caches['files'].SetValue(values, row[0]) res = row[0] return res @@@ -597,31 -576,3 +597,31 @@@ 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]) + + +