def test_compile__compile_restricted_eval__1(): """It compiles code as an Expression. Function definitions are not allowed in Expressions. """ result = compile_restricted_eval(FUNCTION_DEF) assert result.errors == ( "Line 1: SyntaxError: invalid syntax at statement: 'def a():'", )
def __init__(self, name, expr, engine): self.expr = expr = expr.strip().replace('\n', ' ') code, err, warn, use = compile_restricted_eval(expr, str(self)) if err: raise CompilerError, ('Python expression error:\n%s' % '\n'.join(err) ) self._f_varnames = use.keys() self._code = code
def __init__(self, name, expr, engine): self.text = self.expr = text = expr.strip().replace('\n', ' ') code, err, warn, use = compile_restricted_eval(text, self.__class__.__name__) if err: raise engine.getCompilerError()('Python expression error:\n%s' % '\n'.join(err)) self._varnames = list(use.keys()) self._code = code
def __init__(self, name, expr, engine): self.text = self.expr = text = expr.strip().replace('\n', ' ') code, err, warn, use = compile_restricted_eval( text, self.__class__.__name__) if err: raise engine.getCompilerError()( 'Python expression error:\n%s' % '\n'.join(err)) self._varnames = list(use.keys()) self._code = code
def __init__(self, name, expr, engine): self.text = self.expr = text = expr.strip().replace('\n', ' ') # Unicode expression are not handled properly by RestrictedPython # We convert the expression to UTF-8 (ajung) if isinstance(text, unicode): text = text.encode('utf-8') code, err, warn, use = compile_restricted_eval(text, self.__class__.__name__) if err: raise engine.getCompilerError()('Python expression error:\n%s' % '\n'.join(err)) self._varnames = use.keys() self._code = code
def prepRestrictedCode(self): if self.rcode is None: if PROFILE: from time import clock start = clock() co, err, warn, used = compile_restricted_eval( self.expr, '<string>') if PROFILE: end = clock() print 'prepRestrictedCode: %d ms for %s' % ( (end - start) * 1000, `self.expr`) if err: raise SyntaxError, err[0] self.used = tuple(used.keys()) self.rcode = co
def prepRestrictedCode(self): if self.rcode is None: global compile_restricted_eval if compile_restricted_eval is None: # Late binding because this will import the whole # compiler suite. from RestrictedPython import compile_restricted_eval if PROFILE: from time import clock start = clock() co, err, warn, used = compile_restricted_eval( self.expr, '<string>') if PROFILE: end = clock() print 'prepRestrictedCode: %d ms for %s' % ( (end - start) * 1000, `self.expr`) if err: raise SyntaxError, err[0] self.used = tuple(used.keys()) self.rcode = co
def test_compile__compile_restricted_eval__used_names(): result = compile_restricted_eval("a + b + func(x)") assert result.errors == () assert result.warnings == [] assert result.used_names == {'a': True, 'b': True, 'x': True, 'func': True}
def test_MatMult(): result = compile_restricted_eval('(8, 3, 5) @ (2, 7, 1)') assert result.errors == ( 'Line None: MatMult statements are not allowed.', ) assert result.code is None