mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-25 21:32:15 +01:00
removemend happens in bulk
This commit is contained in:
parent
c8eb232461
commit
ec5f4abcd7
1 changed files with 25 additions and 16 deletions
|
|
@ -235,6 +235,7 @@ class CreateContext:
|
|||
self._bulk_info = {
|
||||
# Collect instances
|
||||
"collect": BulkInfo(),
|
||||
"remove": BulkInfo(),
|
||||
# Change values of instances or create context
|
||||
"change": BulkInfo(),
|
||||
# Create attribute definitions changed
|
||||
|
|
@ -1070,6 +1071,11 @@ class CreateContext:
|
|||
plugin.__name__, attr_defs
|
||||
)
|
||||
|
||||
@contextmanager
|
||||
def bulk_remove_instances(self, sender=None):
|
||||
with self._bulk_context("remove", sender) as bulk_info:
|
||||
yield bulk_info
|
||||
|
||||
@contextmanager
|
||||
def bulk_value_changes(self, sender=None):
|
||||
with self._bulk_context("change", sender) as bulk_info:
|
||||
|
|
@ -1165,6 +1171,8 @@ class CreateContext:
|
|||
data = bulk_info.pop_data()
|
||||
if key == "collect":
|
||||
self._bulk_instances_collection(data, sender)
|
||||
elif key == "remove":
|
||||
self._bulk_remove_instances_finished(data, sender)
|
||||
elif key == "change":
|
||||
self._bulk_values_change(data, sender)
|
||||
elif key == "create_attrs_change":
|
||||
|
|
@ -1187,6 +1195,18 @@ class CreateContext:
|
|||
sender,
|
||||
)
|
||||
|
||||
def _bulk_remove_instances_finished(self, instances_to_remove, sender):
|
||||
if not instances_to_remove:
|
||||
return
|
||||
|
||||
self._emit_event(
|
||||
INSTANCE_REMOVED_TOPIC,
|
||||
{
|
||||
"instances": instances_to_remove,
|
||||
},
|
||||
sender,
|
||||
)
|
||||
|
||||
def _bulk_values_change(
|
||||
self,
|
||||
changes: Tuple[Union[str, None], Dict[str, Any]],
|
||||
|
|
@ -1736,22 +1756,11 @@ class CreateContext:
|
|||
return self._event_hub.emit(topic, data, sender)
|
||||
|
||||
def _remove_instances(self, instances, sender=None):
|
||||
removed_instances = []
|
||||
for instance in instances:
|
||||
obj = self._instances_by_id.pop(instance.id, None)
|
||||
if obj is not None:
|
||||
removed_instances.append(instance)
|
||||
|
||||
if not removed_instances:
|
||||
return
|
||||
|
||||
self._emit_event(
|
||||
INSTANCE_REMOVED_TOPIC,
|
||||
{
|
||||
"instances": removed_instances,
|
||||
},
|
||||
sender,
|
||||
)
|
||||
with self.bulk_remove_instances(sender) as bulk_info:
|
||||
for instance in instances:
|
||||
obj = self._instances_by_id.pop(instance.id, None)
|
||||
if obj is not None:
|
||||
bulk_info.append(obj)
|
||||
|
||||
def _create_with_unified_error(
|
||||
self, identifier, creator, *args, **kwargs
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue