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.
This commit is contained in:
Jessica Tallon 2016-01-20 09:09:42 +00:00
parent 8de5a9319a
commit 4c77f3d563
2 changed files with 12 additions and 13 deletions

View 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)

View 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()