migrations/versions/73beceabb948_bring_back_null_schedule.py (37 lines of code) (raw):
"""bring_back_null_schedule
Revision ID: 73beceabb948
Revises: e7f8a917aa8e
Create Date: 2019-01-17 13:22:21.729334
"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import postgresql
from sqlalchemy.sql import table
from redash.models import MutableDict, PseudoJSON
# revision identifiers, used by Alembic.
revision = "73beceabb948"
down_revision = "e7f8a917aa8e"
branch_labels = None
depends_on = None
def is_empty_schedule(schedule):
if schedule is None:
return False
if schedule == {}:
return True
if (
schedule.get("interval") is None
and schedule.get("until") is None
and schedule.get("day_of_week") is None
and schedule.get("time") is None
):
return True
return False
def upgrade():
op.alter_column("queries", "schedule", nullable=True, server_default=None)
queries = table(
"queries",
sa.Column("id", sa.Integer, primary_key=True),
sa.Column("schedule", MutableDict.as_mutable(PseudoJSON)),
)
conn = op.get_bind()
for query in conn.execute(queries.select()):
if is_empty_schedule(query.schedule):
conn.execute(
queries.update().where(queries.c.id == query.id).values(schedule=None)
)
def downgrade():
pass