mirror of
https://github.com/apache/superset.git
synced 2026-05-12 19:35:17 +00:00
* Fix filter_box migration PR #6523
* Fix druid-related bug
(cherry picked from commit b210742ad2)
This commit is contained in:
committed by
Grace Guo
parent
d326ac7d6c
commit
fe78b4ece0
@@ -1144,7 +1144,9 @@ class DruidDatasource(Model, BaseDatasource):
|
|||||||
pre_qry['aggregations'] = aggs_dict
|
pre_qry['aggregations'] = aggs_dict
|
||||||
pre_qry['post_aggregations'] = post_aggs_dict
|
pre_qry['post_aggregations'] = post_aggs_dict
|
||||||
else:
|
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
|
# Limit on the number of timeseries, doing a two-phases query
|
||||||
pre_qry['granularity'] = 'all'
|
pre_qry['granularity'] = 'all'
|
||||||
pre_qry['threshold'] = min(row_limit,
|
pre_qry['threshold'] = min(row_limit,
|
||||||
|
|||||||
@@ -46,6 +46,27 @@ class Slice(Base):
|
|||||||
slice_name = Column(String(250))
|
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():
|
def upgrade():
|
||||||
bind = op.get_bind()
|
bind = op.get_bind()
|
||||||
session = db.Session(bind=bind)
|
session = db.Session(bind=bind)
|
||||||
@@ -53,24 +74,7 @@ def upgrade():
|
|||||||
filter_box_slices = session.query(Slice).filter_by(viz_type='filter_box')
|
filter_box_slices = session.query(Slice).filter_by(viz_type='filter_box')
|
||||||
for slc in filter_box_slices.all():
|
for slc in filter_box_slices.all():
|
||||||
try:
|
try:
|
||||||
params = json.loads(slc.params)
|
upgrade_slice(slc)
|
||||||
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)
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.exception(e)
|
logging.exception(e)
|
||||||
|
|
||||||
|
|||||||
42
tests/migration_tests.py
Normal file
42
tests/migration_tests.py
Normal file
@@ -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')
|
||||||
Reference in New Issue
Block a user