예제 #1
0
파일: migrate.py 프로젝트: carlicos/ptah
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()
예제 #2
0
파일: migrate.py 프로젝트: timgates42/ptah
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()
예제 #3
0
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)
예제 #4
0
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()
예제 #5
0
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()