summaryrefslogtreecommitdiff
path: root/src/mailman/database/alembic/versions/3002bac0c25a_dmarc_attributes.py
diff options
context:
space:
mode:
authorBarry Warsaw2017-01-04 15:10:55 +0000
committerBarry Warsaw2017-01-04 15:10:55 +0000
commit9ecb0d462b79bec42e82b6aecea8853262e15753 (patch)
treedc422ff2eec850387fcdb7a3c326f8d3a267a16a /src/mailman/database/alembic/versions/3002bac0c25a_dmarc_attributes.py
parent8cb4546b9a2bf87a3e2d465651686ca26a5404db (diff)
parentae3eeb642b452ee844ba7a2999361f31c3c327c7 (diff)
downloadmailman-9ecb0d462b79bec42e82b6aecea8853262e15753.tar.gz
mailman-9ecb0d462b79bec42e82b6aecea8853262e15753.tar.zst
mailman-9ecb0d462b79bec42e82b6aecea8853262e15753.zip
Diffstat (limited to 'src/mailman/database/alembic/versions/3002bac0c25a_dmarc_attributes.py')
-rw-r--r--src/mailman/database/alembic/versions/3002bac0c25a_dmarc_attributes.py70
1 files changed, 70 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..aa2d8610d
--- /dev/null
+++ b/src/mailman/database/alembic/versions/3002bac0c25a_dmarc_attributes.py
@@ -0,0 +1,70 @@
+"""dmarc_attributes
+
+Revision ID: 3002bac0c25a
+Revises: a46993b05703
+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, SAUnicodeLarge
+from mailman.interfaces.mailinglist import DMARCMitigateAction
+
+
+# revision identifiers, used by Alembic.
+revision = '3002bac0c25a'
+down_revision = 'a46993b05703'
+
+
+def upgrade():
+ if not exists_in_db(op.get_bind(),
+ 'mailinglist',
+ 'dmarc_mitigate_action'
+ ):
+ # SQLite may not have removed it when downgrading. It should be OK
+ # to just test one.
+ op.add_column('mailinglist', sa.Column(
+ 'dmarc_mitigate_action',
+ Enum(DMARCMitigateAction),
+ nullable=True))
+ op.add_column('mailinglist', sa.Column(
+ 'dmarc_mitigate_unconditionally',
+ sa.Boolean,
+ nullable=True))
+ op.add_column('mailinglist', sa.Column(
+ 'dmarc_moderation_notice',
+ SAUnicodeLarge(),
+ nullable=True))
+ op.add_column('mailinglist', sa.Column(
+ 'dmarc_wrapped_message_text',
+ SAUnicodeLarge(),
+ 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_mitigate_action', Enum(DMARCMitigateAction)),
+ sa.sql.column('dmarc_mitigate_unconditionally', sa.Boolean),
+ sa.sql.column('dmarc_moderation_notice', SAUnicodeLarge()),
+ sa.sql.column('dmarc_wrapped_message_text', SAUnicodeLarge()),
+ )
+ # These are all new attributes so just set defaults.
+ op.execute(mlist.update().values(dict(
+ dmarc_mitigate_action=op.inline_literal(
+ DMARCMitigateAction.no_mitigation),
+ dmarc_mitigate_unconditionally=op.inline_literal(False),
+ dmarc_moderation_notice=op.inline_literal(''),
+ dmarc_wrapped_message_text=op.inline_literal(''),
+ )))
+
+
+def downgrade():
+ with op.batch_alter_table('mailinglist') as batch_op:
+ batch_op.drop_column('dmarc_mitigate_action')
+ batch_op.drop_column('dmarc_mitigate_unconditionally')
+ batch_op.drop_column('dmarc_moderation_notice')
+ batch_op.drop_column('dmarc_wrapped_message_text')