You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by ma...@apache.org on 2019/03/21 04:41:41 UTC

[incubator-superset] branch master updated: Fix filter_box migration PR #6523 (#7066)

This is an automated email from the ASF dual-hosted git repository.

maximebeauchemin 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 b210742  Fix filter_box migration PR #6523 (#7066)
b210742 is described below

commit b210742ad24d01ca05bc58ca3342c90e301fe073
Author: Maxime Beauchemin <ma...@gmail.com>
AuthorDate: Wed Mar 20 21:41:33 2019 -0700

    Fix filter_box migration PR #6523 (#7066)
    
    * Fix filter_box migration PR #6523
    
    * Fix druid-related bug
---
 superset/connectors/druid/models.py                |  4 ++-
 .../versions/fb13d49b72f9_better_filters.py        | 40 +++++++++++----------
 tests/migration_tests.py                           | 42 ++++++++++++++++++++++
 3 files changed, 67 insertions(+), 19 deletions(-)

diff --git a/superset/connectors/druid/models.py b/superset/connectors/druid/models.py
index 5776790..3b22ade 100644
--- a/superset/connectors/druid/models.py
+++ b/superset/connectors/druid/models.py
@@ -1144,7 +1144,9 @@ class DruidDatasource(Model, BaseDatasource):
                     pre_qry['aggregations'] = aggs_dict
                     pre_qry['post_aggregations'] = post_aggs_dict
             else:
-                order_by = list(qry['aggregations'].keys())[0]
+                agg_keys = qry['aggregations'].keys()
+                order_by = list(agg_keys)[0] if agg_keys else None
+
             # Limit on the number of timeseries, doing a two-phases query
             pre_qry['granularity'] = 'all'
             pre_qry['threshold'] = min(row_limit,
diff --git a/superset/migrations/versions/fb13d49b72f9_better_filters.py b/superset/migrations/versions/fb13d49b72f9_better_filters.py
index 956766d..cac42c3 100644
--- a/superset/migrations/versions/fb13d49b72f9_better_filters.py
+++ b/superset/migrations/versions/fb13d49b72f9_better_filters.py
@@ -46,6 +46,27 @@ class Slice(Base):
     slice_name = Column(String(250))
 
 
+def upgrade_slice(slc):
+    params = json.loads(slc.params)
+    logging.info(f'Upgrading {slc.slice_name}')
+    cols = params.get('groupby')
+    metric = params.get('metric')
+    if cols:
+        flts = [{
+            'column': col,
+            'metric': metric,
+            'asc': False,
+            'clearable': True,
+            'multiple': True,
+        } for col in cols]
+        params['filter_configs'] = flts
+        if 'groupby' in params:
+            del params['groupby']
+        if 'metric' in params:
+            del params['metric']
+        slc.params = json.dumps(params, sort_keys=True)
+
+
 def upgrade():
     bind = op.get_bind()
     session = db.Session(bind=bind)
@@ -53,24 +74,7 @@ def upgrade():
     filter_box_slices = session.query(Slice).filter_by(viz_type='filter_box')
     for slc in filter_box_slices.all():
         try:
-            params = json.loads(slc.params)
-            logging.info(f'Upgrading {slc.slice_name}')
-            cols = params.get('groupby')
-            metrics = params.get('metrics')
-            if cols:
-                flts = [{
-                    'column': col,
-                    'metric': metrics[0] if metrics else None,
-                    'asc': False,
-                    'clearable': True,
-                    'multiple': True,
-                } for col in cols]
-                params['filter_configs'] = flts
-                if 'groupby' in params:
-                    del params['groupby']
-                if 'metrics' in params:
-                    del params['metrics']
-                slc.params = json.dumps(params, sort_keys=True)
+            upgrade_slice(slc)
         except Exception as e:
             logging.exception(e)
 
diff --git a/tests/migration_tests.py b/tests/migration_tests.py
new file mode 100644
index 0000000..530e006
--- /dev/null
+++ b/tests/migration_tests.py
@@ -0,0 +1,42 @@
+# 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.
+import json
+
+from superset.migrations.versions.fb13d49b72f9_better_filters import (
+    Slice, upgrade_slice,
+)
+from .base_tests import SupersetTestCase
+
+
+class MigrationTestCase(SupersetTestCase):
+
+    def test_upgrade_slice(self):
+        slc = Slice(
+            slice_name='FOO',
+            viz_type='filter_box',
+            params=json.dumps(dict(
+                metric='foo',
+                groupby=['bar'],
+            )),
+        )
+        upgrade_slice(slc)
+        params = json.loads(slc.params)
+        self.assertNotIn('metric', params)
+        self.assertIn('filter_configs', params)
+
+        cfg = params['filter_configs'][0]
+        self.assertEquals(cfg.get('metric'), 'foo')