Statistics
| Branch: | Tag: | Revision:

root / snf-pithos-backend / pithos / backends / lib / sqlalchemy / alembic / env.py @ 4a7b190f

History | View | Annotate | Download (2.3 kB)

1 5f8bbf54 Sofia Papagiannaki
from __future__ import with_statement
2 5f8bbf54 Sofia Papagiannaki
from alembic import context
3 5f8bbf54 Sofia Papagiannaki
from sqlalchemy import engine_from_config, pool
4 5f8bbf54 Sofia Papagiannaki
from logging.config import fileConfig
5 4051c82a Kostas Papadimitriou
6 4051c82a Kostas Papadimitriou
try:
7 4051c82a Kostas Papadimitriou
    # pithos-app case
8 4051c82a Kostas Papadimitriou
    from synnefo.settings import PITHOS_BACKEND_DB_CONNECTION
9 4051c82a Kostas Papadimitriou
except ImportError:
10 4051c82a Kostas Papadimitriou
    try:
11 4051c82a Kostas Papadimitriou
        # plankton case
12 4051c82a Kostas Papadimitriou
        from synnefo.settings import BACKEND_DB_CONNECTION as \
13 4051c82a Kostas Papadimitriou
            PITHOS_BACKEND_DB_CONNECTION
14 4051c82a Kostas Papadimitriou
    except ImportError:
15 4051c82a Kostas Papadimitriou
        PITHOS_BACKEND_DB_CONNECTION = None
16 5f8bbf54 Sofia Papagiannaki
17 5f8bbf54 Sofia Papagiannaki
# this is the Alembic Config object, which provides
18 5f8bbf54 Sofia Papagiannaki
# access to the values within the .ini file in use.
19 5f8bbf54 Sofia Papagiannaki
config = context.config
20 5f8bbf54 Sofia Papagiannaki
21 44d80edf Kostas Papadimitriou
# Interpret the config file for Python logging.
22 5f8bbf54 Sofia Papagiannaki
# This line sets up loggers basically.
23 5f8bbf54 Sofia Papagiannaki
fileConfig(config.config_file_name)
24 5f8bbf54 Sofia Papagiannaki
25 5f8bbf54 Sofia Papagiannaki
# add your model's MetaData object here
26 5f8bbf54 Sofia Papagiannaki
# for 'autogenerate' support
27 5f8bbf54 Sofia Papagiannaki
# from myapp import mymodel
28 5f8bbf54 Sofia Papagiannaki
# target_metadata = mymodel.Base.metadata
29 5f8bbf54 Sofia Papagiannaki
target_metadata = None
30 5f8bbf54 Sofia Papagiannaki
31 5f8bbf54 Sofia Papagiannaki
# other values from the config, defined by the needs of env.py,
32 5f8bbf54 Sofia Papagiannaki
# can be acquired:
33 5f8bbf54 Sofia Papagiannaki
# my_important_option = config.get_main_option("my_important_option")
34 5f8bbf54 Sofia Papagiannaki
# ... etc.
35 5f8bbf54 Sofia Papagiannaki
36 44d80edf Kostas Papadimitriou
db = config.get_main_option("sqlalchemy.url", PITHOS_BACKEND_DB_CONNECTION)
37 44d80edf Kostas Papadimitriou
config.set_main_option("sqlalchemy.url", db)
38 44d80edf Kostas Papadimitriou
39 2715ade4 Sofia Papagiannaki
40 5f8bbf54 Sofia Papagiannaki
def run_migrations_offline():
41 5f8bbf54 Sofia Papagiannaki
    """Run migrations in 'offline' mode.
42 5f8bbf54 Sofia Papagiannaki

43 5f8bbf54 Sofia Papagiannaki
    This configures the context with just a URL
44 5f8bbf54 Sofia Papagiannaki
    and not an Engine, though an Engine is acceptable
45 5f8bbf54 Sofia Papagiannaki
    here as well.  By skipping the Engine creation
46 5f8bbf54 Sofia Papagiannaki
    we don't even need a DBAPI to be available.
47 44d80edf Kostas Papadimitriou

48 5f8bbf54 Sofia Papagiannaki
    Calls to context.execute() here emit the given string to the
49 5f8bbf54 Sofia Papagiannaki
    script output.
50 44d80edf Kostas Papadimitriou

51 5f8bbf54 Sofia Papagiannaki
    """
52 5f8bbf54 Sofia Papagiannaki
    url = config.get_main_option("sqlalchemy.url")
53 5f8bbf54 Sofia Papagiannaki
    context.configure(url=url)
54 5f8bbf54 Sofia Papagiannaki
55 5f8bbf54 Sofia Papagiannaki
    with context.begin_transaction():
56 5f8bbf54 Sofia Papagiannaki
        context.run_migrations()
57 5f8bbf54 Sofia Papagiannaki
58 2715ade4 Sofia Papagiannaki
59 5f8bbf54 Sofia Papagiannaki
def run_migrations_online():
60 5f8bbf54 Sofia Papagiannaki
    """Run migrations in 'online' mode.
61 5f8bbf54 Sofia Papagiannaki

62 5f8bbf54 Sofia Papagiannaki
    In this scenario we need to create an Engine
63 5f8bbf54 Sofia Papagiannaki
    and associate a connection with the context.
64 44d80edf Kostas Papadimitriou

65 5f8bbf54 Sofia Papagiannaki
    """
66 5f8bbf54 Sofia Papagiannaki
    engine = engine_from_config(
67 2715ade4 Sofia Papagiannaki
        config.get_section(config.config_ini_section),
68 2715ade4 Sofia Papagiannaki
        prefix='sqlalchemy.',
69 2715ade4 Sofia Papagiannaki
        poolclass=pool.NullPool)
70 5f8bbf54 Sofia Papagiannaki
71 5f8bbf54 Sofia Papagiannaki
    connection = engine.connect()
72 5f8bbf54 Sofia Papagiannaki
    context.configure(
73 2715ade4 Sofia Papagiannaki
        connection=connection,
74 2715ade4 Sofia Papagiannaki
        target_metadata=target_metadata
75 2715ade4 Sofia Papagiannaki
    )
76 5f8bbf54 Sofia Papagiannaki
77 5f8bbf54 Sofia Papagiannaki
    try:
78 5f8bbf54 Sofia Papagiannaki
        with context.begin_transaction():
79 5f8bbf54 Sofia Papagiannaki
            context.run_migrations()
80 5f8bbf54 Sofia Papagiannaki
    finally:
81 5f8bbf54 Sofia Papagiannaki
        connection.close()
82 5f8bbf54 Sofia Papagiannaki
83 5f8bbf54 Sofia Papagiannaki
if context.is_offline_mode():
84 5f8bbf54 Sofia Papagiannaki
    run_migrations_offline()
85 5f8bbf54 Sofia Papagiannaki
else:
86 5f8bbf54 Sofia Papagiannaki
    run_migrations_online()