diff --git a/Lib/copy_reg.py b/Lib/copy_reg.py index d0953bf08b7..6a8881d0a14 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) -