diff --git a/pype/lib/__init__.py b/pype/lib/__init__.py index 59eb2a645c..bbc32a5e8a 100644 --- a/pype/lib/__init__.py +++ b/pype/lib/__init__.py @@ -59,7 +59,9 @@ from .avalon_context import ( save_workfile_data_to_doc, get_workfile_doc, - BuildWorkfile + BuildWorkfile, + + get_creator_by_name ) from .applications import ( @@ -141,6 +143,8 @@ __all__ = [ "BuildWorkfile", + "get_creator_by_name", + "ApplicationLaunchFailed", "ApplictionExecutableNotFound", "ApplicationNotFound", diff --git a/pype/lib/avalon_context.py b/pype/lib/avalon_context.py index fd4155703e..a5728dba22 100644 --- a/pype/lib/avalon_context.py +++ b/pype/lib/avalon_context.py @@ -1119,3 +1119,30 @@ class BuildWorkfile: ) return output + + +def get_creator_by_name(creator_name, case_sensitive=False): + """Find creator plugin by name. + + Args: + creator_name (str): Name of creator class that should be returned. + case_sensitive (bool): Match of creator plugin name is case sensitive. + Set to `False` by default. + + Returns: + Creator: Return first matching plugin or `None`. + """ + # Lower input creator name if is not case sensitive + if not case_sensitive: + creator_name = creator_name.lower() + + for creator_plugin in avalon.api.discover(avalon.api.Creator): + _creator_name = creator_plugin.__name__ + + # Lower creator plugin name if is not case sensitive + if not case_sensitive: + _creator_name = _creator_name.lower() + + if _creator_name == creator_name: + return creator_plugin + return None