mirror of
				https://gitlab.ub.uni-bielefeld.de/sfb1288inf/nopaque.git
				synced 2025-10-31 10:42:43 +00:00 
			
		
		
		
	Add Migrations
This commit is contained in:
		
							
								
								
									
										1
									
								
								migrations/README
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								migrations/README
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| Generic single-database configuration. | ||||
							
								
								
									
										45
									
								
								migrations/alembic.ini
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								migrations/alembic.ini
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,45 @@ | ||||
| # A generic, single database configuration. | ||||
|  | ||||
| [alembic] | ||||
| # template used to generate migration files | ||||
| # file_template = %%(rev)s_%%(slug)s | ||||
|  | ||||
| # set to 'true' to run the environment during | ||||
| # the 'revision' command, regardless of autogenerate | ||||
| # revision_environment = false | ||||
|  | ||||
|  | ||||
| # 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 | ||||
							
								
								
									
										96
									
								
								migrations/env.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										96
									
								
								migrations/env.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,96 @@ | ||||
| from __future__ import with_statement | ||||
|  | ||||
| import logging | ||||
| from logging.config import fileConfig | ||||
|  | ||||
| from sqlalchemy import engine_from_config | ||||
| from sqlalchemy import pool | ||||
|  | ||||
| from alembic import context | ||||
|  | ||||
| # 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) | ||||
| logger = logging.getLogger('alembic.env') | ||||
|  | ||||
| # add your model's MetaData object here | ||||
| # for 'autogenerate' support | ||||
| # from myapp import mymodel | ||||
| # target_metadata = mymodel.Base.metadata | ||||
| from flask import current_app | ||||
| config.set_main_option( | ||||
|     'sqlalchemy.url', current_app.config.get( | ||||
|         'SQLALCHEMY_DATABASE_URI').replace('%', '%%')) | ||||
| target_metadata = current_app.extensions['migrate'].db.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. | ||||
|  | ||||
|     """ | ||||
|  | ||||
|     # this callback is used to prevent an auto-migration from being generated | ||||
|     # when there are no changes to the schema | ||||
|     # reference: http://alembic.zzzcomputing.com/en/latest/cookbook.html | ||||
|     def process_revision_directives(context, revision, directives): | ||||
|         if getattr(config.cmd_opts, 'autogenerate', False): | ||||
|             script = directives[0] | ||||
|             if script.upgrade_ops.is_empty(): | ||||
|                 directives[:] = [] | ||||
|                 logger.info('No changes in schema detected.') | ||||
|  | ||||
|     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, | ||||
|             process_revision_directives=process_revision_directives, | ||||
|             **current_app.extensions['migrate'].configure_args | ||||
|         ) | ||||
|  | ||||
|         with context.begin_transaction(): | ||||
|             context.run_migrations() | ||||
|  | ||||
|  | ||||
| if context.is_offline_mode(): | ||||
|     run_migrations_offline() | ||||
| else: | ||||
|     run_migrations_online() | ||||
| @@ -1 +0,0 @@ | ||||
| # Not empty directory | ||||
							
								
								
									
										24
									
								
								migrations/script.py.mako
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								migrations/script.py.mako
									
									
									
									
									
										Normal file
									
								
							| @@ -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"} | ||||
							
								
								
									
										105
									
								
								migrations/versions/91ef50fe9f01_.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										105
									
								
								migrations/versions/91ef50fe9f01_.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,105 @@ | ||||
| """empty message | ||||
|  | ||||
| Revision ID: 91ef50fe9f01 | ||||
| Revises:  | ||||
| Create Date: 2019-10-17 09:37:36.995203 | ||||
|  | ||||
| """ | ||||
| from alembic import op | ||||
| import sqlalchemy as sa | ||||
|  | ||||
|  | ||||
| # revision identifiers, used by Alembic. | ||||
| revision = '91ef50fe9f01' | ||||
| down_revision = None | ||||
| branch_labels = None | ||||
| depends_on = None | ||||
|  | ||||
|  | ||||
| def upgrade(): | ||||
|     # ### commands auto generated by Alembic - please adjust! ### | ||||
|     op.create_table('roles', | ||||
|     sa.Column('id', sa.Integer(), nullable=False), | ||||
|     sa.Column('default', sa.Boolean(), nullable=True), | ||||
|     sa.Column('name', sa.String(length=64), nullable=True), | ||||
|     sa.Column('permissions', sa.Integer(), nullable=True), | ||||
|     sa.PrimaryKeyConstraint('id'), | ||||
|     sa.UniqueConstraint('name') | ||||
|     ) | ||||
|     op.create_index(op.f('ix_roles_default'), 'roles', ['default'], unique=False) | ||||
|     op.create_table('users', | ||||
|     sa.Column('id', sa.Integer(), nullable=False), | ||||
|     sa.Column('confirmed', sa.Boolean(), nullable=True), | ||||
|     sa.Column('email', sa.String(length=254), nullable=True), | ||||
|     sa.Column('password_hash', sa.String(length=128), nullable=True), | ||||
|     sa.Column('registration_date', sa.DateTime(), nullable=True), | ||||
|     sa.Column('role_id', sa.Integer(), nullable=True), | ||||
|     sa.Column('username', sa.String(length=64), nullable=True), | ||||
|     sa.Column('is_dark', sa.Boolean(), nullable=True), | ||||
|     sa.ForeignKeyConstraint(['role_id'], ['roles.id'], ), | ||||
|     sa.PrimaryKeyConstraint('id') | ||||
|     ) | ||||
|     op.create_index(op.f('ix_users_email'), 'users', ['email'], unique=True) | ||||
|     op.create_index(op.f('ix_users_username'), 'users', ['username'], unique=True) | ||||
|     op.create_table('corpora', | ||||
|     sa.Column('id', sa.Integer(), nullable=False), | ||||
|     sa.Column('creation_date', sa.DateTime(), nullable=True), | ||||
|     sa.Column('description', sa.String(length=255), nullable=True), | ||||
|     sa.Column('title', sa.String(length=32), nullable=True), | ||||
|     sa.Column('user_id', sa.Integer(), nullable=True), | ||||
|     sa.ForeignKeyConstraint(['user_id'], ['users.id'], ), | ||||
|     sa.PrimaryKeyConstraint('id') | ||||
|     ) | ||||
|     op.create_table('jobs', | ||||
|     sa.Column('id', sa.Integer(), nullable=False), | ||||
|     sa.Column('creation_date', sa.DateTime(), nullable=True), | ||||
|     sa.Column('description', sa.String(length=255), nullable=True), | ||||
|     sa.Column('end_date', sa.DateTime(), nullable=True), | ||||
|     sa.Column('mem_mb', sa.Integer(), nullable=True), | ||||
|     sa.Column('n_cores', sa.Integer(), nullable=True), | ||||
|     sa.Column('service', sa.String(length=64), nullable=True), | ||||
|     sa.Column('service_args', sa.String(length=255), nullable=True), | ||||
|     sa.Column('service_version', sa.String(length=16), nullable=True), | ||||
|     sa.Column('status', sa.String(length=16), nullable=True), | ||||
|     sa.Column('title', sa.String(length=32), nullable=True), | ||||
|     sa.Column('user_id', sa.Integer(), nullable=True), | ||||
|     sa.ForeignKeyConstraint(['user_id'], ['users.id'], ), | ||||
|     sa.PrimaryKeyConstraint('id') | ||||
|     ) | ||||
|     op.create_table('corpus_files', | ||||
|     sa.Column('id', sa.Integer(), nullable=False), | ||||
|     sa.Column('filename', sa.String(length=255), nullable=True), | ||||
|     sa.Column('corpus_id', sa.Integer(), nullable=True), | ||||
|     sa.ForeignKeyConstraint(['corpus_id'], ['corpora.id'], ), | ||||
|     sa.PrimaryKeyConstraint('id') | ||||
|     ) | ||||
|     op.create_table('job_inputs', | ||||
|     sa.Column('id', sa.Integer(), nullable=False), | ||||
|     sa.Column('filename', sa.String(length=255), nullable=True), | ||||
|     sa.Column('job_id', sa.Integer(), nullable=True), | ||||
|     sa.ForeignKeyConstraint(['job_id'], ['jobs.id'], ), | ||||
|     sa.PrimaryKeyConstraint('id') | ||||
|     ) | ||||
|     op.create_table('job_results', | ||||
|     sa.Column('id', sa.Integer(), nullable=False), | ||||
|     sa.Column('filename', sa.String(length=255), nullable=True), | ||||
|     sa.Column('job_id', sa.Integer(), nullable=True), | ||||
|     sa.ForeignKeyConstraint(['job_id'], ['jobs.id'], ), | ||||
|     sa.PrimaryKeyConstraint('id') | ||||
|     ) | ||||
|     # ### end Alembic commands ### | ||||
|  | ||||
|  | ||||
| def downgrade(): | ||||
|     # ### commands auto generated by Alembic - please adjust! ### | ||||
|     op.drop_table('job_results') | ||||
|     op.drop_table('job_inputs') | ||||
|     op.drop_table('corpus_files') | ||||
|     op.drop_table('jobs') | ||||
|     op.drop_table('corpora') | ||||
|     op.drop_index(op.f('ix_users_username'), table_name='users') | ||||
|     op.drop_index(op.f('ix_users_email'), table_name='users') | ||||
|     op.drop_table('users') | ||||
|     op.drop_index(op.f('ix_roles_default'), table_name='roles') | ||||
|     op.drop_table('roles') | ||||
|     # ### end Alembic commands ### | ||||
		Reference in New Issue
	
	Block a user