From 4c77f3d56396a78f2708e59b9cb6c8f150b39b6d Mon Sep 17 00:00:00 2001 From: Jessica Tallon Date: Wed, 20 Jan 2016 09:09:42 +0000 Subject: [PATCH] Fix #5398 and #5395 - Fix tests failing due to problem creating connection for alembic 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 | 11 +++++++++-- mediagoblin/db/migrations/env.py | 14 +++----------- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/mediagoblin/db/migration_tools.py b/mediagoblin/db/migration_tools.py index e34685f5..b3fb8f41 100644 --- a/mediagoblin/db/migration_tools.py +++ b/mediagoblin/db/migration_tools.py @@ -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) diff --git a/mediagoblin/db/migrations/env.py b/mediagoblin/db/migrations/env.py index 712b6164..c5f88219 100644 --- a/mediagoblin/db/migrations/env.py +++ b/mediagoblin/db/migrations/env.py @@ -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() -- 2.25.1