added 'bulk_instances_collection' which triggers validation of new instances automatically

This commit is contained in:
iLLiCiTiT 2021-10-05 12:32:02 +02:00
parent cfdbb19cbd
commit b7134831fb
2 changed files with 31 additions and 11 deletions

View file

@ -672,7 +672,8 @@ class CreateContext:
self.plugins_with_defs = []
self._attr_plugins_by_family = {}
self._ignore_added_instances = False
self._bulk_counter = 0
self._bulk_instances_to_process = []
if reset:
self.reset(discover_publish_plugins)
@ -703,12 +704,10 @@ class CreateContext:
self.reset_plugins(discover_publish_plugins)
self.reset_context_data()
with self.ignore_added_instances():
with self.bulk_instances_collection():
self.reset_instances()
self.execute_autocreators()
self.validate_instances_context()
def reset_plugins(self, discover_publish_plugins=True):
import avalon.api
import pyblish.logic
@ -806,19 +805,41 @@ class CreateContext:
def creator_adds_instance(self, instance):
self.instances.append(instance)
if not self._ignore_added_instances:
self.validate_instances_context([instance])
attr_plugins = self._get_publish_plugins_with_attr_for_family(
instance.creator.family
)
instance.set_publish_plugins(attr_plugins)
with self.bulk_instances_collection():
self._bulk_instances_to_process.append(instance)
def creator_removed_instance(self, instance):
self.instances.remove(instance)
@contextmanager
def ignore_added_instances(self):
self._ignore_added_instances = True
def bulk_instances_collection(self):
"""Validate context of instances in bulk.
This can be used for single instance or for adding multiple instances
which is helpfull on reset.
"""
self._bulk_counter += 1
try:
yield
finally:
self._ignore_added_instances = False
self._bulk_counter -= 1
# Trigger validation if there is no more context manager for bulk
# instance validation
if self._bulk_counter == 0:
(
self._bulk_instances_to_process,
instances_to_validate
) = (
[],
self._bulk_instances_to_process
)
self.validate_instances_context(instances_to_validate)
def reset_instances(self):
self.instances = []

View file

@ -536,10 +536,9 @@ class PublisherController:
self._resetting_instances = True
self.create_context.reset_context_data()
with self.create_context.ignore_added_instances():
with self.create_context.bulk_instances_collection():
self.create_context.reset_instances()
self.create_context.execute_autocreators()
self.create_context.validate_instances_context()
self._resetting_instances = False