Source code for thoth.storages.data.alembic.versions.83e2900c3721_add_performance_and_security_enums_for_
"""Add performance and security enums for recommendation types
Revision ID: 83e2900c3721
Revises: d6d0b20ec650
Create Date: 2020-08-19 06:49:24.347264+00:00
"""
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = "83e2900c3721"
down_revision = "d6d0b20ec650"
branch_labels = None
depends_on = None
# Solution based on https://stackoverflow.com/a/33617845
name = "recommendation_type"
tmp_name = "tmp_" + name
old_options = ("STABLE", "TESTING", "LATEST")
new_options = sorted(old_options + ("PERFORMANCE", "SECURITY"))
new_type = sa.Enum(*new_options, name=name)
old_type = sa.Enum(*old_options, name=name)
tcr = sa.sql.table("adviser_run", sa.Column("recommendation_type", new_type, nullable=False))
[docs]def upgrade():
op.execute("ALTER TYPE " + name + " RENAME TO " + tmp_name)
new_type.create(op.get_bind())
op.execute(
"ALTER TABLE adviser_run ALTER COLUMN recommendation_type "
+ "TYPE "
+ name
+ " USING recommendation_type::text::"
+ name
)
op.execute("DROP TYPE " + tmp_name)
[docs]def downgrade():
# Convert 'performance' recommendation type into 'stable'
# Convert 'security' recommendation type into 'stable'
op.execute(tcr.update().where(tcr.c.recommendation_type == "PERFORMANCE").values(recommendation_type="STABLE"))
op.execute(tcr.update().where(tcr.c.recommendation_type == "SECURITY").values(recommendation_type="STABLE"))
op.execute("ALTER TYPE " + name + " RENAME TO " + tmp_name)
old_type.create(op.get_bind())
op.execute(
"ALTER TABLE adviser_run ALTER COLUMN recommendation_type "
+ "TYPE "
+ name
+ " USING recommendation_type::text::"
+ name
)
op.execute("DROP TYPE " + tmp_name)