|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
""" |
|
demonstrate dill's ability to pickle different python types |
|
test pickling of all Python Standard Library objects (currently: CH 1-14 @ 2.7) |
|
""" |
|
|
|
import dill as pickle |
|
pickle.settings['recurse'] = True |
|
|
|
|
|
|
|
|
|
from dill import load_types, objects, extend |
|
load_types(pickleable=True,unpickleable=False) |
|
|
|
|
|
|
|
|
|
|
|
|
|
class _class: |
|
def _method(self): |
|
pass |
|
|
|
|
|
special = {} |
|
special['LambdaType'] = _lambda = lambda x: lambda y: x |
|
special['MethodType'] = _method = _class()._method |
|
special['UnboundMethodType'] = _class._method |
|
objects.update(special) |
|
|
|
def pickles(name, exact=False, verbose=True): |
|
"""quick check if object pickles with dill""" |
|
obj = objects[name] |
|
try: |
|
pik = pickle.loads(pickle.dumps(obj)) |
|
if exact: |
|
try: |
|
assert pik == obj |
|
except AssertionError: |
|
assert type(obj) == type(pik) |
|
if verbose: print ("weak: %s %s" % (name, type(obj))) |
|
else: |
|
assert type(obj) == type(pik) |
|
except Exception: |
|
if verbose: print ("fails: %s %s" % (name, type(obj))) |
|
|
|
|
|
def test_objects(verbose=True): |
|
for member in objects.keys(): |
|
|
|
pickles(member, exact=False, verbose=verbose) |
|
|
|
if __name__ == '__main__': |
|
import warnings |
|
warnings.simplefilter('ignore') |
|
test_objects(verbose=False) |
|
|