changes are not propagated immidiatelly

This commit is contained in:
iLLiCiTiT 2021-07-13 18:54:54 +02:00
parent 4e6e6e2cbc
commit 2fc3c7d4f1

View file

@ -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: