From 805f91d4a73684b7597846ad0ad00c587730b60c Mon Sep 17 00:00:00 2001 From: Omer Lachish Date: Sun, 17 Feb 2019 19:25:58 +0200 Subject: [PATCH] when working with a schema, fail in the case that there are parameters which are not part of the schema --- redash/utils/parameterized_query.py | 5 ++++- tests/utils/test_parameterized_query.py | 7 +++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/redash/utils/parameterized_query.py b/redash/utils/parameterized_query.py index ee2f645cda..ca487ea5ed 100644 --- a/redash/utils/parameterized_query.py +++ b/redash/utils/parameterized_query.py @@ -96,10 +96,13 @@ def apply(self, parameters): return self def _valid(self, name, value): + if not self.schema: + return True + definition = next((definition for definition in self.schema if definition["name"] == name), None) if not definition: - return True + return False validators = { "text": lambda value: isinstance(value, basestring), diff --git a/tests/utils/test_parameterized_query.py b/tests/utils/test_parameterized_query.py index 6828bc91c4..783907652d 100644 --- a/tests/utils/test_parameterized_query.py +++ b/tests/utils/test_parameterized_query.py @@ -45,6 +45,13 @@ def test_handles_objects(self): }) self.assertEqual(set([]), query.missing_params) + def test_raises_on_parameters_not_in_schema(self): + schema = [{"name": "bar", "type": "text"}] + query = ParameterizedQuery("foo", schema) + + with pytest.raises(InvalidParameterError): + query.apply({"qux": 7}) + def test_raises_on_invalid_text_parameters(self): schema = [{"name": "bar", "type": "text"}] query = ParameterizedQuery("foo", schema)