Added support for alembic migrations
							parent
							
								
									4fc741f01c
								
							
						
					
					
						commit
						57be81f31a
					
				| @ -0,0 +1,74 @@ | |||||||
|  | # A generic, single database configuration. | ||||||
|  | 
 | ||||||
|  | [alembic] | ||||||
|  | # path to migration scripts | ||||||
|  | script_location = migrations | ||||||
|  | 
 | ||||||
|  | # template used to generate migration files | ||||||
|  | # file_template = %%(rev)s_%%(slug)s | ||||||
|  | 
 | ||||||
|  | # timezone to use when rendering the date | ||||||
|  | # within the migration file as well as the filename. | ||||||
|  | # string value is passed to dateutil.tz.gettz() | ||||||
|  | # leave blank for localtime | ||||||
|  | # timezone = | ||||||
|  | 
 | ||||||
|  | # max length of characters to apply to the | ||||||
|  | # "slug" field | ||||||
|  | #truncate_slug_length = 40 | ||||||
|  | 
 | ||||||
|  | # set to 'true' to run the environment during | ||||||
|  | # the 'revision' command, regardless of autogenerate | ||||||
|  | # revision_environment = false | ||||||
|  | 
 | ||||||
|  | # set to 'true' to allow .pyc and .pyo files without | ||||||
|  | # a source .py file to be detected as revisions in the | ||||||
|  | # versions/ directory | ||||||
|  | # sourceless = false | ||||||
|  | 
 | ||||||
|  | # version location specification; this defaults | ||||||
|  | # to migrations/versions.  When using multiple version | ||||||
|  | # directories, initial revisions must be specified with --version-path | ||||||
|  | # version_locations = %(here)s/bar %(here)s/bat migrations/versions | ||||||
|  | 
 | ||||||
|  | # the output encoding used when revision files | ||||||
|  | # are written from script.py.mako | ||||||
|  | # output_encoding = utf-8 | ||||||
|  | 
 | ||||||
|  | sqlalchemy.url = driver://user:pass@localhost/dbname | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | # Logging configuration | ||||||
|  | [loggers] | ||||||
|  | keys = root,sqlalchemy,alembic | ||||||
|  | 
 | ||||||
|  | [handlers] | ||||||
|  | keys = console | ||||||
|  | 
 | ||||||
|  | [formatters] | ||||||
|  | keys = generic | ||||||
|  | 
 | ||||||
|  | [logger_root] | ||||||
|  | level = WARN | ||||||
|  | handlers = console | ||||||
|  | qualname = | ||||||
|  | 
 | ||||||
|  | [logger_sqlalchemy] | ||||||
|  | level = WARN | ||||||
|  | handlers = | ||||||
|  | qualname = sqlalchemy.engine | ||||||
|  | 
 | ||||||
|  | [logger_alembic] | ||||||
|  | level = INFO | ||||||
|  | handlers = | ||||||
|  | qualname = alembic | ||||||
|  | 
 | ||||||
|  | [handler_console] | ||||||
|  | class = StreamHandler | ||||||
|  | args = (sys.stderr,) | ||||||
|  | level = NOTSET | ||||||
|  | formatter = generic | ||||||
|  | 
 | ||||||
|  | [formatter_generic] | ||||||
|  | format = %(levelname)-5.5s [%(name)s] %(message)s | ||||||
|  | datefmt = %H:%M:%S | ||||||
| @ -0,0 +1 @@ | |||||||
|  | Generic single-database configuration. | ||||||
| @ -0,0 +1,71 @@ | |||||||
|  | from __future__ import with_statement | ||||||
|  | from alembic import context | ||||||
|  | from sqlalchemy import engine_from_config, pool | ||||||
|  | from logging.config import fileConfig | ||||||
|  | from cookie_api import Base | ||||||
|  | 
 | ||||||
|  | # 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. | ||||||
|  | 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 = Base.metadata | ||||||
|  | 
 | ||||||
|  | # 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. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 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") | ||||||
|  |     context.configure( | ||||||
|  |         url=url, target_metadata=target_metadata, literal_binds=True) | ||||||
|  | 
 | ||||||
|  |     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. | ||||||
|  | 
 | ||||||
|  |     """ | ||||||
|  |     connectable = engine_from_config( | ||||||
|  |         config.get_section(config.config_ini_section), | ||||||
|  |         prefix='sqlalchemy.', | ||||||
|  |         poolclass=pool.NullPool) | ||||||
|  | 
 | ||||||
|  |     with connectable.connect() as connection: | ||||||
|  |         context.configure( | ||||||
|  |             connection=connection, | ||||||
|  |             target_metadata=target_metadata | ||||||
|  |         ) | ||||||
|  | 
 | ||||||
|  |         with context.begin_transaction(): | ||||||
|  |             context.run_migrations() | ||||||
|  | 
 | ||||||
|  | if context.is_offline_mode(): | ||||||
|  |     run_migrations_offline() | ||||||
|  | else: | ||||||
|  |     run_migrations_online() | ||||||
| @ -0,0 +1,24 @@ | |||||||
|  | """${message} | ||||||
|  | 
 | ||||||
|  | Revision ID: ${up_revision} | ||||||
|  | Revises: ${down_revision | comma,n} | ||||||
|  | Create Date: ${create_date} | ||||||
|  | 
 | ||||||
|  | """ | ||||||
|  | from alembic import op | ||||||
|  | import sqlalchemy as sa | ||||||
|  | ${imports if imports else ""} | ||||||
|  | 
 | ||||||
|  | # revision identifiers, used by Alembic. | ||||||
|  | revision = ${repr(up_revision)} | ||||||
|  | down_revision = ${repr(down_revision)} | ||||||
|  | branch_labels = ${repr(branch_labels)} | ||||||
|  | depends_on = ${repr(depends_on)} | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def upgrade(): | ||||||
|  |     ${upgrades if upgrades else "pass"} | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def downgrade(): | ||||||
|  |     ${downgrades if downgrades else "pass"} | ||||||
| @ -0,0 +1,28 @@ | |||||||
|  | """initial models | ||||||
|  | 
 | ||||||
|  | Revision ID: 227892845cde | ||||||
|  | Revises:  | ||||||
|  | Create Date: 2018-01-15 14:58:17.931063 | ||||||
|  | 
 | ||||||
|  | """ | ||||||
|  | from alembic import op | ||||||
|  | import sqlalchemy as sa | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | # revision identifiers, used by Alembic. | ||||||
|  | revision = '227892845cde' | ||||||
|  | down_revision = None | ||||||
|  | branch_labels = None | ||||||
|  | depends_on = None | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def upgrade(): | ||||||
|  |     # ### commands auto generated by Alembic - please adjust! ### | ||||||
|  |     pass | ||||||
|  |     # ### end Alembic commands ### | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def downgrade(): | ||||||
|  |     # ### commands auto generated by Alembic - please adjust! ### | ||||||
|  |     pass | ||||||
|  |     # ### end Alembic commands ### | ||||||
| @ -0,0 +1,30 @@ | |||||||
|  | """Added confirmed to user | ||||||
|  | 
 | ||||||
|  | Revision ID: 82595a1e5193 | ||||||
|  | Revises: 227892845cde | ||||||
|  | Create Date: 2018-01-15 15:34:46.028181 | ||||||
|  | 
 | ||||||
|  | """ | ||||||
|  | from alembic import op | ||||||
|  | import sqlalchemy as sa | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | # revision identifiers, used by Alembic. | ||||||
|  | revision = '82595a1e5193' | ||||||
|  | down_revision = '227892845cde' | ||||||
|  | branch_labels = None | ||||||
|  | depends_on = None | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def upgrade(): | ||||||
|  |     # ### commands auto generated by Alembic - please adjust! ### | ||||||
|  |     op.add_column('users', sa.Column('confirmed', sa.Boolean())) | ||||||
|  |     op.execute('UPDATE users SET confirmed=FALSE') | ||||||
|  |     op.alter_column('users', 'confirmed', nullable=False) | ||||||
|  |     # ### end Alembic commands ### | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def downgrade(): | ||||||
|  |     # ### commands auto generated by Alembic - please adjust! ### | ||||||
|  |     op.drop_column('users', 'confirmed') | ||||||
|  |     # ### end Alembic commands ### | ||||||
					Loading…
					
					
				
		Reference in New Issue