Issue #7689: Allow pickling of dynamically created classes when their

metaclass is registered with copyreg.  Patch by Nicolas M. Thiéry and
Craig Citro.
This commit is contained in:
Antoine Pitrou 2011-10-04 09:34:48 +02:00
parent ad349a190e
commit 561a821e93
5 changed files with 41 additions and 14 deletions

View file

@ -286,20 +286,20 @@ class Pickler:
f(self, obj) # Call unbound method with explicit self
return
# Check for a class with a custom metaclass; treat as regular class
try:
issc = issubclass(t, TypeType)
except TypeError: # t is not a class (old Boost; see SF #502085)
issc = 0
if issc:
self.save_global(obj)
return
# Check copy_reg.dispatch_table
reduce = dispatch_table.get(t)
if reduce:
rv = reduce(obj)
else:
# Check for a class with a custom metaclass; treat as regular class
try:
issc = issubclass(t, TypeType)
except TypeError: # t is not a class (old Boost; see SF #502085)
issc = 0
if issc:
self.save_global(obj)
return
# Check for a __reduce_ex__ method, fall back to __reduce__
reduce = getattr(obj, "__reduce_ex__", None)
if reduce: