def check(self, expression): if not isinstance(expression, str): raise InvalidExpression( "Python expressions must be defined as strings") if not expression: raise InvalidExpression("Empty python expression") try: tree = ast.parse(expression) except SyntaxError as e: raise e if not tree.body: raise InvalidExpression("Empty python expression") elif len(tree.body) > 1: raise InvalidExpression( "Python expressions must be a single line expression") start_node = tree.body[0] if not isinstance(start_node, ast.Expr): raise InvalidExpression( "Python string must be an expression: '%s' found" % start_node.__class__.__name__) self._check_node(start_node)
def _raise_not_allowed_node(self, node): raise InvalidExpression( "'%s' definition not allowed in python expressions" % node.__class__.__name__)