"""Add granularity to watching repos Revision ID: d4d2c5aa8a0 Revises: 4255158a6913 Create Date: 2017-04-28 14:39:09.746953 """ # revision identifiers, used by Alembic. revision = 'd4d2c5aa8a0' down_revision = '4255158a6913' from alembic import op import sqlalchemy as sa # A helper table that is a hybrid with both states. This is used for data # migrations later on. watcher_helper = sa.Table( 'watchers', sa.MetaData(), sa.Column('id', sa.Integer, primary_key=True), sa.Column('watch_issues', sa.Boolean), sa.Column('watch_commits', sa.Boolean), sa.Column('watch', sa.Boolean), ) def upgrade(): op.add_column('watchers', sa.Column('watch_commits', sa.Boolean(), nullable=True)) op.add_column('watchers', sa.Column('watch_issues', sa.Boolean(), nullable=True)) # This section is to update the `watch_issues` and `watch_commits` columns # with the value of `watch` connection = op.get_bind() for watcher in connection.execute(watcher_helper.select()): connection.execute( watcher_helper.update().where( watcher_helper.c.id == watcher.id ).values( watch_issues=watcher.watch, watch_commits=False ) ) with op.batch_alter_table('watchers') as b: # Set nullable to False now that we've set values b.alter_column('watch_issues', nullable=False) b.alter_column('watch_commits', nullable=False) # Remove the watch column b.drop_column('watch') def downgrade(): op.add_column('watchers', sa.Column('watch', sa.BOOLEAN(), nullable=True)) # This section is to update the `watch` column with the value of # `watch_issues` connection = op.get_bind() for watcher in connection.execute(watcher_helper.select()): connection.execute( watcher_helper.update().where( watcher_helper.c.id == watcher.id ).values( watch=watcher.watch_issues ) ) with op.batch_alter_table('watchers') as b: # Set nullable to False now that we've set values b.alter_column('watch', nullable=False) # Drop the added columns b.drop_column('watch_issues') b.drop_column('watch_commits')