Skip to content

Commit

Permalink
In the module docstring, clarify that this is used to register pickle
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
freddrake committed Oct 11, 2000
1 parent 06fdd2d commit 78a6a36
Showing 1 changed file with 15 additions and 3 deletions.
18 changes: 15 additions & 3 deletions Lib/copy_reg.py
Original file line number Diff line number Diff line change
@@ -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.
Expand All @@ -18,4 +31,3 @@ def pickle_complex(c):
return complex, (c.real, c.imag)

pickle(type(1j), pickle_complex, complex)

0 comments on commit 78a6a36

Please sign in to comment.