From 78a6a369641d53c4085eb167af0d1cef65c129fe Mon Sep 17 00:00:00 2001 From: Fred Drake Date: Wed, 11 Oct 2000 22:16:45 +0000 Subject: [PATCH] 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. --- Lib/copy_reg.py | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) 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) -