Current location

narf Source control manager Git

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Allan Webber <cwebber@dustycloud.org>2016-03-09 13:31:39 -0800
committerChristopher Allan Webber <cwebber@dustycloud.org>2016-03-26 11:39:07 -0700
commit05879c1c76045679eae5110c7580f9e0533dfd8c (patch)
treee4878e396745f25c080db8356666d86ec5306784
parent731df78225cfeed168b849287ede07e205fae3f3 (diff)
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.
-rw-r--r--mediagoblin/db/migration_tools.py46
-rw-r--r--mediagoblin/gmg_commands/dbupdate.py15
2 files changed, 12 insertions, 49 deletions
diff --git a/mediagoblin/db/migration_tools.py b/mediagoblin/db/migration_tools.py
index c6beba8b..2706c9b7 100644
--- a/mediagoblin/db/migration_tools.py
+++ b/mediagoblin/db/migration_tools.py
@@ -36,52 +36,6 @@ class TableAlreadyExists(Exception):
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):
"""
Migration handling tool.
diff --git a/mediagoblin/gmg_commands/dbupdate.py b/mediagoblin/gmg_commands/dbupdate.py
index 6227ad0e..e9f05e01 100644
--- a/mediagoblin/gmg_commands/dbupdate.py
+++ b/mediagoblin/gmg_commands/dbupdate.py
@@ -17,10 +17,12 @@
import logging
import six
+from alembic import command
from sqlalchemy.orm import sessionmaker
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.tools.common import import_component
@@ -112,8 +114,15 @@ def gather_database_data(plugins):
def run_alembic_migrations(db, app_config, global_config):
"""Initialize a database and runs all Alembic migrations."""
Session = sessionmaker(bind=db.engine)
- manager = AlembicMigrationManager(Session())
- manager.init_or_migrate()
+ session = Session()
+ 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):