From: Thierry Parmentelat Date: Wed, 2 Jan 2019 16:56:12 +0000 (+0100) Subject: can't blindly decode() a pickle, need to store as bytes X-Git-Tag: nodemanager-7.0-0~2 X-Git-Url: http://git.onelab.eu/?p=nodemanager.git;a=commitdiff_plain;h=121219ac45fd954d3c7219c0f249fb1cddbc5105 can't blindly decode() a pickle, need to store as bytes --- diff --git a/database.py b/database.py index 04367f6..a7099bc 100644 --- a/database.py +++ b/database.py @@ -186,7 +186,7 @@ It proceeds to handle dump requests forever.""" db_lock.release() try: tools.write_file( - DB_FILE, lambda f: f.write(db_pickle.decode())) + DB_FILE, lambda f: f.write(db_pickle), binary=True) logger.log_database(db) except: logger.log_exc("database.start: failed to pickle/dump") diff --git a/tools.py b/tools.py index d8f216e..0d8fe95 100644 --- a/tools.py +++ b/tools.py @@ -154,13 +154,14 @@ using to write that file, and then renaming the temporary file. shutil.move(write_temp_file(do_write, **kw_args), filename) -def write_temp_file(do_write, mode=None, uidgid=None): +def write_temp_file(do_write, mode=None, uidgid=None, binary=False): fd, temporary_filename = tempfile.mkstemp() if mode: os.chmod(temporary_filename, mode) if uidgid: os.chown(temporary_filename, *uidgid) - f = os.fdopen(fd, 'w') + open_mode = 'wb' if binary else 'w' + f = os.fdopen(fd, open_mode) try: do_write(f) finally: