From 85535b7baaa8d4805938cb527c814878efaf0fa4 Mon Sep 17 00:00:00 2001 From: Griatch Date: Mon, 28 Oct 2019 17:45:25 +0100 Subject: [PATCH] Fix serialization for Class store, add more log error on dbserialize error. Resolve #1979 --- evennia/utils/dbserialize.py | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/evennia/utils/dbserialize.py b/evennia/utils/dbserialize.py index 09eb8d1ba7..b3e55d1ca6 100644 --- a/evennia/utils/dbserialize.py +++ b/evennia/utils/dbserialize.py @@ -572,7 +572,13 @@ def to_pickle(data): return [process_item(val) for val in item] elif hasattr(item, "sessid") and hasattr(item, "conn_time"): return pack_session(item) - return pack_dbobj(item) + try: + return pack_dbobj(item) + except TypeError: + return item + except Exception: + logger.log_error(f"The object {item} of type {type(item)} could not be stored.") + raise return process_item(data) @@ -707,12 +713,20 @@ def from_pickle(data, db_obj=None): def do_pickle(data): """Perform pickle to string""" - return dumps(data, protocol=PICKLE_PROTOCOL) + try: + return dumps(data, protocol=PICKLE_PROTOCOL) + except Exception: + logger.log_error(f"Could not pickle data for storage: {data}") + raise def do_unpickle(data): """Retrieve pickle from pickled string""" - return loads(to_bytes(data)) + try: + return loads(to_bytes(data)) + except Exception: + logger.log_error(f"Could not unpickle data from storage: {data}") + raise def dbserialize(data):