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))
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"))