# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. """resample Revision ID: ab8c66efdd01 Revises: d7c1a0d6f2da Create Date: 2019-06-28 13:17:59.517089 """ # revision identifiers, used by Alembic. revision = "ab8c66efdd01" down_revision = "d7c1a0d6f2da" import json import logging from alembic import op from sqlalchemy import Column, Integer, Text from sqlalchemy.ext.declarative import declarative_base from superset import db Base = declarative_base() class Slice(Base): __tablename__ = "slices" id = Column(Integer, primary_key=True) params = Column(Text) def upgrade(): bind = op.get_bind() session = db.Session(bind=bind) for slc in session.query(Slice).all(): try: params = json.loads(slc.params) # Note that the resample params could be encoded as empty strings. if "resample_rule" in params: rule = params["resample_rule"] # Per the old logic how takes precedence over fill-method. Note that # due to UI options, alongside None, empty strings were viable choices # hence the truthiness checks. if rule: how = None if "resample_how" in params: how = params["resample_how"] if how: params["resample_method"] = how if not how and "fill_method" in params: fill_method = params["resample_fillmethod"] if fill_method: params["resample_method"] = fill_method # Ensure that the resample logic is fully defined. if not "resample_method" in params: del params["resample_rule"] else: del params["resample_rule"] # Finally remove any erroneous legacy fields. params.pop("resample_fillmethod", None) params.pop("resample_how", None) slc.params = json.dumps(params, sort_keys=True) except Exception as ex: logging.exception(ex) session.commit() session.close() def downgrade(): bind = op.get_bind() session = db.Session(bind=bind) for slc in session.query(Slice).all(): try: params = json.loads(slc.params) if "resample_method" in params: method = params["resample_method"] if method in ["asfreq", "bfill", "ffill"]: params["resample_fillmethod"] = method else: params["resample_how"] = method del params["resample_method"] slc.params = json.dumps(params, sort_keys=True) except Exception as ex: logging.exception(ex) session.commit() session.close()