| |
| |
| |
| |
| |
| |
| |
|
|
| 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() |
|
|