|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
""" |
|
testing some selected object types |
|
""" |
|
|
|
import dill |
|
dill.settings['recurse'] = True |
|
|
|
verbose = False |
|
|
|
def test_dict_contents(): |
|
c = type.__dict__ |
|
for i,j in c.items(): |
|
|
|
ok = dill.pickles(j) |
|
|
|
|
|
if verbose: print ("%s: %s, %s" % (ok, type(j), j)) |
|
assert ok |
|
if verbose: print ("") |
|
|
|
def _g(x): yield x; |
|
|
|
def _f(): |
|
try: raise |
|
except Exception: |
|
from sys import exc_info |
|
e, er, tb = exc_info() |
|
return er, tb |
|
|
|
class _d(object): |
|
def _method(self): |
|
pass |
|
|
|
from dill import objects |
|
from dill import load_types |
|
load_types(pickleable=True,unpickleable=False) |
|
_newclass = objects['ClassObjectType'] |
|
|
|
objects['TemporaryFileType'].close() |
|
objects['TextWrapperType'].close() |
|
objects['BufferedRandomType'].close() |
|
objects['BufferedReaderType'].close() |
|
objects['BufferedWriterType'].close() |
|
objects['FileType'].close() |
|
del objects |
|
|
|
|
|
def test_class_descriptors(): |
|
d = _d.__dict__ |
|
for i in d.values(): |
|
ok = dill.pickles(i) |
|
if verbose: print ("%s: %s, %s" % (ok, type(i), i)) |
|
assert ok |
|
if verbose: print ("") |
|
od = _newclass.__dict__ |
|
for i in od.values(): |
|
ok = dill.pickles(i) |
|
if verbose: print ("%s: %s, %s" % (ok, type(i), i)) |
|
assert ok |
|
if verbose: print ("") |
|
|
|
|
|
def test_class(): |
|
o = _d() |
|
oo = _newclass() |
|
ok = dill.pickles(o) |
|
if verbose: print ("%s: %s, %s" % (ok, type(o), o)) |
|
assert ok |
|
ok = dill.pickles(oo) |
|
if verbose: print ("%s: %s, %s" % (ok, type(oo), oo)) |
|
assert ok |
|
if verbose: print ("") |
|
|
|
|
|
def test_frame_related(): |
|
g = _g(1) |
|
f = g.gi_frame |
|
e,t = _f() |
|
_is = lambda ok: ok |
|
ok = dill.pickles(f) |
|
if verbose: print ("%s: %s, %s" % (ok, type(f), f)) |
|
assert not ok |
|
ok = dill.pickles(g) |
|
if verbose: print ("%s: %s, %s" % (ok, type(g), g)) |
|
assert _is(not ok) |
|
ok = dill.pickles(t) |
|
if verbose: print ("%s: %s, %s" % (ok, type(t), t)) |
|
assert not ok |
|
ok = dill.pickles(e) |
|
if verbose: print ("%s: %s, %s" % (ok, type(e), e)) |
|
assert ok |
|
if verbose: print ("") |
|
|
|
def test_typing(): |
|
import typing |
|
x = typing.Any |
|
assert x == dill.copy(x) |
|
x = typing.Dict[int, str] |
|
assert x == dill.copy(x) |
|
x = typing.List[int] |
|
assert x == dill.copy(x) |
|
x = typing.Tuple[int, str] |
|
assert x == dill.copy(x) |
|
x = typing.Tuple[int] |
|
assert x == dill.copy(x) |
|
x = typing.Tuple[()] |
|
assert x == dill.copy(x) |
|
x = typing.Tuple[()].copy_with(()) |
|
assert x == dill.copy(x) |
|
return |
|
|
|
|
|
if __name__ == '__main__': |
|
test_frame_related() |
|
test_dict_contents() |
|
test_class() |
|
test_class_descriptors() |
|
test_typing() |
|
|