mirror of https://github.com/python/cpython
Given the persistent id code a shot at a class before calling save_global().
Some persistent picklers (well, probably, the *only* persistent pickler) would like to pickle some classes in a special way.
This commit is contained in:
parent
719841e2fb
commit
39c6116483
|
@ -213,6 +213,11 @@ class Pickler:
|
|||
try:
|
||||
f = self.dispatch[t]
|
||||
except KeyError:
|
||||
pid = self.inst_persistent_id(object)
|
||||
if pid is not None:
|
||||
self.save_pers(pid)
|
||||
return
|
||||
|
||||
try:
|
||||
issc = issubclass(t, TypeType)
|
||||
except TypeError: # t is not a class
|
||||
|
@ -221,11 +226,6 @@ class Pickler:
|
|||
self.save_global(object)
|
||||
return
|
||||
|
||||
pid = self.inst_persistent_id(object)
|
||||
if pid is not None:
|
||||
self.save_pers(pid)
|
||||
return
|
||||
|
||||
try:
|
||||
reduce = dispatch_table[t]
|
||||
except KeyError:
|
||||
|
|
|
@ -2015,11 +2015,6 @@ save(Picklerobject *self, PyObject *args, int pers_save)
|
|||
}
|
||||
}
|
||||
|
||||
if (PyType_IsSubtype(type, &PyType_Type)) {
|
||||
res = save_global(self, args, NULL);
|
||||
goto finally;
|
||||
}
|
||||
|
||||
if (!pers_save && self->inst_pers_func) {
|
||||
if ((tmp = save_pers(self, args, self->inst_pers_func)) != 0) {
|
||||
res = tmp;
|
||||
|
@ -2027,6 +2022,11 @@ save(Picklerobject *self, PyObject *args, int pers_save)
|
|||
}
|
||||
}
|
||||
|
||||
if (PyType_IsSubtype(type, &PyType_Type)) {
|
||||
res = save_global(self, args, NULL);
|
||||
goto finally;
|
||||
}
|
||||
|
||||
if ((__reduce__ = PyDict_GetItem(dispatch_table, (PyObject *)type))) {
|
||||
Py_INCREF(__reduce__);
|
||||
|
||||
|
|
Loading…
Reference in New Issue