This is an automated email from the ASF dual-hosted git repository.
graceguo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-superset.git
The following commit(s) were added to refs/heads/master by this push:
new 139f299 add parent ids into Dashboard layout metadata (#6945)
139f299 is described below
commit 139f299ab36facf9e9ff60022608af9c8445d67a
Author: Grace Guo <[email protected]>
AuthorDate: Tue Apr 9 15:41:57 2019 -0700
add parent ids into Dashboard layout metadata (#6945)
---
...69c0097a6_add_parent_ids_in_dashboard_layout.py | 120 +++++++++++++++++++++
superset/migrations/versions/c8beba38d316_.py | 38 +++++++
2 files changed, 158 insertions(+)
diff --git
a/superset/migrations/versions/80669c0097a6_add_parent_ids_in_dashboard_layout.py
b/superset/migrations/versions/80669c0097a6_add_parent_ids_in_dashboard_layout.py
new file mode 100644
index 0000000..534cecd
--- /dev/null
+++
b/superset/migrations/versions/80669c0097a6_add_parent_ids_in_dashboard_layout.py
@@ -0,0 +1,120 @@
+# 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.
+"""Add Parent ids in dashboard layout metadata
+
+Revision ID: 80669c0097a6
+Revises: c82ee8a39623
+Create Date: 2019-02-25 15:43:02.488328
+
+"""
+import json
+import logging
+
+from alembic import op
+from sqlalchemy import (
+ Column,
+ Integer,
+ Text,
+)
+from sqlalchemy.ext.declarative import declarative_base
+from sqlalchemy.orm import relationship
+from alembic import op
+import sqlalchemy as sa
+
+from superset import db
+
+# revision identifiers, used by Alembic.
+revision = '80669c0097a6'
+down_revision = 'c82ee8a39623'
+
+Base = declarative_base()
+
+
+class Dashboard(Base):
+ """Declarative class to do query in upgrade"""
+ __tablename__ = 'dashboards'
+ id = Column(Integer, primary_key=True)
+ position_json = Column(Text)
+
+
+def add_parent_ids(node, layout):
+ if node:
+ current_id = node.get('id')
+ parents = list(node.get('parents') or [])
+ child_ids = node.get('children')
+
+ if child_ids and len(child_ids) > 0:
+ parents.append(current_id)
+ for child_id in child_ids:
+ child_node = layout.get(child_id)
+ child_node['parents'] = parents
+ add_parent_ids(child_node, layout)
+
+
+def upgrade():
+ bind = op.get_bind()
+ session = db.Session(bind=bind)
+
+ dashboards = session.query(Dashboard).all()
+ for i, dashboard in enumerate(dashboards):
+ print('adding parents for dashboard layout, id = {} ({}/{})
>>>>'.format(
+ dashboard.id,
+ i + 1,
+ len(dashboards),
+ ))
+ try:
+ layout = json.loads(dashboard.position_json or '{}')
+ if layout and layout['ROOT_ID']:
+ add_parent_ids(layout['ROOT_ID'], layout)
+
+ dashboard.position_json = json.dumps(
+ layout, indent=None, separators=(',', ':'), sort_keys=True)
+ session.merge(dashboard)
+ except Exception as e:
+ logging.exception(e)
+
+ session.commit()
+ session.close()
+
+
+def downgrade():
+ bind = op.get_bind()
+ session = db.Session(bind=bind)
+
+ dashboards = session.query(Dashboard).all()
+ for i, dashboard in enumerate(dashboards):
+ print('remove parents from dashboard layout, id = {} ({}/{})
>>>>'.format(
+ dashboard.id,
+ i + 1,
+ len(dashboards),
+ ))
+ try:
+ layout = json.loads(dashboard.position_json or '{}')
+ for key, item in layout.items():
+ if not isinstance(item, dict):
+ continue
+ item.pop('parents', None)
+ layout[key] = item
+
+ dashboard.position_json = json.dumps(
+ layout, indent=None, separators=(',', ':'), sort_keys=True)
+ session.merge(dashboard)
+ except Exception as e:
+ logging.exception(e)
+
+ session.commit()
+ session.close()
diff --git a/superset/migrations/versions/c8beba38d316_.py
b/superset/migrations/versions/c8beba38d316_.py
new file mode 100644
index 0000000..056dd49
--- /dev/null
+++ b/superset/migrations/versions/c8beba38d316_.py
@@ -0,0 +1,38 @@
+# 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.
+"""empty message
+
+Revision ID: c8beba38d316
+Revises: ('80669c0097a6', '45e7da7cfeba')
+Create Date: 2019-04-04 13:17:34.790917
+
+"""
+
+# revision identifiers, used by Alembic.
+revision = 'c8beba38d316'
+down_revision = ('80669c0097a6', '45e7da7cfeba')
+
+from alembic import op
+import sqlalchemy as sa
+
+
+def upgrade():
+ pass
+
+
+def downgrade():
+ pass