summaryrefslogtreecommitdiff
path: root/src/mailman/database
diff options
context:
space:
mode:
Diffstat (limited to 'src/mailman/database')
-rw-r--r--src/mailman/database/alembic/versions/3002bac0c25a_dmarc_attributes.py83
1 files changed, 83 insertions, 0 deletions
diff --git a/src/mailman/database/alembic/versions/3002bac0c25a_dmarc_attributes.py b/src/mailman/database/alembic/versions/3002bac0c25a_dmarc_attributes.py
new file mode 100644
index 000000000..06fcecf0a
--- /dev/null
+++ b/src/mailman/database/alembic/versions/3002bac0c25a_dmarc_attributes.py
@@ -0,0 +1,83 @@
+"""dmarc_attributes
+
+Revision ID: 3002bac0c25a
+Revises: 448a93984c35
+Create Date: 2016-10-30 22:05:17.881880
+
+"""
+
+import sqlalchemy as sa
+
+from alembic import op
+from mailman.database.helpers import exists_in_db
+from mailman.database.types import Enum, SAUnicode
+from mailman.interfaces.mailinglist import DMARCModerationAction, FromIsList
+
+
+# revision identifiers, used by Alembic.
+revision = '3002bac0c25a'
+down_revision = '448a93984c35'
+
+
+def upgrade():
+ if not exists_in_db(op.get_bind(),
+ 'mailinglist',
+ 'dmarc_moderation_action'
+ ):
+ # SQLite may not have removed it when downgrading. It should be OK
+ # to just test one.
+ op.add_column('mailinglist', sa.Column(
+ 'dmarc_moderation_action',
+ Enum(DMARCModerationAction),
+ nullable=True))
+ op.add_column('mailinglist', sa.Column(
+ 'dmarc_quarantine_moderation_action',
+ sa.Boolean(),
+ nullable=True))
+ op.add_column('mailinglist', sa.Column(
+ 'dmarc_none_moderation_action',
+ sa.Boolean(),
+ nullable=True))
+ op.add_column('mailinglist', sa.Column(
+ 'dmarc_moderation_notice',
+ SAUnicode(),
+ nullable=True))
+ op.add_column('mailinglist', sa.Column(
+ 'dmarc_wrapped_message_text',
+ SAUnicode(),
+ nullable=True))
+ op.add_column('mailinglist', sa.Column(
+ 'from_is_list',
+ Enum(FromIsList),
+ nullable=True))
+ # Now migrate the data. Don't import the table definition from the
+ # models, it may break this migration when the model is updated in the
+ # future (see the Alembic doc).
+ mlist = sa.sql.table(
+ 'mailinglist',
+ sa.sql.column('dmarc_moderation_action', Enum(DMARCModerationAction)),
+ sa.sql.column('dmarc_quarantine_moderation_action', sa.Boolean()),
+ sa.sql.column('dmarc_none_moderation_action', sa.Boolean()),
+ sa.sql.column('dmarc_moderation_notice', SAUnicode()),
+ sa.sql.column('dmarc_wrapped_message_text', SAUnicode()),
+ sa.sql.column('from_is_list', Enum(FromIsList))
+ )
+ # These are all new attributes so just set defaults.
+ op.execute(mlist.update().values(dict(
+ dmarc_moderation_action=op.inline_literal(DMARCModerationAction.none),
+ dmarc_quarantine_moderation_action=op.inline_literal(True),
+ dmarc_none_moderation_action=op.inline_literal(False),
+ dmarc_moderation_notice=op.inline_literal(''),
+ dmarc_wrapped_message_text=op.inline_literal(''),
+ from_is_list=op.inline_literal(FromIsList.none),
+ )))
+
+
+def downgrade():
+ with op.batch_alter_table('mailinglist') as batch_op:
+ batch_op.drop_column('dmarc_moderation_action')
+ batch_op.drop_column('dmarc_quarantine_moderation_action')
+ batch_op.drop_column('dmarc_none_moderation_action')
+ batch_op.drop_column('dmarc_moderation_notice')
+ batch_op.drop_column('dmarc_wrapped_message_text')
+ batch_op.drop_column('from_is_list')