diff --git a/panel/tests/test_util.py b/panel/tests/test_util.py index 4d9db1e4d5..3d33bae40d 100644 --- a/panel/tests/test_util.py +++ b/panel/tests/test_util.py @@ -4,7 +4,7 @@ from panel.io.notebook import render_mimebundle from panel.pane import PaneBase -from panel.util import get_method_owner, abbreviated_repr +from panel.util import get_method_owner, abbreviated_repr, parse_query def test_get_method_owner_class(): @@ -37,3 +37,15 @@ def test_abbreviated_repr_list(): def test_abbreviated_repr_ordereddict(): assert (abbreviated_repr(OrderedDict([('key', 'some really, really long string')])) == "OrderedDict([('key', ...])") + + +def test_parse_query(): + query = '?bool=true&int=2&float=3.0&json=["a"%2C+"b"]' + expected_results = { + "bool": True, + "int": 2, + "float": 3.0, + "json": ["a", "b"], + } + results = parse_query(query) + assert expected_results == results diff --git a/panel/util.py b/panel/util.py index 631b9a3b2d..25dc61e579 100644 --- a/panel/util.py +++ b/panel/util.py @@ -295,6 +295,8 @@ def parse_query(query): query[k] = float(v) elif v.startswith('[') or v.startswith('{'): query[k] = json.loads(v) + elif v.lower() in ("true", "false"): + query[k] = v.lower() == "true" return query