Fix #5398 and #5395 - Fix tests failing due to problem creating connection for alembic
authorJessica Tallon <tsyesika@tsyesika.se>
Wed, 20 Jan 2016 09:09:42 +0000 (09:09 +0000)
committerJessica Tallon <tsyesika@tsyesika.se>
Wed, 20 Jan 2016 09:09:42 +0000 (09:09 +0000)
For some reason the alembic connection wasn't seeing any tables that existed
however the existing connection works well and we shouldn't be creating a brand
new one when we have one ready to use. I've used a little bit of a hack due to our
old version of alembic.

After 0.7.5 of alembic it offers a `Config.attributes` dictionary which is designed to
allow you to pass your connection/engine/whatever to the env.py config script so you're
not required to create new ones. As we're on an older version I just create a dictionary
with the same name and use it as otherwise documented. It seems this is the suggested
fix for #5395 and it fixes #5398 too.

mediagoblin/db/migration_tools.py
mediagoblin/db/migrations/env.py

index e34685f589642b3f128528f908bb84d21580c265..b3fb8f4106b76c17f39cb5186582520541f2826a 100644 (file)
@@ -40,10 +40,17 @@ 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.set_main_option("sqlalchemy.url", str(session.get_bind().url))
-        self.session = session
+        
+        # TODO: After 0.7.5 alembic has Config.attributes already made, once
+        #       we're able to update, please remove this hack!
+        self.alembic_cfg.attributes = {}
+        self.alembic_cfg.attributes["session"] = self.session
+        self.alembic_cfg.set_main_option("qlalchemy.url", str(self.engine.url))
 
     def get_current_revision(self):
         context = MigrationContext.configure(self.session.bind)
index 712b6164d5473af54d79987efcf993486b12c310..c5f88219ab14032ac1de2efb95e3c316d6ebae09 100644 (file)
@@ -47,22 +47,14 @@ def run_migrations_online():
     and associate a connection with the context.
 
     """
-    engine = engine_from_config(
-                config.get_section(config.config_ini_section),
-                prefix='sqlalchemy.',
-                poolclass=pool.NullPool)
-
-    connection = engine.connect()
+    connection = config.attributes["session"].get_bind()
     context.configure(
                 connection=connection,
                 target_metadata=target_metadata
                 )
 
-    try:
-        with context.begin_transaction():
-            context.run_migrations()
-    finally:
-        connection.close()
+    with context.begin_transaction():
+        context.run_migrations()
 
 if context.is_offline_mode():
     run_migrations_offline()