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')