diff options
author | Fred Drake <fdrake@acm.org> | 2000-10-11 22:16:45 (GMT) |
---|---|---|
committer | Fred Drake <fdrake@acm.org> | 2000-10-11 22:16:45 (GMT) |
commit | 78a6a369641d53c4085eb167af0d1cef65c129fe (patch) | |
tree | 8c5726dacf2782b86b1618407027959927705849 /Lib/copy_reg.py | |
parent | 06fdd2d9e86e4f97be482314f2ac0b2842ba8600 (diff) | |
download | cpython-78a6a369641d53c4085eb167af0d1cef65c129fe.zip cpython-78a6a369641d53c4085eb167af0d1cef65c129fe.tar.gz cpython-78a6a369641d53c4085eb167af0d1cef65c129fe.tar.bz2 |
In the module docstring, clarify that this is used to register pickle
support for extension types, not classes.
pickle(): If the type is a class or if the reduction function is not
callable, raise a TypeError.
constructor(): If the constructor is not callable, raise TypeError.
This (partially) closes SourceForge patch #101859.
Diffstat (limited to 'Lib/copy_reg.py')
-rw-r--r-- | Lib/copy_reg.py | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/Lib/copy_reg.py b/Lib/copy_reg.py index d0953bf..6a8881d 100644 --- a/Lib/copy_reg.py +++ b/Lib/copy_reg.py @@ -1,15 +1,28 @@ -"""Helper to provide extensibility for pickle/cPickle.""" +"""Helper to provide extensibility for pickle/cPickle. + +This is only useful to add pickle support for extension types defined in +C, not for instances of user-defined classes. +""" + +from types import ClassType as _ClassType dispatch_table = {} safe_constructors = {} -def pickle(ob_type, pickle_function, constructor_ob = None): +def pickle(ob_type, pickle_function, constructor_ob=None): + if type(ob_type) is _ClassType: + raise TypeError("copy_reg is not intended for use with classes") + + if not callable(pickle_function): + raise TypeError("reduction functions must be callable") dispatch_table[ob_type] = pickle_function if constructor_ob is not None: constructor(constructor_ob) def constructor(object): + if not callable(object): + raise TypeError("constructors must be callable") safe_constructors[object] = 1 # Example: provide pickling support for complex numbers. @@ -18,4 +31,3 @@ def pickle_complex(c): return complex, (c.real, c.imag) pickle(type(1j), pickle_complex, complex) - |