From ddcb6f88deaf379dfb9852967ea1103c6715f05d Mon Sep 17 00:00:00 2001 From: Jakub Jezek Date: Tue, 27 Nov 2018 23:41:00 +0100 Subject: [PATCH] adding pype.templates for improving loading contextual templates / implement templates installing into pype.nuke.__init__ --- pype/__init__.py | 10 ++++++++-- pype/api.py | 19 +++++++++++++++++++ pype/nuke/__init__.py | 30 ++++++++++++++++++++---------- pype/nuke/lib.py | 7 ++----- pype/templates.py | 34 ++++++++++++++++++++++++++++++++++ 5 files changed, 83 insertions(+), 17 deletions(-) create mode 100644 pype/templates.py diff --git a/pype/__init__.py b/pype/__init__.py index d45ba59e74..8bd31c060d 100644 --- a/pype/__init__.py +++ b/pype/__init__.py @@ -6,8 +6,14 @@ from avalon import api as avalon from .launcher_actions import register_launcher_actions from .lib import collect_container_metadata -from pype.api import Logger -log = Logger.getLogger(__name__) +import logging +log = logging.getLogger(__name__) + +# do not delete these are mandatory +Anatomy = None +Dataflow = None +Metadata = None +Colorspace = None PACKAGE_DIR = os.path.dirname(__file__) PLUGINS_DIR = os.path.join(PACKAGE_DIR, "plugins") diff --git a/pype/api.py b/pype/api.py index c26d29d707..0100d913a6 100644 --- a/pype/api.py +++ b/pype/api.py @@ -17,6 +17,16 @@ from .action import ( from app.api import Logger +from . import ( + Anatomy, + Colorspace, + Metadata, + Dataflow +) +from .templates import ( + load_data_from_templates, + reset_data_from_templates +) __all__ = [ # plugin classes @@ -32,4 +42,13 @@ __all__ = [ "Logger", + # contectual templates + "load_data_from_templates", + "reset_data_from_templates", + + "Anatomy", + "Colorspace", + "Metadata", + "Dataflow" + ] diff --git a/pype/nuke/__init__.py b/pype/nuke/__init__.py index 97c9d714fc..455e2f8088 100644 --- a/pype/nuke/__init__.py +++ b/pype/nuke/__init__.py @@ -2,19 +2,21 @@ import os import sys from avalon import api as avalon from pyblish import api as pyblish -from ..api import Logger + +from .. import api as pype + from pype.nuke import menu import nuke # removing logger handler created in avalon_core for name, handler in [(handler.get_name(), handler) - for handler in Logger.logging.root.handlers[:]]: + for handler in pype.Logger.logging.root.handlers[:]]: if "pype" not in str(name).lower(): - Logger.logging.root.removeHandler(handler) + pype.Logger.logging.root.removeHandler(handler) -log = Logger.getLogger(__name__, "nuke") +log = pype.Logger.getLogger(__name__, "nuke") AVALON_CONFIG = os.getenv("AVALON_CONFIG", "pype") @@ -31,7 +33,7 @@ self = sys.modules[__name__] self.nLogger = None -class NukeHandler(Logger.logging.Handler): +class NukeHandler(pype.Logger.logging.Handler): ''' Nuke Handler - emits logs into nuke's script editor. warning will emit nuke.warning() @@ -39,7 +41,7 @@ class NukeHandler(Logger.logging.Handler): ''' def __init__(self): - Logger.logging.Handler.__init__(self) + pype.Logger.logging.Handler.__init__(self) self.set_name("Pype_Nuke_Handler") def emit(self, record): @@ -59,11 +61,11 @@ class NukeHandler(Logger.logging.Handler): nuke_handler = NukeHandler() if nuke_handler.get_name() \ not in [handler.get_name() - for handler in Logger.logging.root.handlers[:]]: - Logger.logging.getLogger().addHandler(nuke_handler) + for handler in pype.Logger.logging.root.handlers[:]]: + pype.Logger.logging.getLogger().addHandler(nuke_handler) if not self.nLogger: - self.nLogger = Logger + self.nLogger = pype.Logger def reload_config(): @@ -76,7 +78,7 @@ def reload_config(): import importlib for module in ( - "{}".format(AVALON_CONFIG), + "{}.templates".format(AVALON_CONFIG), "{}.nuke".format(AVALON_CONFIG), "{}.nuke.lib".format(AVALON_CONFIG), "{}.nuke.menu".format(AVALON_CONFIG) @@ -90,7 +92,9 @@ def reload_config(): def install(): + reload_config() + log.info("Registering Nuke plug-ins..") pyblish.register_plugin_path(PUBLISH_PATH) avalon.register_plugin_path(avalon.Loader, LOAD_PATH) @@ -112,6 +116,9 @@ def install(): menu.install() + # load data from templates + pype.load_data_from_templates() + def uninstall(): log.info("Deregistering Nuke plug-ins..") @@ -121,6 +128,9 @@ def uninstall(): pyblish.deregister_callback("instanceToggled", on_pyblish_instance_toggled) + # reset data from templates + pype.reset_data_from_templates() + def on_pyblish_instance_toggled(instance, new_value, old_value): """Toggle saver tool passthrough states on instance toggles.""" diff --git a/pype/nuke/lib.py b/pype/nuke/lib.py index 71534b92de..c68d296450 100644 --- a/pype/nuke/lib.py +++ b/pype/nuke/lib.py @@ -122,12 +122,9 @@ def set_writes_colorspace(write_dict): def set_colorspace(): - from app.api import Templates + from pype import api as pype - t = Templates(type=["colorspace"]) - colorspace = t.colorspace - - nuke_colorspace = getattr(colorspace, "nuke", None) + nuke_colorspace = getattr(pype.Colorspace, "nuke", None) try: set_root_colorspace(nuke_colorspace.root) diff --git a/pype/templates.py b/pype/templates.py new file mode 100644 index 0000000000..f62488caee --- /dev/null +++ b/pype/templates.py @@ -0,0 +1,34 @@ +import os + + +from app.api import (Templates, Logger) + +log = Logger.getLogger(__name__, + os.getenv("AVALON_APP", "pype-config")) + + +def load_data_from_templates(): + from . import api + if not any([ + api.Dataflow, + api.Anatomy, + api.Colorspace, + api.Metadata] + ): + # base = Templates() + t = Templates(type=["anatomy", "metadata", "dataflow", "colorspace"]) + api.Anatomy = t.anatomy + api.Metadata = t.metadata.format() + data = {"metadata": api.Metadata} + api.Dataflow = t.dataflow.format(data) + api.Colorspace = t.colorspace + log.info("Data from templates were Loaded...") + + +def reset_data_from_templates(): + from . import api + api.Dataflow = None + api.Anatomy = None + api.Colorspace = None + api.Metadata = None + log.info("Data from templates were Unloaded...")