| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | import os |
| | import sys |
| | import string |
| | import random |
| |
|
| | import dill |
| |
|
| |
|
| | dill.settings['recurse'] = True |
| |
|
| | fname = "_test_file.txt" |
| | rand_chars = list(string.ascii_letters) + ["\n"] * 40 |
| |
|
| | buffer_error = ValueError("invalid buffer size") |
| | dne_error = FileNotFoundError("[Errno 2] No such file or directory: '%s'" % fname) |
| |
|
| |
|
| | def write_randomness(number=200): |
| | f = open(fname, "w") |
| | for i in range(number): |
| | f.write(random.choice(rand_chars)) |
| | f.close() |
| | f = open(fname, "r") |
| | contents = f.read() |
| | f.close() |
| | return contents |
| |
|
| |
|
| | def trunc_file(): |
| | open(fname, "w").close() |
| |
|
| |
|
| | def throws(op, args, exc): |
| | try: |
| | op(*args) |
| | except type(exc): |
| | return sys.exc_info()[1].args == exc.args |
| | else: |
| | return False |
| |
|
| |
|
| | def teardown_module(): |
| | if os.path.exists(fname): |
| | os.remove(fname) |
| |
|
| |
|
| | def bench(strictio, fmode, skippypy): |
| | import platform |
| | if skippypy and platform.python_implementation() == 'PyPy': |
| | |
| | return |
| |
|
| | |
| | |
| |
|
| | write_randomness() |
| |
|
| | f = open(fname, "r") |
| | _f = dill.loads(dill.dumps(f, fmode=fmode)) |
| | assert _f.mode == f.mode |
| | assert _f.tell() == f.tell() |
| | assert _f.read() == f.read() |
| | f.close() |
| | _f.close() |
| |
|
| | |
| |
|
| | f = open(fname, "w") |
| | f.write("hello") |
| | f_dumped = dill.dumps(f, fmode=fmode) |
| | f1mode = f.mode |
| | ftell = f.tell() |
| | f.close() |
| | f2 = dill.loads(f_dumped) |
| | |
| | f2mode = f2.mode |
| | f2tell = f2.tell() |
| | f2name = f2.name |
| | f2.write(" world!") |
| | f2.close() |
| |
|
| | if fmode == dill.HANDLE_FMODE: |
| | assert open(fname).read() == " world!" |
| | assert f2mode == f1mode |
| | assert f2tell == 0 |
| | elif fmode == dill.CONTENTS_FMODE: |
| | assert open(fname).read() == "hello world!" |
| | assert f2mode == f1mode |
| | assert f2tell == ftell |
| | assert f2name == fname |
| | elif fmode == dill.FILE_FMODE: |
| | assert open(fname).read() == "hello world!" |
| | assert f2mode == f1mode |
| | assert f2tell == ftell |
| | else: |
| | raise RuntimeError("Unknown file mode '%s'" % fmode) |
| |
|
| | |
| |
|
| | trunc_file() |
| |
|
| | f = open(fname, "a") |
| | f.write("hello") |
| | f_dumped = dill.dumps(f, fmode=fmode) |
| | f1mode = f.mode |
| | ftell = f.tell() |
| | f.close() |
| | f2 = dill.loads(f_dumped) |
| | f2mode = f2.mode |
| | f2tell = f2.tell() |
| | f2.write(" world!") |
| | f2.close() |
| |
|
| | assert f2mode == f1mode |
| | if fmode == dill.CONTENTS_FMODE: |
| | assert open(fname).read() == "hello world!" |
| | assert f2tell == ftell |
| | elif fmode == dill.HANDLE_FMODE: |
| | assert open(fname).read() == "hello world!" |
| | assert f2tell == ftell |
| | elif fmode == dill.FILE_FMODE: |
| | assert open(fname).read() == "hello world!" |
| | assert f2tell == ftell |
| | else: |
| | raise RuntimeError("Unknown file mode '%s'" % fmode) |
| |
|
| | |
| | |
| |
|
| | write_randomness() |
| |
|
| | f = open(fname, "r") |
| | fstr = f.read() |
| | f_dumped = dill.dumps(f, fmode=fmode) |
| | f1mode = f.mode |
| | ftell = f.tell() |
| | f.close() |
| | _flen = 150 |
| | _fstr = write_randomness(number=_flen) |
| |
|
| | if strictio: |
| | assert throws(dill.loads, (f_dumped,), buffer_error) |
| | else: |
| | f2 = dill.loads(f_dumped) |
| | assert f2.mode == f1mode |
| | if fmode == dill.CONTENTS_FMODE: |
| | assert f2.tell() == _flen |
| | assert f2.read() == "" |
| | f2.seek(0) |
| | assert f2.read() == _fstr |
| | assert f2.tell() == _flen |
| | elif fmode == dill.HANDLE_FMODE: |
| | assert f2.tell() == 0 |
| | assert f2.read() == _fstr |
| | assert f2.tell() == _flen |
| | elif fmode == dill.FILE_FMODE: |
| | assert f2.tell() == ftell |
| | assert f2.read() == "" |
| | f2.seek(0) |
| | assert f2.read() == fstr |
| | assert f2.tell() == ftell |
| | else: |
| | raise RuntimeError("Unknown file mode '%s'" % fmode) |
| | f2.close() |
| |
|
| | |
| |
|
| | write_randomness() |
| |
|
| | f = open(fname, "w") |
| | f.write("hello") |
| | f_dumped = dill.dumps(f, fmode=fmode) |
| | f1mode = f.mode |
| | ftell = f.tell() |
| | f.close() |
| | fstr = open(fname).read() |
| |
|
| | f = open(fname, "w") |
| | f.write("h") |
| | _ftell = f.tell() |
| | f.close() |
| |
|
| | if strictio: |
| | assert throws(dill.loads, (f_dumped,), buffer_error) |
| | else: |
| | f2 = dill.loads(f_dumped) |
| | f2mode = f2.mode |
| | f2tell = f2.tell() |
| | f2.write(" world!") |
| | f2.close() |
| | if fmode == dill.CONTENTS_FMODE: |
| | assert open(fname).read() == "h world!" |
| | assert f2mode == f1mode |
| | assert f2tell == _ftell |
| | elif fmode == dill.HANDLE_FMODE: |
| | assert open(fname).read() == " world!" |
| | assert f2mode == f1mode |
| | assert f2tell == 0 |
| | elif fmode == dill.FILE_FMODE: |
| | assert open(fname).read() == "hello world!" |
| | assert f2mode == f1mode |
| | assert f2tell == ftell |
| | else: |
| | raise RuntimeError("Unknown file mode '%s'" % fmode) |
| | f2.close() |
| |
|
| | |
| |
|
| | trunc_file() |
| |
|
| | f = open(fname, "a") |
| | f.write("hello") |
| | f_dumped = dill.dumps(f, fmode=fmode) |
| | f1mode = f.mode |
| | ftell = f.tell() |
| | f.close() |
| | fstr = open(fname).read() |
| |
|
| | f = open(fname, "w") |
| | f.write("h") |
| | _ftell = f.tell() |
| | f.close() |
| |
|
| | if strictio: |
| | assert throws(dill.loads, (f_dumped,), buffer_error) |
| | else: |
| | f2 = dill.loads(f_dumped) |
| | f2mode = f2.mode |
| | f2tell = f2.tell() |
| | f2.write(" world!") |
| | f2.close() |
| | assert f2mode == f1mode |
| | if fmode == dill.CONTENTS_FMODE: |
| | |
| | assert open(fname).read() == "h world!" |
| | assert f2tell == _ftell |
| | elif fmode == dill.HANDLE_FMODE: |
| | assert open(fname).read() == "h world!" |
| | assert f2tell == _ftell |
| | elif fmode == dill.FILE_FMODE: |
| | assert open(fname).read() == "hello world!" |
| | assert f2tell == ftell |
| | else: |
| | raise RuntimeError("Unknown file mode '%s'" % fmode) |
| | f2.close() |
| |
|
| | |
| | |
| |
|
| | write_randomness() |
| |
|
| | f = open(fname, "r") |
| | fstr = f.read() |
| | f_dumped = dill.dumps(f, fmode=fmode) |
| | f1mode = f.mode |
| | ftell = f.tell() |
| | f.close() |
| |
|
| | os.remove(fname) |
| |
|
| | if strictio: |
| | assert throws(dill.loads, (f_dumped,), dne_error) |
| | else: |
| | f2 = dill.loads(f_dumped) |
| | assert f2.mode == f1mode |
| | if fmode == dill.CONTENTS_FMODE: |
| | |
| | |
| | assert f2.read() == "" |
| | f2.seek(0) |
| | assert f2.read() == "" |
| | assert f2.tell() == 0 |
| | elif fmode == dill.FILE_FMODE: |
| | assert f2.tell() == ftell |
| | assert f2.read() == "" |
| | f2.seek(0) |
| | assert f2.read() == fstr |
| | assert f2.tell() == ftell |
| | elif fmode == dill.HANDLE_FMODE: |
| | assert f2.tell() == 0 |
| | assert f2.read() == "" |
| | assert f2.tell() == 0 |
| | else: |
| | raise RuntimeError("Unknown file mode '%s'" % fmode) |
| | f2.close() |
| |
|
| | |
| |
|
| | write_randomness() |
| |
|
| | f = open(fname, "w+") |
| | f.write("hello") |
| | f_dumped = dill.dumps(f, fmode=fmode) |
| | ftell = f.tell() |
| | f1mode = f.mode |
| | f.close() |
| |
|
| | os.remove(fname) |
| |
|
| | if strictio: |
| | assert throws(dill.loads, (f_dumped,), dne_error) |
| | else: |
| | f2 = dill.loads(f_dumped) |
| | f2mode = f2.mode |
| | f2tell = f2.tell() |
| | f2.write(" world!") |
| | f2.close() |
| | if fmode == dill.CONTENTS_FMODE: |
| | assert open(fname).read() == " world!" |
| | assert f2mode == 'w+' |
| | assert f2tell == 0 |
| | elif fmode == dill.HANDLE_FMODE: |
| | assert open(fname).read() == " world!" |
| | assert f2mode == f1mode |
| | assert f2tell == 0 |
| | elif fmode == dill.FILE_FMODE: |
| | assert open(fname).read() == "hello world!" |
| | assert f2mode == f1mode |
| | assert f2tell == ftell |
| | else: |
| | raise RuntimeError("Unknown file mode '%s'" % fmode) |
| |
|
| | |
| |
|
| | trunc_file() |
| |
|
| | f = open(fname, "a") |
| | f.write("hello") |
| | f_dumped = dill.dumps(f, fmode=fmode) |
| | ftell = f.tell() |
| | f1mode = f.mode |
| | f.close() |
| |
|
| | os.remove(fname) |
| |
|
| | if strictio: |
| | assert throws(dill.loads, (f_dumped,), dne_error) |
| | else: |
| | f2 = dill.loads(f_dumped) |
| | f2mode = f2.mode |
| | f2tell = f2.tell() |
| | f2.write(" world!") |
| | f2.close() |
| | assert f2mode == f1mode |
| | if fmode == dill.CONTENTS_FMODE: |
| | assert open(fname).read() == " world!" |
| | assert f2tell == 0 |
| | elif fmode == dill.HANDLE_FMODE: |
| | assert open(fname).read() == " world!" |
| | assert f2tell == 0 |
| | elif fmode == dill.FILE_FMODE: |
| | assert open(fname).read() == "hello world!" |
| | assert f2tell == ftell |
| | else: |
| | raise RuntimeError("Unknown file mode '%s'" % fmode) |
| |
|
| | |
| | |
| |
|
| | write_randomness() |
| |
|
| | f = open(fname, "r") |
| | fstr = f.read() |
| | f_dumped = dill.dumps(f, fmode=fmode) |
| | f1mode = f.mode |
| | ftell = f.tell() |
| | f.close() |
| | _flen = 250 |
| | _fstr = write_randomness(number=_flen) |
| |
|
| | |
| |
|
| | f2 = dill.loads(f_dumped) |
| | assert f2.mode == f1mode |
| | if fmode == dill.CONTENTS_FMODE: |
| | assert f2.tell() == ftell |
| | assert f2.read() == _fstr[ftell:] |
| | f2.seek(0) |
| | assert f2.read() == _fstr |
| | assert f2.tell() == _flen |
| | elif fmode == dill.HANDLE_FMODE: |
| | assert f2.tell() == 0 |
| | assert f2.read() == _fstr |
| | assert f2.tell() == _flen |
| | elif fmode == dill.FILE_FMODE: |
| | assert f2.tell() == ftell |
| | assert f2.read() == "" |
| | f2.seek(0) |
| | assert f2.read() == fstr |
| | assert f2.tell() == ftell |
| | else: |
| | raise RuntimeError("Unknown file mode '%s'" % fmode) |
| | f2.close() |
| |
|
| | |
| |
|
| | f = open(fname, "w") |
| | f.write("hello") |
| | f_dumped = dill.dumps(f, fmode=fmode) |
| | f1mode = f.mode |
| | ftell = f.tell() |
| |
|
| | fstr = open(fname).read() |
| |
|
| | f.write(" and goodbye!") |
| | _ftell = f.tell() |
| | f.close() |
| |
|
| | |
| |
|
| | f2 = dill.loads(f_dumped) |
| | f2mode = f2.mode |
| | f2tell = f2.tell() |
| | f2.write(" world!") |
| | f2.close() |
| | if fmode == dill.CONTENTS_FMODE: |
| | assert open(fname).read() == "hello world!odbye!" |
| | assert f2mode == f1mode |
| | assert f2tell == ftell |
| | elif fmode == dill.HANDLE_FMODE: |
| | assert open(fname).read() == " world!" |
| | assert f2mode == f1mode |
| | assert f2tell == 0 |
| | elif fmode == dill.FILE_FMODE: |
| | assert open(fname).read() == "hello world!" |
| | assert f2mode == f1mode |
| | assert f2tell == ftell |
| | else: |
| | raise RuntimeError("Unknown file mode '%s'" % fmode) |
| | f2.close() |
| |
|
| | |
| |
|
| | trunc_file() |
| |
|
| | f = open(fname, "a") |
| | f.write("hello") |
| | f_dumped = dill.dumps(f, fmode=fmode) |
| | f1mode = f.mode |
| | ftell = f.tell() |
| | fstr = open(fname).read() |
| |
|
| | f.write(" and goodbye!") |
| | _ftell = f.tell() |
| | f.close() |
| |
|
| | |
| |
|
| | f2 = dill.loads(f_dumped) |
| | f2mode = f2.mode |
| | f2tell = f2.tell() |
| | f2.write(" world!") |
| | f2.close() |
| | assert f2mode == f1mode |
| | if fmode == dill.CONTENTS_FMODE: |
| | assert open(fname).read() == "hello and goodbye! world!" |
| | assert f2tell == ftell |
| | elif fmode == dill.HANDLE_FMODE: |
| | assert open(fname).read() == "hello and goodbye! world!" |
| | assert f2tell == _ftell |
| | elif fmode == dill.FILE_FMODE: |
| | assert open(fname).read() == "hello world!" |
| | assert f2tell == ftell |
| | else: |
| | raise RuntimeError("Unknown file mode '%s'" % fmode) |
| | f2.close() |
| |
|
| |
|
| | def test_nostrictio_handlefmode(): |
| | bench(False, dill.HANDLE_FMODE, False) |
| | teardown_module() |
| |
|
| |
|
| | def test_nostrictio_filefmode(): |
| | bench(False, dill.FILE_FMODE, False) |
| | teardown_module() |
| |
|
| |
|
| | def test_nostrictio_contentsfmode(): |
| | bench(False, dill.CONTENTS_FMODE, True) |
| | teardown_module() |
| |
|
| |
|
| | |
| | |
| | |
| |
|
| |
|
| | if __name__ == '__main__': |
| | test_nostrictio_handlefmode() |
| | test_nostrictio_filefmode() |
| | test_nostrictio_contentsfmode() |
| |
|