Show More
@@ -0,0 +1,39 | |||
|
1 | # encoding: utf-8 | |
|
2 | ||
|
3 | """Utilities to enable code objects to be pickled. | |
|
4 | ||
|
5 | Any process that import this module will be able to pickle code objects. This | |
|
6 | includes the func_code attribute of any function. Once unpickled, new | |
|
7 | functions can be built using new.function(code, globals()). Eventually | |
|
8 | we need to automate all of this so that functions themselves can be pickled. | |
|
9 | ||
|
10 | Reference: A. Tremols, P Cogolo, "Python Cookbook," p 302-305 | |
|
11 | """ | |
|
12 | ||
|
13 | __docformat__ = "restructuredtext en" | |
|
14 | ||
|
15 | #------------------------------------------------------------------------------- | |
|
16 | # Copyright (C) 2008 The IPython Development Team | |
|
17 | # | |
|
18 | # Distributed under the terms of the BSD License. The full license is in | |
|
19 | # the file COPYING, distributed as part of this software. | |
|
20 | #------------------------------------------------------------------------------- | |
|
21 | ||
|
22 | #------------------------------------------------------------------------------- | |
|
23 | # Imports | |
|
24 | #------------------------------------------------------------------------------- | |
|
25 | ||
|
26 | import new, types, copy_reg | |
|
27 | ||
|
28 | def code_ctor(*args): | |
|
29 | return new.code(*args) | |
|
30 | ||
|
31 | def reduce_code(co): | |
|
32 | if co.co_freevars or co.co_cellvars: | |
|
33 | raise ValueError("Sorry, cannot pickle code objects with closures") | |
|
34 | return code_ctor, (co.co_argcount, co.co_nlocals, co.co_stacksize, | |
|
35 | co.co_flags, co.co_code, co.co_consts, co.co_names, | |
|
36 | co.co_varnames, co.co_filename, co.co_name, co.co_firstlineno, | |
|
37 | co.co_lnotab) | |
|
38 | ||
|
39 | copy_reg.pickle(types.CodeType, reduce_code) No newline at end of file |
@@ -21,15 +21,13 __test__ = {} | |||
|
21 | 21 | |
|
22 | 22 | import cPickle as pickle |
|
23 | 23 | |
|
24 | # from twisted.python import components | |
|
25 | # from zope.interface import Interface, implements | |
|
26 | ||
|
27 | 24 | try: |
|
28 | 25 | import numpy |
|
29 | 26 | except ImportError: |
|
30 | 27 | pass |
|
31 | 28 | |
|
32 | from IPython.kernel.error import SerializationError | |
|
29 | class SerializationError(Exception): | |
|
30 | pass | |
|
33 | 31 | |
|
34 | 32 | #----------------------------------------------------------------------------- |
|
35 | 33 | # Classes and functions |
@@ -18,8 +18,8 __docformat__ = "restructuredtext en" | |||
|
18 | 18 | from types import FunctionType |
|
19 | 19 | |
|
20 | 20 | # contents of codeutil should either be in here, or codeutil belongs in IPython/util |
|
21 | from IPython.kernel import codeutil | |
|
22 | 21 | from IPython.zmq.parallel.dependency import dependent |
|
22 | import codeutil | |
|
23 | 23 | |
|
24 | 24 | class CannedObject(object): |
|
25 | 25 | def __init__(self, obj, keys=[]): |
General Comments 0
You need to be logged in to leave comments.
Login now