From: Jessica Tallon Date: Wed, 20 Jan 2016 09:09:42 +0000 (+0000) Subject: Fix #5398 and #5395 - Fix tests failing due to problem creating connection for alembic X-Git-Url: https://vcs.fsf.org/?a=commitdiff_plain;h=4c77f3d56396a78f2708e59b9cb6c8f150b39b6d;p=mediagoblin.git 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. --- 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()