def process(self, context): nodes = harmony.send({ "function": "node.subNodes", "args": ["Top"] })["result"] for node in nodes: data = harmony.read(node) # Skip non-tagged nodes. if not data: continue # Skip containers. if "container" in data["id"]: continue instance = context.create_instance(node.split("/")[-1]) instance.append(node) instance.data.update(data) instance.data["publish"] = harmony.send({ "function": "node.getEnable", "args": [node] })["result"] instance.data["families"] = self.families_mapping[data["family"]] # Produce diagnostic message for any graphical # user interface interested in visualising it. self.log.info("Found: \"{0}\": \n{1}".format( instance.data["name"], json.dumps(instance.data, indent=4)))
def process(self, context, plugin): # Get the errored instances failed = [] for result in context.data["results"]: if (result["error"] is not None and result["instance"] is not None and result["instance"] not in failed): failed.append(result["instance"]) # Apply pyblish.logic to get the instances for the plug-in instances = pyblish.api.instances_by_plugin(failed, plugin) for instance in instances: data = harmony.read(instance.data["setMembers"][0]) data["asset"] = os.environ["AVALON_ASSET"] harmony.imprint(instance.data["setMembers"][0], data)
def process(self, context): """Plugin entry point. Args: context (:class:`pyblish.api.Context`): Context data. """ nodes = harmony.send({ "function": "node.subNodes", "args": ["Top"] })["result"] for node in nodes: data = harmony.read(node) # Skip non-tagged nodes. if not data: continue # Skip containers. if "container" in data["id"]: continue # skip render farm family as it is collected separately if data["family"] == "renderFarm": continue instance = context.create_instance(node.split("/")[-1]) instance.data.update(data) instance.data["setMembers"] = [node] instance.data["publish"] = harmony.send({ "function": "node.getEnable", "args": [node] })["result"] instance.data["families"] = self.families_mapping[data["family"]] # If set in plugin, pair the scene Version in ftrack with # thumbnails and review media. if (self.pair_media and instance.data["family"] == "scene"): context.data["scene_instance"] = instance # Produce diagnostic message for any graphical # user interface interested in visualising it. self.log.info("Found: \"{0}\": \n{1}".format( instance.data["name"], json.dumps(instance.data, indent=4)))
def get_instances(self, context): """Get instances per Write node in `renderFarm` family.""" version = None if self.sync_workfile_version: version = context.data["version"] instances = [] self_name = self.__class__.__name__ for node in context.data["allNodes"]: data = harmony.read(node) # Skip non-tagged nodes. if not data: continue # Skip containers. if "container" in data["id"]: continue if data["family"] != "renderFarm": continue # 0 - filename / 1 - type / 2 - zeros / 3 - start / 4 - enabled info = harmony.send({ "function": f"PypeHarmony.Publish.{self_name}." "getRenderNodeSettings", "args": node })["result"] # TODO: handle pixel aspect and frame step # TODO: set Deadline stuff (pools, priority, etc. by presets) # because of using 'renderFarm' as a family, replace 'Farm' with # capitalized task name - issue of avalon-core Creator app subset_name = node.split("/")[1] task_name = context.data["anatomyData"]["task"].capitalize() replace_str = "" if task_name.lower() not in subset_name.lower(): replace_str = task_name subset_name = subset_name.replace('Farm', replace_str) render_instance = HarmonyRenderInstance( version=version, time=api.time(), source=context.data["currentFile"], label=node.split("/")[1], subset=subset_name, asset=api.Session["AVALON_ASSET"], attachTo=False, setMembers=[node], publish=info[4], review=False, renderer=None, priority=50, name=node.split("/")[1], family="render.farm", families=["render.farm"], resolutionWidth=context.data["resolutionWidth"], resolutionHeight=context.data["resolutionHeight"], pixelAspect=1.0, multipartExr=False, tileRendering=False, tilesX=0, tilesY=0, convertToScanline=False, # time settings frameStart=context.data["frameStart"], frameEnd=context.data["frameEnd"], handleStart=context.data["handleStart"], # from DB handleEnd=context.data["handleEnd"], # from DB frameStep=1, outputType="Image", outputFormat=info[1], outputStartFrame=info[3], leadingZeros=info[2], toBeRenderedOn='deadline', ignoreFrameHandleCheck=True) self.log.debug(render_instance) instances.append(render_instance) return instances