|
1 |
| -from __future__ import with_statement |
2 |
| - |
3 | 1 | import logging
|
4 | 2 | from logging.config import fileConfig
|
5 | 3 |
|
|
16 | 14 | fileConfig(config.config_file_name)
|
17 | 15 | logger = logging.getLogger('alembic.env')
|
18 | 16 |
|
| 17 | + |
| 18 | +def get_engine(): |
| 19 | + try: |
| 20 | + # this works with Flask-SQLAlchemy<3 and Alchemical |
| 21 | + return current_app.extensions['migrate'].db.get_engine() |
| 22 | + except (TypeError, AttributeError): |
| 23 | + # this works with Flask-SQLAlchemy>=3 |
| 24 | + return current_app.extensions['migrate'].db.engine |
| 25 | + |
| 26 | + |
| 27 | +def get_engine_url(): |
| 28 | + try: |
| 29 | + return get_engine().url.render_as_string(hide_password=False).replace( |
| 30 | + '%', '%%') |
| 31 | + except AttributeError: |
| 32 | + return str(get_engine().url).replace('%', '%%') |
| 33 | + |
| 34 | + |
19 | 35 | # add your model's MetaData object here
|
20 | 36 | # for 'autogenerate' support
|
21 | 37 | # from myapp import mymodel
|
22 | 38 | # target_metadata = mymodel.Base.metadata
|
23 |
| -config.set_main_option( |
24 |
| - 'sqlalchemy.url', |
25 |
| - str(current_app.extensions['migrate'].db.get_engine().url).replace( |
26 |
| - '%', '%%')) |
| 39 | +config.set_main_option('sqlalchemy.url', get_engine_url()) |
27 | 40 | target_db = current_app.extensions['migrate'].db
|
28 | 41 |
|
29 | 42 | # other values from the config, defined by the needs of env.py,
|
@@ -77,14 +90,17 @@ def process_revision_directives(context, revision, directives):
|
77 | 90 | directives[:] = []
|
78 | 91 | logger.info('No changes in schema detected.')
|
79 | 92 |
|
80 |
| - connectable = current_app.extensions['migrate'].db.get_engine() |
| 93 | + conf_args = current_app.extensions['migrate'].configure_args |
| 94 | + if conf_args.get("process_revision_directives") is None: |
| 95 | + conf_args["process_revision_directives"] = process_revision_directives |
| 96 | + |
| 97 | + connectable = get_engine() |
81 | 98 |
|
82 | 99 | with connectable.connect() as connection:
|
83 | 100 | context.configure(
|
84 | 101 | connection=connection,
|
85 | 102 | target_metadata=get_metadata(),
|
86 |
| - process_revision_directives=process_revision_directives, |
87 |
| - **current_app.extensions['migrate'].configure_args |
| 103 | + **conf_args |
88 | 104 | )
|
89 | 105 |
|
90 | 106 | with context.begin_transaction():
|
|
0 commit comments