Commit 19a2e5ff authored by Jérome Perrin's avatar Jérome Perrin Committed by Nikola Balog

Adjust full_write_guard patch for RestrictedPython 5 (Zope4)

parent 1cfe5bf3
...@@ -43,17 +43,38 @@ allow_module('wendelin.bigarray.array_zodb') ...@@ -43,17 +43,38 @@ allow_module('wendelin.bigarray.array_zodb')
import sklearn.linear_model import sklearn.linear_model
allow_class(sklearn.linear_model.LinearRegression) allow_class(sklearn.linear_model.LinearRegression)
# Modify 'safetype' dict in full_write_guard function # allow write access to ndarray, DataFrame, ZBigArray and RAMArray objects
# of RestrictedPython (closure) directly To allow def allow_full_write(t):
# write access to ndarray, DataFrame, ZBigArray and RAMArray objects """Allow setting and deleting items and attributes for this type.
from RestrictedPython.Guards import full_write_guard
full_write_guard.func_closure[1].cell_contents.__self__[np.ndarray] = True This supports both RestrictedPython-3.6.0, where the safetype is implemented as:
full_write_guard.func_closure[1].cell_contents.__self__[np.core.records.recarray] = True
full_write_guard.func_closure[1].cell_contents.__self__[np.core.records.record] = True safetype = {dict: True, list: True}.has_key
...
safetype(t)
and RestrictedPython-5.1, where the safetype is implemented as:
safetypes = {dict, list}
...
safetype(t)
"""
from RestrictedPython.Guards import full_write_guard
safetype = full_write_guard.__closure__[1].cell_contents
if isinstance(safetype, set): # 5.1
safetype.add(t)
else: # 3.6
safetype.__self__.update({t: True})
allow_full_write(np.ndarray)
allow_full_write(np.core.records.recarray)
allow_full_write(np.core.records.record)
from wendelin.bigarray.array_zodb import ZBigArray from wendelin.bigarray.array_zodb import ZBigArray
full_write_guard.func_closure[1].cell_contents.__self__[ZBigArray] = True allow_full_write(ZBigArray)
allow_type(ZBigArray) allow_type(ZBigArray)
from wendelin.bigarray.array_ram import RAMArray from wendelin.bigarray.array_ram import RAMArray
full_write_guard.func_closure[1].cell_contents.__self__[RAMArray] = True allow_full_write(RAMArray)
allow_type(RAMArray) allow_type(RAMArray)
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment