in src/smolagents/local_python_executor.py [0:0]
def check_safer_result(result: Any, static_tools: dict[str, Callable] = None, authorized_imports: list[str] = None):
"""
Checks if a result is safer according to authorized imports and static tools.
Args:
result (Any): The result to check.
static_tools (dict[str, Callable]): Dictionary of static tools.
authorized_imports (list[str]): List of authorized imports.
Raises:
InterpreterError: If the result is not safe
"""
if isinstance(result, ModuleType):
if not check_import_authorized(result.__name__, authorized_imports):
raise InterpreterError(f"Forbidden access to module: {result.__name__}")
elif isinstance(result, dict) and result.get("__spec__"):
if not check_import_authorized(result["__name__"], authorized_imports):
raise InterpreterError(f"Forbidden access to module: {result['__name__']}")
elif isinstance(result, (FunctionType, BuiltinFunctionType)):
for qualified_function_name in DANGEROUS_FUNCTIONS:
module_name, function_name = qualified_function_name.rsplit(".", 1)
if (
(static_tools is None or function_name not in static_tools)
and result.__name__ == function_name
and result.__module__ == module_name
):
raise InterpreterError(f"Forbidden access to function: {function_name}")