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=-c;p=dak.git Merge commit 'ftpmaster/master' --- 010895777842727186f4e1f8e9c50f9fe19281d2 diff --combined daklib/dbconn.py index b4db8190,9801fdfd..46d4d3d5 --- 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}. @@@ -567,11 -546,15 +567,15 @@@ c.execute("BEGIN WORK") try: + arch_id = self.get_architecture_id(package['Architecture']) - # Remove any already existing recorded files for this package + # Remove any already existing recorded files for this package c.execute("""DELETE FROM pending_content_associations WHERE package=%(Package)s - AND version=%(Version)s""", package ) + AND version=%(Version)s + AND architecture=%(ArchID)s""", {'Package': package['Package'], + 'Version': package['Version'], + 'ArchID': arch_id}) for fullpath in fullpaths: (path, file) = os.path.split(fullpath) @@@ -583,40 -566,13 +587,41 @@@ path_id = self.get_or_set_contents_path_id(path) c.execute("""INSERT INTO pending_content_associations - (package, version, filepath, filename) - VALUES (%%(Package)s, %%(Version)s, '%d', '%d')""" % (path_id, file_id), - package ) + (package, version, architecture, filepath, filename) + VALUES (%%(Package)s, %%(Version)s, '%d', '%d', '%d')""" + % (arch_id, path_id, file_id), package ) + c.execute("COMMIT") return True except: 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]) + + +