superset-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From grace...@apache.org
Subject [incubator-superset] branch master updated: add parent ids into Dashboard layout metadata (#6945)
Date Tue, 09 Apr 2019 22:42:05 GMT
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 <grace.guo@airbnb.com>
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


Mime
View raw message