]> git.decadent.org.uk Git - dak.git/commitdiff
Merge commit 'ftpmaster/master'
authorMark Hymers <mhy@debian.org>
Mon, 30 Mar 2009 07:08:47 +0000 (07:08 +0000)
committerMark Hymers <mhy@debian.org>
Mon, 30 Mar 2009 07:08:47 +0000 (07:08 +0000)
1  2 
daklib/dbconn.py

diff --combined daklib/dbconn.py
index 46d4d3d5791c461ffaed84504ea2367fe18e12dc,b532c351ac050d22ccd5434100058d520a7f04a0..bb7473dc08b85d4f64c0268e1faeb094c3aca786
@@@ -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:
          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}.
              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
              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])
 +
 +
 +