Example #1
0
 def ensure_version(self, conn):
   """Ensure that the connected DB exists and is of the correct version.
   Creates or upgrades DB as necessary. Bails on higher versions. Commits."""
   # Do we have the table?
   check_ver = None
   try:
     check_ver = conn.execute('select version from metadata')
   except sqlite3.OperationalError as oe:
     if str(oe).find('no such table') == 0:
       self.initialize(conn)
       return
     raise ConfigException("Error determining DB file's data version: %s" % oe)
   
   # Do we have the row?
   row = None
   try:
     row = check_ver.next()
   except StopIteration as si:
     raise ConfigException("SQLite database had empty metadata table.")
   
   # Compare the version
   found_ver = str(row[0])
   if version_asc(found_ver, self.data_version):
     self.upgrade(conn, found_ver)
   elif version_asc(self.data_version, found_ver):
     raise ConfigException("DB version too high! Found %s, expected %s" %
                           (found_ver, self.data_version))
Example #2
0
 def test_vcmp(self):
   "Test version comparisons"
   # same: exact
   self.assertFalse(util.version_asc("0", "0"))
   self.assertFalse(util.version_asc("1", "1"))
   # same: trailing zero
   self.assertFalse(util.version_asc("1.2", "1.2.0"))
   self.assertFalse(util.version_asc("1.0.0", "1"))
   # lexi: gross
   self.assertTrue(util.version_asc("1", "1.2"))
   self.assertFalse(util.version_asc("1.2", "1"))
   # lexi: fine
   self.assertTrue(util.version_asc("9", "100"))
   self.assertFalse(util.version_asc("100", "9"))