dbupdate updates to use plugin migrations if available
This makes use of the recently added "build_alembic_config" tool and removes AlembicMigrationManager. * mediagoblin/db/migration_tools.py (AlembicMigrationManager): Removed. * mediagoblin/gmg_commands/dbupdate.py (run_alembic_migrations): Adjusted to use recently added build_alembic_config tool.
This commit is contained in:
parent
731df78225
commit
05879c1c76
@ -36,52 +36,6 @@ class TableAlreadyExists(Exception):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class AlembicMigrationManager(object):
|
|
||||||
|
|
||||||
def __init__(self, session):
|
|
||||||
root_dir = os.path.abspath(os.path.dirname(os.path.dirname(
|
|
||||||
os.path.dirname(__file__))))
|
|
||||||
|
|
||||||
self.session = session
|
|
||||||
self.engine = self.session.get_bind()
|
|
||||||
alembic_cfg_path = os.path.join(root_dir, 'alembic.ini')
|
|
||||||
self.alembic_cfg = Config(alembic_cfg_path)
|
|
||||||
|
|
||||||
self.alembic_cfg.attributes["session"] = self.session
|
|
||||||
self.alembic_cfg.set_main_option("sqlalchemy.url", str(self.engine.url))
|
|
||||||
|
|
||||||
def get_current_revision(self):
|
|
||||||
context = MigrationContext.configure(self.session.bind)
|
|
||||||
return context.get_current_revision()
|
|
||||||
|
|
||||||
def upgrade(self, version):
|
|
||||||
return command.upgrade(self.alembic_cfg, version or 'head')
|
|
||||||
|
|
||||||
def downgrade(self, version):
|
|
||||||
if isinstance(version, int) or version is None or version.isdigit():
|
|
||||||
version = 'base'
|
|
||||||
return command.downgrade(self.alembic_cfg, version)
|
|
||||||
|
|
||||||
def stamp(self, revision):
|
|
||||||
return command.stamp(self.alembic_cfg, revision=revision)
|
|
||||||
|
|
||||||
def init_tables(self):
|
|
||||||
Base.metadata.create_all(self.session.bind)
|
|
||||||
# load the Alembic configuration and generate the
|
|
||||||
# version table, "stamping" it with the most recent rev:
|
|
||||||
# XXX: we need to find a better way to detect current installations
|
|
||||||
# using sqlalchemy-migrate because we don't have to create all table
|
|
||||||
# for them
|
|
||||||
command.stamp(self.alembic_cfg, 'head')
|
|
||||||
|
|
||||||
def init_or_migrate(self, version=None):
|
|
||||||
# XXX: we need to call this method when we ditch
|
|
||||||
# sqlalchemy-migrate entirely
|
|
||||||
# if self.get_current_revision() is None:
|
|
||||||
# self.init_tables()
|
|
||||||
self.upgrade(version)
|
|
||||||
|
|
||||||
|
|
||||||
class MigrationManager(object):
|
class MigrationManager(object):
|
||||||
"""
|
"""
|
||||||
Migration handling tool.
|
Migration handling tool.
|
||||||
|
@ -17,10 +17,12 @@
|
|||||||
import logging
|
import logging
|
||||||
|
|
||||||
import six
|
import six
|
||||||
|
from alembic import command
|
||||||
from sqlalchemy.orm import sessionmaker
|
from sqlalchemy.orm import sessionmaker
|
||||||
|
|
||||||
from mediagoblin.db.open import setup_connection_and_db_from_config
|
from mediagoblin.db.open import setup_connection_and_db_from_config
|
||||||
from mediagoblin.db.migration_tools import MigrationManager, AlembicMigrationManager
|
from mediagoblin.db.migration_tools import (
|
||||||
|
MigrationManager, build_alembic_config)
|
||||||
from mediagoblin.init import setup_global_and_app_config
|
from mediagoblin.init import setup_global_and_app_config
|
||||||
from mediagoblin.tools.common import import_component
|
from mediagoblin.tools.common import import_component
|
||||||
|
|
||||||
@ -112,8 +114,15 @@ def gather_database_data(plugins):
|
|||||||
def run_alembic_migrations(db, app_config, global_config):
|
def run_alembic_migrations(db, app_config, global_config):
|
||||||
"""Initialize a database and runs all Alembic migrations."""
|
"""Initialize a database and runs all Alembic migrations."""
|
||||||
Session = sessionmaker(bind=db.engine)
|
Session = sessionmaker(bind=db.engine)
|
||||||
manager = AlembicMigrationManager(Session())
|
session = Session()
|
||||||
manager.init_or_migrate()
|
cfg = build_alembic_config(global_config, None, session)
|
||||||
|
|
||||||
|
# XXX: we need to call this method when we ditch
|
||||||
|
# sqlalchemy-migrate entirely
|
||||||
|
# if self.get_current_revision() is None:
|
||||||
|
# self.init_tables()
|
||||||
|
return command.upgrade(cfg, 'heads')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def run_dbupdate(app_config, global_config):
|
def run_dbupdate(app_config, global_config):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user