1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
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')
|