From 6a00d72962e97dd67a53aa4b4715d9c3b9675402 Mon Sep 17 00:00:00 2001 From: aardschok Date: Mon, 30 Oct 2017 10:48:30 +0100 Subject: [PATCH] simplified loading logic, fixed issue with containers --- colorbleed/maya/lib.py | 36 +++++++++++++----------------------- 1 file changed, 13 insertions(+), 23 deletions(-) diff --git a/colorbleed/maya/lib.py b/colorbleed/maya/lib.py index 66f9d7bc03..a4f685ffb5 100644 --- a/colorbleed/maya/lib.py +++ b/colorbleed/maya/lib.py @@ -12,7 +12,7 @@ from collections import OrderedDict, defaultdict from maya import cmds, mel -from avalon import api, maya, io +from avalon import api, maya, io, pipeline from cb.utils.maya import core @@ -802,44 +802,34 @@ def assign_look_by_version(nodes, version_id): None """ + from avalon.tools.cbloader import lib as loaderlib + # get representations of shader file and relationships - shader_file = io.find_one({"type": "representation", - "parent": version_id, - "name": "ma"}) + representation = io.find_one({"type": "representation", + "parent": version_id, + "name": "ma"}) shader_relations = io.find_one({"type": "representation", "parent": version_id, "name": "json"}) # Load file - shader_filepath = api.get_representation_path(shader_file) + shader_filepath = api.get_representation_path(representation) shader_relation = api.get_representation_path(shader_relations) reference_node = get_reference_node(shader_filepath) if reference_node is None: log.info("Loading lookdev for the first time..") - # Define namespace - ns_assetname = "{}_".format(shader_file['context']['asset']) - namespace = maya.unique_namespace(ns_assetname, - format="%03d", - suffix="_look") + loaders = list(loaderlib.iter_loaders(representation["_id"])) + Loader = next((i for i in loaders if i.__name__ == "LookLoader"), None) + if Loader is None: + raise RuntimeError("Could not find LookLoader, this is a bug") # Reference the look file with maya.maintained_selection(): - shader_nodes = cmds.file(shader_filepath, - namespace=namespace, - reference=True, - returnNewNodes=True) - - # containerise like avalon (for manager) - # give along a fake "context" with only `representation` - # because `maya.containerise` only used that key anyway - context = {"representation": shader_file} - maya.containerise(name=shader_file["context"]["subset"], - namespace=namespace, - nodes=shader_nodes, - context=context) + shader_nodes = pipeline.load(Loader, representation) + else: log.info("Reusing existing lookdev '{}'".format(reference_node)) shader_nodes = cmds.referenceQuery(reference_node, nodes=True)