root / snf-pithos-backend / pithos / backends / lib / sqlalchemy / alembic / env.py @ 1ec05716
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() |