Refs #28575 -- Allowed pickling Model.DoesNotExist and MultipleObjectsReturned classes.
This commit is contained in:
parent
a7b5ad8b19
commit
6c92f711ea
|
@ -64,6 +64,8 @@ def subclass_exception(name, parents, module, attached_to=None):
|
||||||
|
|
||||||
class_dict['__reduce__'] = __reduce__
|
class_dict['__reduce__'] = __reduce__
|
||||||
class_dict['__setstate__'] = __setstate__
|
class_dict['__setstate__'] = __setstate__
|
||||||
|
if attached_to:
|
||||||
|
class_dict['__qualname__'] = '%s.%s' % (attached_to.__qualname__, name)
|
||||||
|
|
||||||
return type(name, parents, class_dict)
|
return type(name, parents, class_dict)
|
||||||
|
|
||||||
|
|
|
@ -350,7 +350,7 @@ class ParallelTestSuite(unittest.TestSuite):
|
||||||
- make tracebacks picklable with tblib, if available
|
- make tracebacks picklable with tblib, if available
|
||||||
|
|
||||||
Even with tblib, errors may still occur for dynamically created
|
Even with tblib, errors may still occur for dynamically created
|
||||||
exception classes such Model.DoesNotExist which cannot be unpickled.
|
exception classes which cannot be unpickled.
|
||||||
"""
|
"""
|
||||||
counter = multiprocessing.Value(ctypes.c_int, 0)
|
counter = multiprocessing.Value(ctypes.c_int, 0)
|
||||||
pool = multiprocessing.Pool(
|
pool = multiprocessing.Pool(
|
||||||
|
|
|
@ -47,6 +47,14 @@ class PickleabilityTestCase(TestCase):
|
||||||
self.assertEqual(original.__class__, unpickled.__class__)
|
self.assertEqual(original.__class__, unpickled.__class__)
|
||||||
self.assertEqual(original.args, unpickled.args)
|
self.assertEqual(original.args, unpickled.args)
|
||||||
|
|
||||||
|
def test_doesnotexist_class(self):
|
||||||
|
klass = Event.DoesNotExist
|
||||||
|
self.assertIs(pickle.loads(pickle.dumps(klass)), klass)
|
||||||
|
|
||||||
|
def test_multipleobjectsreturned_class(self):
|
||||||
|
klass = Event.MultipleObjectsReturned
|
||||||
|
self.assertIs(pickle.loads(pickle.dumps(klass)), klass)
|
||||||
|
|
||||||
def test_manager_pickle(self):
|
def test_manager_pickle(self):
|
||||||
pickle.loads(pickle.dumps(Happening.objects))
|
pickle.loads(pickle.dumps(Happening.objects))
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue