env.py
102 lines
| 2.9 KiB
| text/x-python
|
PythonLexer
r0 | # -*- coding: utf-8 -*- | |||
r112 | # Copyright 2010 - 2017 RhodeCode GmbH and the AppEnlight project authors | |||
r0 | # | |||
r112 | # Licensed under the Apache License, Version 2.0 (the "License"); | |||
# you may not use this file except in compliance with the License. | ||||
# You may obtain a copy of the License at | ||||
r0 | # | |||
r112 | # http://www.apache.org/licenses/LICENSE-2.0 | |||
r0 | # | |||
r112 | # Unless required by applicable law or agreed to in writing, software | |||
# distributed under the License is distributed on an "AS IS" BASIS, | ||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
# See the License for the specific language governing permissions and | ||||
# limitations under the License. | ||||
r0 | ||||
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. | ||||
r153 | VERSION_TABLE_NAME = "alembic_appenlight_version" | |||
r0 | ||||
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") | ||||
r153 | context.configure( | |||
url=url, | ||||
target_metadata=target_metadata, | ||||
transaction_per_migration=True, | ||||
version_table=VERSION_TABLE_NAME, | ||||
) | ||||
r0 | ||||
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), | ||||
r153 | prefix="sqlalchemy.", | |||
poolclass=pool.NullPool, | ||||
) | ||||
r0 | ||||
connection = engine.connect() | ||||
context.configure( | ||||
connection=connection, | ||||
target_metadata=target_metadata, | ||||
transaction_per_migration=True, | ||||
r153 | version_table=VERSION_TABLE_NAME, | |||
r0 | ) | |||
try: | ||||
with context.begin_transaction(): | ||||
context.run_migrations() | ||||
finally: | ||||
connection.close() | ||||
if context.is_offline_mode(): | ||||
run_migrations_offline() | ||||
else: | ||||
run_migrations_online() | ||||