From 2fc3c7d4f1328ae932306486a1426314b0e60dd1 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Tue, 13 Jul 2021 18:54:54 +0200 Subject: [PATCH] changes are not propagated immidiatelly --- openpype/pipeline/creator_plugins.py | 66 ++++++---------------------- 1 file changed, 13 insertions(+), 53 deletions(-) diff --git a/openpype/pipeline/creator_plugins.py b/openpype/pipeline/creator_plugins.py index 402e5a2f14..e7a71f0d96 100644 --- a/openpype/pipeline/creator_plugins.py +++ b/openpype/pipeline/creator_plugins.py @@ -46,11 +46,9 @@ class FamilyAttributeValues: self._data = {} for attr_def in attr_defs: - self._data[attr_def.key] = values.get(attr_def.key) - - self._last_data = copy.deepcopy(values) - - self._chunk_value = 0 + value = values.get(attr_def.key) + if value is not None: + self._data[attr_def.key] = value def __setitem__(self, key, value): if key not in self._attr_defs_by_key: @@ -61,10 +59,6 @@ class FamilyAttributeValues: return self._data[key] = value - self._propagate_changes({ - key: (old_value, value) - }) - def __getitem__(self, key): if key not in self._attr_defs_by_key: return self._data[key] @@ -90,24 +84,22 @@ class FamilyAttributeValues: yield key, self._data.get(key) def update(self, value): - with self.chunk_changes(): - for _key, _value in dict(value): - self[_key] = _value + for _key, _value in dict(value): + self[_key] = _value def pop(self, key, default=None): - if key not in self._data: - return default - - result = self._data.pop(key) - self._propagate_changes({ - key: (result, None) - }) - return result + return self._data.pop(key, default) @property def attr_defs(self): return self._attr_defs + def data_to_store(self): + output = {} + for key in self._data: + output[key] = self[key] + return output + @staticmethod def calculate_changes(new_data, old_data): changes = {} @@ -118,38 +110,9 @@ class FamilyAttributeValues: return changes def changes(self): - return self.calculate_changes(self._data, self._last_data) + return self.calculate_changes(self._data, self._origin_data) - def data_to_store(self): - output = {} - for key in self._data: - output[key] = self[key] - return output - def _propagate_changes(self, changes=None): - if self._chunk_value > 0: - return - - if changes is None: - changes = self.changes() - - if not changes: - return - - self.instance.on_family_attribute_change(changes) - for key, values in changes.items(): - self._last_data[key] = values[1] - - @contextlib.contextmanager - def chunk_changes(self): - try: - self._chunk_value += 1 - yield - finally: - self._chunk_value -= 1 - - if self._chunk_value == 0: - self._propagate_changes() class AvalonInstance: @@ -239,9 +202,6 @@ class AvalonInstance: return output - def on_family_attribute_change(self, changes): - self.host.update_instance(self, changes) - def change_order(self, keys_order): data = collections.OrderedDict() for key in keys_order: