Commit f8e33a9e authored by Douglas's avatar Douglas

jupyter: erp5_kernel now correctly persists new-style classes without `_p_jar`

If ERP5 Jupyter kernel tried to persist an object created from a new-style
class, it would crash because the object has no `_p_jar`. This makes the
creation of the ObjectWriter fails. This kind of object needs to be handled
by (c)Pickle.

Related to bug report https://nexedi.erp5.net/bug_module/20160819-882FA2.
parent 955bb3b0
...@@ -449,7 +449,7 @@ def canSerialize(obj): ...@@ -449,7 +449,7 @@ def canSerialize(obj):
return all(result_list) return all(result_list)
# if obj is an object and implements __getstate__, ZODB.serialize can check # if obj is an object and implements __getstate__, ZODB.serialize can check
# if we can store it # if we can store it
elif isinstance(obj, object) and hasattr(obj, '__getstate__'): elif isinstance(obj, object) and hasattr(obj, '__getstate__') and hasattr(obj, '_p_jar'):
# Need to unwrap the variable, otherwise we get a TypeError, because # Need to unwrap the variable, otherwise we get a TypeError, because
# objects cannot be pickled while inside an acquisition wrapper. # objects cannot be pickled while inside an acquisition wrapper.
unwrapped_obj = Acquisition.aq_base(obj) unwrapped_obj = Acquisition.aq_base(obj)
......
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