Mercurial > libervia-backend
diff libervia/backend/memory/migration/versions/fe3a02cb4bec_convert_legacypickle_columns_to_json.py @ 4216:1a7a3e4b52a4
core (memory/migration):
Update XEP-0384 and `fe3a02cb4bec_convert_legacypickle_columns_to_json.py` migration to
properly handle (de)serialisation of `TrustMessageCacheEntry`.
author | Goffi <goffi@goffi.org> |
---|---|
date | Tue, 05 Mar 2024 17:31:12 +0100 |
parents | 5f2d496c633f |
children | 79a4870cfbdf |
line wrap: on
line diff
--- a/libervia/backend/memory/migration/versions/fe3a02cb4bec_convert_legacypickle_columns_to_json.py Tue Mar 05 16:43:45 2024 +0100 +++ b/libervia/backend/memory/migration/versions/fe3a02cb4bec_convert_legacypickle_columns_to_json.py Tue Mar 05 17:31:12 2024 +0100 @@ -10,6 +10,7 @@ import pickle import json from libervia.backend.plugins.plugin_xep_0373 import PublicKeyMetadata +from libervia.backend.plugins.plugin_xep_0384 import TrustMessageCacheEntry # revision identifiers, used by Alembic. revision = "fe3a02cb4bec" @@ -46,6 +47,21 @@ # `from_dict` methods. deserialized = [pkm.to_dict() for pkm in deserialized] + elif ( + table == "private_ind_bin" + and primary_keys[0] == "XEP-0384/TM" + and primary_keys[1] == "cache" + ): + # Same issue and solution as for XEP-0373 + try: + deserialized = [tm.to_dict() for tm in deserialized] + except Exception as e: + print( + "Warning: Failed to convert Trust Management cache with value " + f" {deserialized!r}, using empty array instead: {e}" + ) + deserialized=[] + ret = json.dumps(deserialized, ensure_ascii=False, default=str) if table == 'history' and ret == "{}": # For history, we can remove empty data, but for other tables it may be @@ -104,6 +120,14 @@ # Convert list of dicts back to set of PublicKeyMetadata objects if isinstance(deserialized, list): deserialized = {PublicKeyMetadata.from_dict(d) for d in deserialized} + elif ( + table == "private_ind_bin" + and primary_keys[0] == "XEP-0384/TM" + and primary_keys[1] == "cache" + ): + # Convert list of dicts back to set of TrustMessageCacheEntry objects + if isinstance(deserialized, list): + deserialized = {TrustMessageCacheEntry.from_dict(d) for d in deserialized} return pickle.dumps(deserialized, 0) except Exception as e: print(