From c87be0f98295d64addc01529999996b566c80f2c Mon Sep 17 00:00:00 2001 From: Leo Hemsted Date: Tue, 25 Apr 2017 16:29:07 +0100 Subject: [PATCH] add sent notification status --- .../00xx_add_sent_notification_status.py | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 migrations/versions/00xx_add_sent_notification_status.py diff --git a/migrations/versions/00xx_add_sent_notification_status.py b/migrations/versions/00xx_add_sent_notification_status.py new file mode 100644 index 000000000..60a4d3a2e --- /dev/null +++ b/migrations/versions/00xx_add_sent_notification_status.py @@ -0,0 +1,60 @@ +"""empty message + +Revision ID: 00xx_add_sent_notification_status +Revises: 0075_create_rates_table +Create Date: 2017-04-24 16:55:20.731069 + +""" + +# revision identifiers, used by Alembic. +revision = '00xx_sent_notification_status' +down_revision = '0075_create_rates_table' + +from alembic import op +import sqlalchemy as sa + +enum_name = 'notify_status_type' +tmp_name = 'tmp_' + enum_name + +old_options = ( + 'created', + 'sending', + 'delivered', + 'pending', + 'failed', + 'technical-failure', + 'temporary-failure', + 'permanent-failure' +) +new_options = old_options + ('sent',) + +old_type = sa.Enum(*old_options, name=enum_name) +new_type = sa.Enum(*new_options, name=enum_name) + +alter_str = 'ALTER TABLE {table} ALTER COLUMN status TYPE {enum} USING status::text::notify_status_type ' + +def upgrade(): + op.execute('ALTER TYPE {enum} RENAME TO {tmp_name}'.format(enum=enum_name, tmp_name=tmp_name)) + + new_type.create(op.get_bind()) + op.execute(alter_str.format(table='notifications', enum=enum_name)) + op.execute(alter_str.format(table='notification_history', enum=enum_name)) + + op.execute('DROP TYPE ' + tmp_name) + + +def downgrade(): + op.execute('ALTER TYPE {enum} RENAME TO {tmp_name}'.format(enum=enum_name, tmp_name=tmp_name)) + + # Convert 'sent' template into 'sending' + update_str = "UPDATE TABLE {table} SET status='sending' where status='sent'" + + op.execute(update_str.format(table='notifications')) + op.execute(update_str.format(table='notification_history')) + + old_type.create(op.get_bind()) + + op.execute(alter_str.format(table='notifications', enum=enum_name)) + op.execute(alter_str.format(table='notification_history', enum=enum_name)) + + op.execute('DROP TYPE ' + tmp_name)