def check_db_version(self, db_version_info, session=None): """ Checks the database version and prints an error message on database version mismatch. - On mismatching or on missing version a sys.exit(1) is called. - On missing DBVersion table, it returns False - On compatible DB version, it returns True Parameters: db_version_info (db_version.DBVersionInfo): required database version. session: an open database session or None. If session is None, a new session is created. """ try: dispose_engine = False if session is None: engine = SQLServer.create_engine(self.get_connection_string()) dispose_engine = True session = CreateSession(engine) else: engine = session.get_bind() if not engine.has_table(quoted_name(DBVersion.__tablename__, True)): LOG.debug("Missing DBVersion table!") return False version = session.query(DBVersion).first() if version is None: # Version is not populated yet LOG.error('No version information found in the database.') sys.exit(1) elif not db_version_info.is_compatible(version.major, version.minor): LOG.error('Version mismatch. Expected database version: ' + str(db_version_info)) version_from_db = 'v' + str(version.major) + '.' + str( version.minor) LOG.error('Version from the database is: ' + version_from_db) LOG.error('Please update your database.') sys.exit(1) LOG.debug("Database version is compatible.") return True finally: session.commit() if dispose_engine: engine.dispose()
def check_db_version(self, db_version_info, session=None): ''' Checks the database version and prints an error message on database version mismatch. - On mismatching or on missing version a sys.exit(1) is called. - On missing DBVersion table, it returns False - On compatible DB version, it returns True Parameters: db_version_info (db_version.DBVersionInfo): required database version. session: an open database session or None. If session is None, a new session is created. ''' try: dispose_engine = False if session is None: engine = SQLServer.create_engine(self.get_connection_string()) dispose_engine = True session = CreateSession(engine) else: engine = session.get_bind() if not engine.has_table(quoted_name(DBVersion.__tablename__, True)): LOG.debug("Missing DBVersion table!") return False version = session.query(DBVersion).first() if version is None: # Version is not populated yet LOG.error('No version information found in the database.') sys.exit(1) elif not db_version_info.is_compatible(version.major, version.minor): LOG.error('Version mismatch. Expected database version: ' + str(db_version_info)) version_from_db = 'v' + str(version.major) + '.' + str( version.minor) LOG.error('Version from the database is: ' + version_from_db) LOG.error('Please update your database.') sys.exit(1) LOG.debug("Database version is compatible.") return True finally: session.commit() if dispose_engine: engine.dispose()