mirror of
https://github.com/gentoo-mirror/gentoo.git
synced 2026-08-14 15:38:06 -07:00
47 lines
1.8 KiB
Diff
47 lines
1.8 KiB
Diff
diff --git a/jsonpickle/pickler.py b/jsonpickle/pickler.py
|
|
index 3d391cb..2103e46 100644
|
|
--- a/jsonpickle/pickler.py
|
|
+++ b/jsonpickle/pickler.py
|
|
@@ -476,8 +476,12 @@ def _flatten_obj_instance(self, obj):
|
|
|
|
# Support objects with __getstate__(); this ensures that
|
|
# both __setstate__() and __getstate__() are implemented
|
|
- has_getstate = hasattr(obj, '__getstate__')
|
|
+ has_own_getstate = (
|
|
+ hasattr(type(obj), '__getstate__')
|
|
+ and type(obj).__getstate__ is not getattr(object, '__getstate__', None)
|
|
+ )
|
|
# not using has_method since __getstate__() is handled separately below
|
|
+ # Note: on Python 3.11+, all objects have __getstate__.
|
|
|
|
if has_class:
|
|
cls = obj.__class__
|
|
@@ -549,7 +553,7 @@ def _flatten_obj_instance(self, obj):
|
|
# check that getstate/setstate is sane
|
|
if not (
|
|
state
|
|
- and hasattr(obj, '__getstate__')
|
|
+ and has_own_getstate
|
|
and not hasattr(obj, '__setstate__')
|
|
and not isinstance(obj, dict)
|
|
):
|
|
@@ -581,7 +585,7 @@ def _flatten_obj_instance(self, obj):
|
|
if has_getinitargs:
|
|
data[tags.INITARGS] = self._flatten(obj.__getinitargs__())
|
|
|
|
- if has_getstate:
|
|
+ if has_own_getstate:
|
|
try:
|
|
state = obj.__getstate__()
|
|
except TypeError:
|
|
@@ -590,7 +594,8 @@ def _flatten_obj_instance(self, obj):
|
|
self._pickle_warning(obj)
|
|
return None
|
|
else:
|
|
- return self._getstate(state, data)
|
|
+ if state:
|
|
+ return self._getstate(state, data)
|
|
|
|
if util.is_module(obj):
|
|
if self.unpicklable:
|