def upgradeDBSchema(version): """Upgrade data base schema to specified version UNUSED for now, needs more work """ import os import fnmatch import MySQLdb schemaUpgrade = fnmatch.filter(os.listdir('../sql'), 'update_einsteinDB_schema_*_to_%s.sql' % version) try: # only honor the first upgrade to given version sqlSchemaUpgrade = open(os.path.join('../sql', schemaUpgrade[0])).read() dbCursor = Status.SQL.cursor(MySQLdb.cursors.DictCursor) logMessage('data base schema upgrade starting') dbCursor.execute(sqlSchemaUpgrade) logMessage('data base schema upgrade complete: %d rows affected' % dbCursor.rowcount) except IndexError: # no upgrade found -> fine pass
def upgradeEINSTEIN(targetVersion=VERSION, sourceVersion=None, projectIds=None): """Perform all defined upgrades to reach the specified version of EINSTEIN""" if not sourceVersion: # determine source version if projectIds is None: # complete data base upgrade requested try: sourceVersion = Status.DB.stool.Version['%'].column()[0] except KeyError, IndexError: # default version for complete upgrade sourceVersion = '1.1' else: # default schema version for selected projects sourceVersion = '1.1' if targetVersion == sourceVersion: # no upgrades necessary return else: logMessage('Upgrade to version %s starting' % targetVersion) if projectIds is not None: target = (len(projectIds) == 1) and '1 project' or ('%d projects' % len(projectIds)) else: target = 'data base' # call all upgrade functions in order of ascending versions and then list order for version in sorted(upgrades.keys()): if version > sourceVersion and version <= targetVersion: logMessage('Upgrade of %s to version %s starting' % (target, version)) for upgrade in upgrades[version]: logMessage('%s starting' % upgrade.__name__) try: upgrade(projectIds) except Exception, error: