def upgrade(pkg, sql=False): """Upgrade to a later version.""" from alembic.config import Config from alembic.environment import EnvironmentContext if ':' in pkg: pkg, rev = pkg.split(':',1) else: rev = 'head' script = ScriptDirectory(pkg) env = EnvironmentContext(Config(''), script) conn = ptah.get_base().metadata.bind.connect() def upgrade(revision, context): return script._upgrade_revs(rev, revision) env.configure( connection = conn, fn = upgrade, as_sql = sql, starting_rev = None, destination_rev = rev, ) mc = env._migration_context env._migration_context = MigrationContext(pkg, conn.dialect, conn, mc.opts) with env: try: with env.begin_transaction(): env.run_migrations() finally: conn.close()
def upgrade(pkg, sql=False): """Upgrade to a later version.""" from alembic.config import Config from alembic.environment import EnvironmentContext if ':' in pkg: pkg, rev = pkg.split(':', 1) else: rev = 'head' script = ScriptDirectory(pkg) env = EnvironmentContext(Config(''), script) conn = ptah.get_base().metadata.bind.connect() def upgrade(revision, context): return script._upgrade_revs(rev, revision) env.configure( connection=conn, fn=upgrade, as_sql=sql, starting_rev=None, destination_rev=rev, ) mc = env._migration_context env._migration_context = MigrationContext(pkg, conn.dialect, conn, mc.opts) with env: try: with env.begin_transaction(): env.run_migrations() finally: conn.close()
def test_db_metadata_differences(models, settings): db_name = settings['db_name'] # first we drop anything there might be dropdb(db_name) # then we create a clean DB from the metadata createdb(db_name) metadata = models.metadata engine = engine_from_config(settings) metadata.bind = engine metadata.create_all(engine, tables=[table for name, table in metadata.tables.items() if not name.startswith('test_')]) # and store the results create_all_result = dumpdb(db_name) engine.dispose() # now we do it again, but this time using migrations dropdb(db_name) createdb(db_name) config = Config() config.set_main_option('script_location', 'backrest:migrations') script = ScriptDirectory.from_config(config) connection = engine.connect() environment = EnvironmentContext(config, script, starting_rev='base', destination_rev='head') context = MigrationContext.configure(connection) def upgrade(rev, context): return script._upgrade_revs('head', rev) context._migrations_fn = upgrade environment._migration_context = context with environment.begin_transaction(): environment.run_migrations() # we drop alembic_version to avoid it showing up in the diff engine.execute('DROP TABLE alembic_version;') # we store these results alembic_result = dumpdb(db_name) del context del environment connection.close() del connection engine.dispose() # now we check whether there are differences and output them if there are diff = unified_diff(alembic_result, create_all_result) assert alembic_result == create_all_result, \ 'Migration output differs:\n' + ''.join(diff)
def current(pkg): """Display the current revision.""" def display_version(rev, context): rev = script._get_rev(rev) if rev is None: print("Package '{0}' rev: None".format(pkg)) else: print("Package '{0}' rev: {1}{2} {3}".format( pkg, rev.revision, '(head)' if rev.is_head else "", rev.doc)) return [] conn = ptah.get_base().metadata.bind.connect() script = ptah.migrate.ScriptDirectory(pkg) env = EnvironmentContext(Config(''), script) env.configure(connection=conn, fn=display_version) mc = env._migration_context env._migration_context = MigrationContext(pkg, conn.dialect, conn, mc.opts) with env.begin_transaction(): env.run_migrations()
def current(pkg): """Display the current revision.""" def display_version(rev, context): rev = script._get_rev(rev) if rev is None: print("Package '{0}' rev: None".format(pkg)) else: print("Package '{0}' rev: {1}{2} {3}".format(pkg, rev.revision, "(head)" if rev.is_head else "", rev.doc)) return [] conn = ptah.get_base().metadata.bind.connect() script = ptah.migrate.ScriptDirectory(pkg) env = EnvironmentContext(Config(""), script) env.configure(connection=conn, fn=display_version) mc = env._migration_context env._migration_context = MigrationContext(pkg, conn.dialect, conn, mc.opts) with env.begin_transaction(): env.run_migrations()