Spaces:
Sleeping
Sleeping
Added another default.
Browse files- README.md +1 -1
- restrictedpython_code_eval.py +28 -0
README.md
CHANGED
|
@@ -62,7 +62,7 @@ In addition, this metric supports three additional arguments, specifying which i
|
|
| 62 |
|
| 63 |
As the new arguments are optional, this could be used as a drop-in replacement for `code_eval`.
|
| 64 |
|
| 65 |
-
Additionally, this metric sets several different `globals` if they are not provided as additional globals. The full list of globals set is: `__metaclass__, __name__, _getiter_, _iter_unpack_sequence_, _getitem_, getattr, _write_, _inplacevar_`. See the code for additional details.
|
| 66 |
|
| 67 |
### Output Values
|
| 68 |
|
|
|
|
| 62 |
|
| 63 |
As the new arguments are optional, this could be used as a drop-in replacement for `code_eval`.
|
| 64 |
|
| 65 |
+
Additionally, this metric sets several different `globals` if they are not provided as additional globals. The full list of globals set is: `__metaclass__, __name__, _getiter_, _iter_unpack_sequence_, _getitem_, getattr, _write_, _inplacevar_, _print_`. See the code for additional details.
|
| 66 |
|
| 67 |
### Output Values
|
| 68 |
|
restrictedpython_code_eval.py
CHANGED
|
@@ -286,6 +286,31 @@ def _default_write_(obj):
|
|
| 286 |
return obj
|
| 287 |
|
| 288 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 289 |
def _unsafe_execute(check_program, result, timeout,
|
| 290 |
use_safe_builtins: bool = True, use_limited_builtins: bool = True, use_utility_builtins: bool = True,
|
| 291 |
additional_globals: Optional[Dict[str, Any]] = None, additional_locals: Optional[Dict[str, Any]] = None,
|
|
@@ -347,6 +372,9 @@ def _unsafe_execute(check_program, result, timeout,
|
|
| 347 |
if '_inplacevar_' not in exec_globals:
|
| 348 |
exec_globals['_inplacevar_'] = protected_inplacevar # type: ignore
|
| 349 |
|
|
|
|
|
|
|
|
|
|
| 350 |
with swallow_io():
|
| 351 |
with time_limit(timeout):
|
| 352 |
byte_code = compile_restricted(check_program, filename="<model output>", mode="exec")
|
|
|
|
| 286 |
return obj
|
| 287 |
|
| 288 |
|
| 289 |
+
class DefaultPrinter:
|
| 290 |
+
def __init__(self, _getattr_=None, *args, **kwargs):
|
| 291 |
+
self._getattr_ = _getattr_
|
| 292 |
+
self.txt = []
|
| 293 |
+
|
| 294 |
+
self.args = args
|
| 295 |
+
self.kwargs = kwargs
|
| 296 |
+
|
| 297 |
+
def write(self, text):
|
| 298 |
+
self.txt.append(text)
|
| 299 |
+
print(text)
|
| 300 |
+
|
| 301 |
+
def __call__(self):
|
| 302 |
+
return ''.join(self.txt)
|
| 303 |
+
|
| 304 |
+
def _call_print(self, *objects, **kwargs):
|
| 305 |
+
if kwargs.get('file', None) is None:
|
| 306 |
+
kwargs['file'] = self
|
| 307 |
+
else:
|
| 308 |
+
self._getattr_(kwargs['file'], 'write') # type: ignore
|
| 309 |
+
|
| 310 |
+
print(*objects, **kwargs)
|
| 311 |
+
|
| 312 |
+
|
| 313 |
+
|
| 314 |
def _unsafe_execute(check_program, result, timeout,
|
| 315 |
use_safe_builtins: bool = True, use_limited_builtins: bool = True, use_utility_builtins: bool = True,
|
| 316 |
additional_globals: Optional[Dict[str, Any]] = None, additional_locals: Optional[Dict[str, Any]] = None,
|
|
|
|
| 372 |
if '_inplacevar_' not in exec_globals:
|
| 373 |
exec_globals['_inplacevar_'] = protected_inplacevar # type: ignore
|
| 374 |
|
| 375 |
+
if '_print_' not in exec_globals:
|
| 376 |
+
exec_globals['_print_'] = DefaultPrinter # type: ignore
|
| 377 |
+
|
| 378 |
with swallow_io():
|
| 379 |
with time_limit(timeout):
|
| 380 |
byte_code = compile_restricted(check_program, filename="<model output>", mode="exec")
|