Skip to content

Commit 113115d

Browse files
add support for Alchemical in addition to Flask-SQLAlchemy
1 parent 699e136 commit 113115d

File tree

3 files changed

+23
-10
lines changed

3 files changed

+23
-10
lines changed

flask_migrate/templates/flask-multidb/env.py

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,20 @@
2525
# target_metadata = mymodel.Base.metadata
2626
config.set_main_option(
2727
'sqlalchemy.url',
28-
str(current_app.extensions['migrate'].db.engine.url).replace('%', '%%'))
29-
bind_names = []
30-
for bind in current_app.config.get("SQLALCHEMY_BINDS"):
28+
str(current_app.extensions['migrate'].db.get_engine().url).replace(
29+
'%', '%%'))
30+
if current_app.config.get('SQLALCHEMY_BINDS') is not None:
31+
bind_names = list(current_app.config['SQLALCHEMY_BINDS'].keys())
32+
else:
33+
get_bind_names = getattr(current_app.extensions['migrate'].db,
34+
'bind_names', None)
35+
if get_bind_names:
36+
bind_names = get_bind_names()
37+
for bind in bind_names:
3138
context.config.set_section_option(
3239
bind, "sqlalchemy.url",
3340
str(current_app.extensions['migrate'].db.get_engine(
34-
current_app, bind).url).replace('%', '%%'))
35-
bind_names.append(bind)
41+
bind=bind).url).replace('%', '%%'))
3642
target_metadata = current_app.extensions['migrate'].db.metadata
3743

3844

@@ -118,12 +124,12 @@ def process_revision_directives(context, revision, directives):
118124
# for the direct-to-DB use case, start a transaction on all
119125
# engines, then run all migrations, then commit all transactions.
120126
engines = {
121-
'': {'engine': current_app.extensions['migrate'].db.engine}
127+
'': {'engine': current_app.extensions['migrate'].db.get_engine()}
122128
}
123129
for name in bind_names:
124130
engines[name] = rec = {}
125131
rec['engine'] = current_app.extensions['migrate'].db.get_engine(
126-
app=current_app, bind=name)
132+
bind=name)
127133

128134
for name, rec in engines.items():
129135
engine = rec['engine']

flask_migrate/templates/flask-multidb/script.py.mako

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,13 @@ def downgrade(engine_name):
2828

2929
<%
3030
from flask import current_app
31-
db_names = [''] + list(current_app.config.get("SQLALCHEMY_BINDS").keys())
31+
if current_app.config.get('SQLALCHEMY_BINDS') is not None:
32+
bind_names = list(current_app.config['SQLALCHEMY_BINDS'].keys())
33+
else:
34+
get_bind_names = getattr(current_app.extensions['migrate'].db, 'bind_names', None)
35+
if get_bind_names:
36+
bind_names = get_bind_names()
37+
db_names = [''] + bind_names
3238
%>
3339

3440
## generate an "upgrade_<xyz>() / downgrade_<xyz>()" function

flask_migrate/templates/flask/env.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@
2222
# target_metadata = mymodel.Base.metadata
2323
config.set_main_option(
2424
'sqlalchemy.url',
25-
str(current_app.extensions['migrate'].db.engine.url).replace('%', '%%'))
25+
str(current_app.extensions['migrate'].db.get_engine().url).replace(
26+
'%', '%%'))
2627
target_metadata = current_app.extensions['migrate'].db.metadata
2728

2829
# other values from the config, defined by the needs of env.py,
@@ -70,7 +71,7 @@ def process_revision_directives(context, revision, directives):
7071
directives[:] = []
7172
logger.info('No changes in schema detected.')
7273

73-
connectable = current_app.extensions['migrate'].db.engine
74+
connectable = current_app.extensions['migrate'].db.get_engine()
7475

7576
with connectable.connect() as connection:
7677
context.configure(

0 commit comments

Comments
 (0)