env.py
103 lines
| 3.1 KiB
| text/x-python
|
PythonLexer
r0 | # -*- coding: utf-8 -*- | |||
# Copyright (C) 2010-2016 RhodeCode GmbH | ||||
# | ||||
# This program is free software: you can redistribute it and/or modify | ||||
# it under the terms of the GNU Affero General Public License, version 3 | ||||
# (only), as published by the Free Software Foundation. | ||||
# | ||||
# This program is distributed in the hope that it will be useful, | ||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||||
# GNU General Public License for more details. | ||||
# | ||||
# You should have received a copy of the GNU Affero General Public License | ||||
# along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
# | ||||
# This program is dual-licensed. If you wish to learn more about the | ||||
# App Enlight Enterprise Edition, including its added features, Support | ||||
# services, and proprietary license terms, please see | ||||
# https://rhodecode.com/licenses/ | ||||
from alembic import context | ||||
from sqlalchemy import engine_from_config, pool, MetaData | ||||
from logging.config import fileConfig | ||||
from appenlight.models import NAMING_CONVENTION | ||||
# this is the Alembic Config object, which provides | ||||
# access to the values within the .ini file in use. | ||||
config = context.config | ||||
# Interpret the config file for Python logging. | ||||
# This line sets up loggers basically. | ||||
if config.config_file_name: | ||||
fileConfig(config.config_file_name) | ||||
# add your model's MetaData object here | ||||
# for 'autogenerate' support | ||||
# from myapp import mymodel | ||||
# target_metadata = mymodel.Base.metadata | ||||
target_metadata = MetaData(naming_convention=NAMING_CONVENTION) | ||||
# other values from the config, defined by the needs of env.py, | ||||
# can be acquired: | ||||
# my_important_option = config.get_main_option("my_important_option") | ||||
# ... etc. | ||||
VERSION_TABLE_NAME = 'alembic_appenlight_version' | ||||
def run_migrations_offline(): | ||||
"""Run migrations in 'offline' mode. | ||||
This configures the context with just a URL | ||||
and not an Engine, though an Engine is acceptable | ||||
here as well. By skipping the Engine creation | ||||
we don't even need a DBAPI to be available. | ||||
Calls to context.execute() here emit the given string to the | ||||
script output. | ||||
""" | ||||
url = config.get_main_option("sqlalchemy.url") | ||||
context.configure(url=url, target_metadata=target_metadata, | ||||
transaction_per_migration=True, | ||||
version_table=VERSION_TABLE_NAME) | ||||
with context.begin_transaction(): | ||||
context.run_migrations() | ||||
def run_migrations_online(): | ||||
"""Run migrations in 'online' mode. | ||||
In this scenario we need to create an Engine | ||||
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() | ||||
context.configure( | ||||
connection=connection, | ||||
target_metadata=target_metadata, | ||||
transaction_per_migration=True, | ||||
version_table=VERSION_TABLE_NAME | ||||
) | ||||
try: | ||||
with context.begin_transaction(): | ||||
context.run_migrations() | ||||
finally: | ||||
connection.close() | ||||
if context.is_offline_mode(): | ||||
run_migrations_offline() | ||||
else: | ||||
run_migrations_online() | ||||