From: Fred Drake Date: Wed, 11 Oct 2000 22:16:45 +0000 (+0000) Subject: In the module docstring, clarify that this is used to register pickle X-Git-Tag: v2.0~96 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=78a6a369641d53c4085eb167af0d1cef65c129fe;p=python 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. --- diff --git a/Lib/copy_reg.py b/Lib/copy_reg.py index d0953bf08b..6a8881d0a1 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) -