From ec1f0221cd48bb168d0280f55082832d73583f04 Mon Sep 17 00:00:00 2001 From: vera-liu Date: Fri, 24 Feb 2017 17:21:28 -0800 Subject: [PATCH] Parse filter values for possible integers and floats (#2263) --- superset/models.py | 2 ++ superset/utils.py | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/superset/models.py b/superset/models.py index 7a28ce3bb5..4812a2408c 100644 --- a/superset/models.py +++ b/superset/models.py @@ -1393,6 +1393,7 @@ class SqlaTable(Model, Datasource, AuditMixinNullable, ImportMixin): col_obj = cols[col] if op in ('in', 'not in'): values = [types.strip("'").strip('"') for types in eq] + values = [utils.js_string_to_num(s) for s in values] cond = col_obj.sqla_col.in_(values) if op == 'not in': cond = ~cond @@ -2574,6 +2575,7 @@ class DruidDatasource(Model, AuditMixinNullable, Datasource, ImportMixin): fields = [] # Distinguish quoted values with regular value types values = [types.replace("'", '') for types in eq] + values = [utils.js_string_to_num(s) for s in values] if len(values) > 1: for s in values: s = s.strip() diff --git a/superset/utils.py b/superset/utils.py index 4eea55d8b0..9dfd3296ec 100644 --- a/superset/utils.py +++ b/superset/utils.py @@ -126,6 +126,14 @@ class memoized(object): # noqa def js_string_to_python(item): return None if item in ('null', 'undefined') else item +def js_string_to_num(item): + if item.isdigit(): + return int(item) + s = item + try: + s = float(item) + except ValueError: + return s class DimSelector(Having): def __init__(self, **args):