X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=daklib%2Fdbconn.py;h=b29137221672d7f698fd7459a1f12c0a2ff1c630;hb=1e1457bde3318c6605b4c97d4299803fdaf8e774;hp=34ec55fd97aa91b94a5c29587949e07645f37d47;hpb=a8fead1c5a9080ee18bc2438a740a81f721de046;p=dak.git diff --git a/daklib/dbconn.py b/daklib/dbconn.py index 34ec55fd..b2913722 100755 --- a/daklib/dbconn.py +++ b/daklib/dbconn.py @@ -35,7 +35,6 @@ import os import psycopg2 -import psycopg2.extras import traceback from singleton import Singleton @@ -133,17 +132,6 @@ 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: @@ -215,8 +203,8 @@ class DBConn(Singleton): Returns database id for given override C{type}. Results are kept in a cache during runtime to minimize database queries. - @type type: string - @param type: The name of the override type + @type override_type: string + @param override_type: The name of the override type @rtype: int @return: the database id for the given override type @@ -328,15 +316,6 @@ 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}. @@ -419,11 +398,11 @@ class DBConn(Singleton): 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 @@ -521,10 +500,10 @@ class DBConn(Singleton): @type bin_id: int @param bin_id: the id of the binary - @type fullpath: string - @param fullpath: the path of the file being associated with the binary + @type fullpaths: list + @param fullpaths: the list of paths of the file being associated with the binary - @return True upon success + @return: True upon success """ c = self.db_con.cursor() @@ -535,6 +514,8 @@ class DBConn(Singleton): for fullpath in fullpaths: (path, file) = os.path.split(fullpath) + if path.startswith( "./" ): + path = path[2:] # Get the necessary IDs ... file_id = self.get_or_set_contents_file_id(file) path_id = self.get_or_set_contents_path_id(path) @@ -560,18 +541,22 @@ class DBConn(Singleton): @type fullpaths: list @param fullpaths: the list of paths of the file being associated with the binary - @return True upon success + @return: True upon success """ c = self.db_con.cursor() 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,41 +568,13 @@ class DBConn(Singleton): 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) - print suite_data - if suite_data is not None: - for k in suite_data.keys(): - setattr(self, k, suite_data[k]) - - -