From f2bc2b20c70f6dc264c609db4a14415a4090133f Mon Sep 17 00:00:00 2001 From: "Loibl Johannes (IFAG DES SDF SCS SEM)" Date: Wed, 29 Jun 2022 10:07:18 +0200 Subject: [PATCH] Fix for #310 --- apptools/persistence/state_pickler.py | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/apptools/persistence/state_pickler.py b/apptools/persistence/state_pickler.py index 85003faa..56bbd107 100644 --- a/apptools/persistence/state_pickler.py +++ b/apptools/persistence/state_pickler.py @@ -939,20 +939,29 @@ def _do_list(self, obj, state): if not self._has_instance(state[i]): obj[i] = self._get_pure(state[i]) elif isinstance(state[i], tuple): - obj[i] = self._do_tuple(state[i]) + obj[i] = self._do_tuple(obj[i], state[i]) else: self._do_object(obj[i], state[i]) else: - raise StateSetterError( - "Cannot set state of list of incorrect size." - ) + # dynamically increase list so restoring works + obj.clear() + for i in range(len(state)): + if not self._has_instance(state[i]): + new_item = self._get_pure(state[i]) + elif isinstance(state[i], tuple): + new_item = self._do_tuple(obj, state[i]) + else: + new_item = create_instance(state[i]) + self._do_object(new_item, state[i]) + obj.append(new_item) def _do_dict(self, obj, state): + obj.clear() for key, value in state.items(): if not self._has_instance(value): obj[key] = self._get_pure(value) elif isinstance(value, tuple): - obj[key] = self._do_tuple(value) + obj[key] = self._do_tuple(obj, value) else: self._do_object(obj[key], value)