Asterisk - The Open Source Telephony Project GIT-master-f36a736
10aedae86a32_add_outgoing_enum_va.py
Go to the documentation of this file.
2# Asterisk -- An open source telephony toolkit.
3#
4# Copyright (C) 2014, Jonathan Rose
5#
6# Jonathan R. Rose <jrose@digium.com>
7#
8# See http://www.asterisk.org for more information about
9# the Asterisk project. Please do not directly contact
10# any of the maintainers of this project for assistance;
11# the project provides a web site, mailing lists and IRC
12# channels for your use.
13#
14# This program is free software, distributed under the terms of
15# the GNU General Public License Version 2. See the LICENSE file
16# at the top of the source tree.
17#
18
19"""Add Outgoing enum value to sippeers directmedia
20
21Revision ID: 10aedae86a32
22Revises: 5950038a6ead
23Create Date: 2014-09-19 16:03:13.469436
24
25"""
26
27# revision identifiers, used by Alembic.
28revision = '10aedae86a32'
29down_revision = '5950038a6ead'
30
31from alembic import op
32from sqlalchemy.dialects.postgresql import ENUM
33import sqlalchemy as sa
34
35OLD_ENUM = ['yes', 'no', 'nonat', 'update']
36NEW_ENUM = ['yes', 'no', 'nonat', 'update', 'outgoing']
37
38old_type = sa.Enum(*OLD_ENUM, name='sip_directmedia_values')
39new_type = sa.Enum(*NEW_ENUM, name='sip_directmedia_values_v2')
40
41tcr = sa.sql.table('sippeers', sa.Column('directmedia', new_type,
42 nullable=True))
43
44def upgrade():
45 context = op.get_context()
46
47 # Upgrading to this revision WILL clear your directmedia values.
48 if context.bind.dialect.name != 'postgresql':
49 op.alter_column('sippeers', 'directmedia',
50 type_=new_type,
51 existing_type=old_type)
52 else:
53 enum = ENUM("yes", "no", "nonat", "update", "outgoing",
54 name="sip_directmedia_values_v2")
55 enum.create(op.get_bind(), checkfirst=False)
56
57 op.execute('ALTER TABLE sippeers ALTER COLUMN directmedia TYPE'
58 ' sip_directmedia_values_v2 USING'
59 ' directmedia::text::sip_directmedia_values_v2')
60
61 ENUM(name="sip_directmedia_values").drop(op.get_bind(), checkfirst=False)
62
64 context = op.get_context()
65
66 op.execute(tcr.update().where(tcr.c.directmedia==u'outgoing')
67 .values(directmedia=None))
68
69 if context.bind.dialect.name != 'postgresql':
70 op.alter_column('sippeers', 'directmedia',
71 type_=old_type,
72 existing_type=new_type)
73 else:
74 enum = ENUM("yes", "no", "nonat", "update",
75 name="sip_directmedia_values")
76 enum.create(op.get_bind(), checkfirst=False)
77
78 op.execute('ALTER TABLE sippeers ALTER COLUMN directmedia TYPE'
79 ' sip_directmedia_values USING'
80 ' directmedia::text::sip_directmedia_values')
81
82 ENUM(name="sip_directmedia_values_v2").drop(op.get_bind(),
83 checkfirst=False)