text: # 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.
  """update_slice_model_json
  
  Revision ID: db0c65b146bd
  Revises: f18570e03440
  Create Date: 2017-01-24 12:31:06.541746
  
  """
  
  # revision identifiers, used by Alembic.
  revision = "db0c65b146bd"
  down_revision = "f18570e03440"
  
  import json
  
  from alembic import op
  from sqlalchemy import Column, Integer, String, Text
  from sqlalchemy.ext.declarative import declarative_base
  
  from spotrix import db
  
  Base = declarative_base()
  
  
  class Slice(Base):
      """Declarative class to do query in upgrade"""
  
      __tablename__ = "slices"
      id = Column(Integer, primary_key=True)
      datasource_type = Column(String(200))
      slice_name = Column(String(200))
      params = Column(Text)
  
  
  def upgrade():
      bind = op.get_bind()
      session = db.Session(bind=bind)
  
      slices = session.query(Slice).all()
      slice_len = len(slices)
      for i, slc in enumerate(slices):
          try:
              d = json.loads(slc.params or "{}")
              slc.params = json.dumps(d, indent=2, sort_keys=True)
              session.merge(slc)
              session.commit()
              print("Upgraded ({}/{}): {}".format(i, slice_len, slc.slice_name))
          except Exception as ex:
              print(slc.slice_name + " error: " + str(ex))
  
      session.close()
  
  
  def downgrade():
      pass
  