From 943af428a7ac7dc0f85869774ad370c4dfcce9cb Mon Sep 17 00:00:00 2001 From: Joeri Exelmans Date: Tue, 12 Nov 2024 21:54:06 +0100 Subject: [PATCH] make all builtins available in action code --- util/eval.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/util/eval.py b/util/eval.py index 611e399..0bf4163 100644 --- a/util/eval.py +++ b/util/eval.py @@ -1,12 +1,13 @@ # based on https://stackoverflow.com/a/39381428 # Parses and executes a block of Python code, and returns the eval result of the last statement + import ast def exec_then_eval(code, _globals={}, _locals={}): block = ast.parse(code, mode='exec') # assumes last node is an expression last = ast.Expression(block.body.pop().value) extended_globals = { - '__builtins__': {'isinstance': isinstance, 'print': print, 'int': int, 'float': float, 'bool': bool, 'str': str, 'tuple': tuple, 'len': len, 'set': set, 'dict': dict, 'eval': eval }, + '__builtins__': __builtins__, **_globals, } exec(compile(block, '', mode='exec'), extended_globals, _locals) @@ -15,7 +16,7 @@ def exec_then_eval(code, _globals={}, _locals={}): def simply_exec(code, _globals={}, _locals={}): block = ast.parse(code, mode='exec') extended_globals = { - '__builtins__': {'isinstance': isinstance, 'print': print, 'int': int, 'float': float, 'bool': bool, 'str': str, 'tuple': tuple, 'len': len, 'set': set, 'dict': dict, 'eval': eval }, + '__builtins__': __builtins__, **_globals, } exec(compile(block, '', mode='exec'), extended_globals, _locals)