wrap filters/conditionals in a try-except block
allows accessing undefined fields without exception or locals().get(…) but hides mistakes/typos/etc by evaluating to False without feedback performance loss compared to the previous version without try-except is negligible (~20ns for me)
This commit is contained in:
@@ -134,19 +134,18 @@ class TestPredicate(unittest.TestCase):
|
||||
with self.assertRaises(SyntaxError):
|
||||
util.FilterPredicate("(")
|
||||
|
||||
with self.assertRaises(exception.FilterError):
|
||||
util.FilterPredicate("a > 1")(url, {"a": None})
|
||||
|
||||
with self.assertRaises(exception.FilterError):
|
||||
util.FilterPredicate("b > 1")(url, {"a": 2})
|
||||
self.assertFalse(
|
||||
util.FilterPredicate("a > 1")(url, {"a": None}))
|
||||
self.assertFalse(
|
||||
util.FilterPredicate("b > 1")(url, {"a": 2}))
|
||||
|
||||
pred = util.FilterPredicate(["a < 3", "b < 4", "c < 5"])
|
||||
self.assertTrue(pred(url, {"a": 2, "b": 3, "c": 4}))
|
||||
self.assertFalse(pred(url, {"a": 3, "b": 3, "c": 4}))
|
||||
self.assertFalse(pred(url, {"a": 2, "b": 4, "c": 4}))
|
||||
self.assertFalse(pred(url, {"a": 2, "b": 3, "c": 5}))
|
||||
with self.assertRaises(exception.FilterError):
|
||||
pred(url, {"a": 2})
|
||||
|
||||
self.assertFalse(pred(url, {"a": 2}))
|
||||
|
||||
def test_build_predicate(self):
|
||||
pred = util.build_predicate([])
|
||||
@@ -445,6 +444,7 @@ class TestOther(unittest.TestCase):
|
||||
self.assertEqual(expr({"a": 1, "b": 2, "c": 3}), 7)
|
||||
self.assertEqual(expr({"a": 9, "b": 9, "c": 9}), 90)
|
||||
|
||||
expr = util.compile_expression_raw("a + b * c")
|
||||
with self.assertRaises(NameError):
|
||||
expr()
|
||||
with self.assertRaises(NameError):
|
||||
|
||||
Reference in New Issue
Block a user