0x0

mia's file "the null pointer" hosting application -- l0bster h0sted
Log | Files | Refs | LICENSE

env.py (2883B)


      1 from __future__ import with_statement
      2 from alembic import context
      3 from sqlalchemy import engine_from_config, pool
      4 from logging.config import fileConfig
      5 import logging
      6 
      7 # this is the Alembic Config object, which provides
      8 # access to the values within the .ini file in use.
      9 config = context.config
     10 
     11 # Interpret the config file for Python logging.
     12 # This line sets up loggers basically.
     13 fileConfig(config.config_file_name)
     14 logger = logging.getLogger('alembic.env')
     15 
     16 # add your model's MetaData object here
     17 # for 'autogenerate' support
     18 # from myapp import mymodel
     19 # target_metadata = mymodel.Base.metadata
     20 from flask import current_app
     21 config.set_main_option('sqlalchemy.url',
     22                        current_app.config.get('SQLALCHEMY_DATABASE_URI'))
     23 target_metadata = current_app.extensions['migrate'].db.metadata
     24 
     25 # other values from the config, defined by the needs of env.py,
     26 # can be acquired:
     27 # my_important_option = config.get_main_option("my_important_option")
     28 # ... etc.
     29 
     30 
     31 def run_migrations_offline():
     32     """Run migrations in 'offline' mode.
     33 
     34     This configures the context with just a URL
     35     and not an Engine, though an Engine is acceptable
     36     here as well.  By skipping the Engine creation
     37     we don't even need a DBAPI to be available.
     38 
     39     Calls to context.execute() here emit the given string to the
     40     script output.
     41 
     42     """
     43     url = config.get_main_option("sqlalchemy.url")
     44     context.configure(url=url)
     45 
     46     with context.begin_transaction():
     47         context.run_migrations()
     48 
     49 
     50 def run_migrations_online():
     51     """Run migrations in 'online' mode.
     52 
     53     In this scenario we need to create an Engine
     54     and associate a connection with the context.
     55 
     56     """
     57 
     58     # this callback is used to prevent an auto-migration from being generated
     59     # when there are no changes to the schema
     60     # reference: http://alembic.readthedocs.org/en/latest/cookbook.html
     61     def process_revision_directives(context, revision, directives):
     62         if getattr(config.cmd_opts, 'autogenerate', False):
     63             script = directives[0]
     64             if script.upgrade_ops.is_empty():
     65                 directives[:] = []
     66                 logger.info('No changes in schema detected.')
     67 
     68     engine = engine_from_config(config.get_section(config.config_ini_section),
     69                                 prefix='sqlalchemy.',
     70                                 poolclass=pool.NullPool)
     71 
     72     connection = engine.connect()
     73     context.configure(connection=connection,
     74                       target_metadata=target_metadata,
     75                       process_revision_directives=process_revision_directives,
     76                       **current_app.extensions['migrate'].configure_args)
     77 
     78     try:
     79         with context.begin_transaction():
     80             context.run_migrations()
     81     finally:
     82         connection.close()
     83 
     84 if context.is_offline_mode():
     85     run_migrations_offline()
     86 else:
     87     run_migrations_online()