def __validate_expression(expression: str): try: tree = ast.parse(expression, mode="eval") valid = validate_exp(tree) # pylint: disable=broad-except except Exception: return False return valid
def test_validate_exp(self): stmt = ast.parse("1", mode="single") with self.assertRaises(ValueError): validate_exp(stmt) suite = ast.parse("a; b", mode="exec") with self.assertRaises(ValueError): validate_exp(suite) def validate_(source): return validate_exp(ast.parse(source, mode="eval")) self.assertTrue(validate_("a")) self.assertTrue(validate_("a + 1")) self.assertTrue(validate_("a < 1")) self.assertTrue(validate_("1 < a")) self.assertTrue(validate_("1 < a < 10")) self.assertTrue(validate_("a and b")) self.assertTrue(validate_("not a")) self.assertTrue(validate_("a if b else c")) self.assertTrue(validate_("f(x)")) self.assertTrue(validate_("f(g(x)) + g(x)")) self.assertTrue(validate_("f(x, r=b)")) self.assertTrue(validate_("a[b]")) self.assertTrue(validate_("a in {'a', 'b'}")) self.assertTrue(validate_("{}")) self.assertTrue(validate_("{'a': 1}")) self.assertTrue(validate_("()")) self.assertTrue(validate_("[]")) with self.assertRaises(ValueError): validate_("[a for a in s]") with self.assertRaises(ValueError): validate_("(a for a in s)") with self.assertRaises(ValueError): validate_("{a for a in s}") with self.assertRaises(ValueError): validate_("{a:1 for a in s}")
def validate_(source): return validate_exp(ast.parse(source, mode="eval"))