store autocreators and ui_creators on discovery

This commit is contained in:
iLLiCiTiT 2021-09-13 18:34:30 +02:00
parent d4de5d396e
commit a5391f82cb
3 changed files with 29 additions and 14 deletions

View file

@ -8,6 +8,7 @@ from uuid import uuid4
from ..lib import UnknownDef
from .creator_plugins import (
BaseCreator,
Creator,
AutoCreator
)
@ -558,7 +559,12 @@ class CreateContext:
self.instances = []
# Discovered creators
self.creators = {}
# Prepare categories of creators
self.autocreators = {}
self.ui_creators = {}
self.publish_discover_result = None
self.publish_plugins = []
self.plugins_with_defs = []
@ -630,18 +636,30 @@ class CreateContext:
# Discover and prepare creators
creators = {}
for creator in avalon.api.discover(BaseCreator):
if inspect.isabstract(creator):
autocreators = {}
ui_creators = {}
for creator_class in avalon.api.discover(BaseCreator):
if inspect.isabstract(creator_class):
self.log.info(
"Skipping abstract Creator {}".format(str(creator))
"Skipping abstract Creator {}".format(str(creator_class))
)
continue
creators[creator.family] = creator(
family = creator_class.family
creator = creator_class(
self,
system_settings,
project_settings,
self.headless
)
creators[family] = creator
if isinstance(creator, AutoCreator):
autocreators[family] = creator
elif isinstance(creator, Creator):
ui_creators[family] = creator
self.autocreators = autocreators
self.ui_creators = ui_creators
self.creators = creators
@ -740,22 +758,15 @@ class CreateContext:
self.instances = instances
def execute_autocreators(self):
for creator in self.get_autocreators():
for family, creator in self.autocreators.items():
try:
creator.create()
except Exception:
msg = (
"Failed to run AutoCreator with family \"{}\" ({})."
).format(creator.family, inspect.getfile(creator.__class__))
).format(family, inspect.getfile(creator.__class__))
self.log.warning(msg, exc_info=True)
def get_autocreators(self):
autocreators = []
for creator in self.creators.values():
if isinstance(creator, AutoCreator):
autocreators.append(creator)
return autocreators
def save_changes(self):
if not self.host_is_valid:
missing_methods = self.get_host_misssing_methods(self.host)

View file

@ -195,7 +195,7 @@ class BaseCreator:
class Creator(BaseCreator):
"""Creator that has more information for artist.
"""Creator that has more information for artist to show in UI.
Creation requires prepared subset name and instance data.
"""

View file

@ -383,6 +383,10 @@ class PublisherController:
def creators(self):
return self.create_context.creators
@property
def ui_creators(self):
return self.create_context.ui_creators
@property
def host_is_valid(self):
return self.create_context.host_is_valid