Example #1
0
    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)
Example #3
0
    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)))
Example #4
0
    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