diff --git a/migrations/README b/migrations/README index 6c36a3e0e..7c44eae44 100644 --- a/migrations/README +++ b/migrations/README @@ -1,7 +1,9 @@ Generic single-database configuration. -python application.py db migration to generate migration script. +python application.py db migrate to generate migration script. python application.py db upgrade to upgrade db with script. python application.py db downgrade to rollback db changes. + +python application.py db current to show current script. diff --git a/migrations/versions/0095_migrate_existing_svc_perms.py b/migrations/versions/0095_migrate_existing_svc_perms.py new file mode 100644 index 000000000..0211450f8 --- /dev/null +++ b/migrations/versions/0095_migrate_existing_svc_perms.py @@ -0,0 +1,39 @@ +"""empty message + +Revision ID: 0095_migrate_existing_svc_perms +Revises: 0094_job_stats_update +Create Date: 2017-05-23 18:13:03.532095 + +""" + +# revision identifiers, used by Alembic. +revision = '0095_migrate_existing_svc_perms' +down_revision = '0094_job_stats_update' + +from alembic import op +import sqlalchemy as sa + +migration_date = '2017-05-26 17:30:00.000000' + + +def upgrade(): + def get_values(permission): + return "SELECT id, '{0}', '{1}' FROM services WHERE "\ + "id NOT IN (SELECT service_id FROM service_permissions "\ + "WHERE service_id=id AND permission='{0}')".format(permission, migration_date) + + def get_values_if_flag(permission, flag): + return "SELECT id, '{0}', '{1}' FROM services WHERE "\ + "{2} AND id NOT IN (SELECT service_id FROM service_permissions "\ + "WHERE service_id=id AND permission='{0}')".format(permission, migration_date, flag) + + op.execute("INSERT INTO service_permissions (service_id, permission, created_at) {}".format(get_values('sms'))) + op.execute("INSERT INTO service_permissions (service_id, permission, created_at) {}".format(get_values('email'))) + op.execute("INSERT INTO service_permissions (service_id, permission, created_at) {}".format( + get_values_if_flag('letter', 'can_send_letters'))) + op.execute("INSERT INTO service_permissions (service_id, permission, created_at) {}".format( + get_values_if_flag('international_sms', 'can_send_international_sms'))) + + +def downgrade(): + op.execute("DELETE FROM service_permissions WHERE created_at = '{}'::timestamp".format(migration_date))