# HG changeset patch # User Søren Løvborg # Date 2016-07-18 13:32:34 # Node ID ccc66ed2f85b2e487528b76a8ed9ca9f7759f73a # Parent 520d39490a0667b8469264a9e74b35cf58a220c7 db: enable use of main Kallithea config as Alembic config Newly generated Kallithea config .ini files will be valid Alembic config files, eliminating the need for a separate alembic.ini config redundantly specifying the database connection string. We reference the Alembic migration environment using kallithea:alembic, which should work independently of how Kallithea is installed. We also configure a default 'alembic' log level of WARNING, to reduce the amount of clutter in the config file, reduce the changes needed to upgrade existing config files for use with Alembic, and allowing us to change the default Alembic log level for all users down the road. (It makes sense to define Alembic logging in code, while all other loggers are configured in the configuration file, because Alembic is special: it runs on the command line, not as part of the web app.) diff --git a/development.ini b/development.ini --- a/development.ini +++ b/development.ini @@ -502,6 +502,13 @@ sqlalchemy.db1.echo = false sqlalchemy.db1.pool_recycle = 3600 ################################ +### ALEMBIC CONFIGURATION #### +################################ + +[alembic] +script_location = kallithea:alembic + +################################ ### LOGGING CONFIGURATION #### ################################ diff --git a/kallithea/alembic/env.py b/kallithea/alembic/env.py --- a/kallithea/alembic/env.py +++ b/kallithea/alembic/env.py @@ -14,6 +14,7 @@ # Alembic migration environment (configuration). +import logging from logging.config import fileConfig from alembic import context @@ -23,9 +24,21 @@ from sqlalchemy import engine_from_confi # The alembic.config.Config object, which wraps the current .ini file. config = context.config -# Interpret the config file for Python logging. -# This line sets up loggers basically. -fileConfig(config.config_file_name) +# Default to use the main Kallithea database string in [app:main]. +# For advanced uses, this can be overridden by specifying an explicit +# [alembic] sqlalchemy.url. +database_url = ( + config.get_main_option('sqlalchemy.url') or + config.get_section_option('app:main', 'sqlalchemy.db1.url') +) + +# Configure default logging for Alembic. (This can be overriden by the +# config file, but usually isn't.) +logging.getLogger('alembic').setLevel(logging.WARNING) + +# Setup Python loggers based on the config file provided to the alembic +# command. +fileConfig(config.config_file_name, disable_existing_loggers=False) def run_migrations_offline(): @@ -34,9 +47,8 @@ def run_migrations_offline(): This produces an SQL script instead of directly applying the changes. Some migrations may not run in offline mode. """ - url = config.get_main_option("sqlalchemy.url") context.configure( - url=url, + url=database_url, literal_binds=True, ) @@ -50,8 +62,10 @@ def run_migrations_online(): Connects to the database and directly applies the necessary migrations. """ + cfg = config.get_section(config.config_ini_section) + cfg['sqlalchemy.url'] = database_url connectable = engine_from_config( - config.get_section(config.config_ini_section), + cfg, prefix='sqlalchemy.', poolclass=pool.NullPool) diff --git a/kallithea/bin/template.ini.mako b/kallithea/bin/template.ini.mako --- a/kallithea/bin/template.ini.mako +++ b/kallithea/bin/template.ini.mako @@ -505,6 +505,13 @@ sqlalchemy.db1.echo = false sqlalchemy.db1.pool_recycle = 3600 <%text>################################ +<%text>### ALEMBIC CONFIGURATION #### +<%text>################################ + +[alembic] +script_location = kallithea:alembic + +<%text>################################ <%text>### LOGGING CONFIGURATION #### <%text>################################ diff --git a/kallithea/config/deployment.ini_tmpl b/kallithea/config/deployment.ini_tmpl --- a/kallithea/config/deployment.ini_tmpl +++ b/kallithea/config/deployment.ini_tmpl @@ -494,6 +494,13 @@ sqlalchemy.db1.echo = false sqlalchemy.db1.pool_recycle = 3600 ################################ +### ALEMBIC CONFIGURATION #### +################################ + +[alembic] +script_location = kallithea:alembic + +################################ ### LOGGING CONFIGURATION #### ################################ diff --git a/kallithea/tests/test.ini b/kallithea/tests/test.ini --- a/kallithea/tests/test.ini +++ b/kallithea/tests/test.ini @@ -502,6 +502,13 @@ sqlalchemy.db1.echo = false sqlalchemy.db1.pool_recycle = 3600 ################################ +### ALEMBIC CONFIGURATION #### +################################ + +[alembic] +script_location = kallithea:alembic + +################################ ### LOGGING CONFIGURATION #### ################################