Skip to content

Commit

Permalink
fix: add None checking to cast_to_num (apache#10584)
Browse files Browse the repository at this point in the history
* fix: add None checking to cast_to_num

* fix doctest
  • Loading branch information
villebro authored and auxten committed Nov 20, 2020
1 parent 0a12c84 commit 02f7ac8
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 1 deletion.
6 changes: 5 additions & 1 deletion superset/utils/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,7 @@ def parse_js_uri_path_item(
return unquote_plus(item) if unquote and item else item


def cast_to_num(value: Union[float, int, str]) -> Optional[Union[float, int]]:
def cast_to_num(value: Optional[Union[float, int, str]]) -> Optional[Union[float, int]]:
"""Casts a value to an int/float
>>> cast_to_num('5')
Expand All @@ -222,13 +222,17 @@ def cast_to_num(value: Union[float, int, str]) -> Optional[Union[float, int]]:
10
>>> cast_to_num(10.1)
10.1
>>> cast_to_num(None) is None
True
>>> cast_to_num('this is not a string') is None
True
:param value: value to be converted to numeric representation
:returns: value cast to `int` if value is all digits, `float` if `value` is
decimal value and `None`` if it can't be converted
"""
if value is None:
return None
if isinstance(value, (int, float)):
return value
if value.isdigit():
Expand Down
9 changes: 9 additions & 0 deletions tests/utils_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
from superset.utils.cache_manager import CacheManager
from superset.utils.core import (
base_json_conv,
cast_to_num,
convert_legacy_filters_into_adhoc,
create_ssl_cert_file,
format_timedelta,
Expand Down Expand Up @@ -1368,6 +1369,14 @@ def test_schema_one_of_case_insensitive(self):
self.assertRaises(marshmallow.ValidationError, validator, "qwerty")
self.assertRaises(marshmallow.ValidationError, validator, 4)

def test_cast_to_num(self) -> None:
assert cast_to_num("5") == 5
assert cast_to_num("5.2") == 5.2
assert cast_to_num(10) == 10
assert cast_to_num(10.1) == 10.1
assert cast_to_num(None) is None
assert cast_to_num("this is not a string") is None

def test_get_form_data_token(self):
assert get_form_data_token({"token": "token_abcdefg1"}) == "token_abcdefg1"
generated_token = get_form_data_token({})
Expand Down

0 comments on commit 02f7ac8

Please sign in to comment.