diff --git a/pype/plugins/global/publish/collect_rendered_files.py b/pype/plugins/global/publish/collect_rendered_files.py index 552fd49f6d..35d875dc02 100644 --- a/pype/plugins/global/publish/collect_rendered_files.py +++ b/pype/plugins/global/publish/collect_rendered_files.py @@ -4,7 +4,7 @@ import json import pyblish.api from avalon import api -from pypeapp import PypeLauncher +from pypeapp import PypeLauncher, Roots class CollectRenderedFiles(pyblish.api.ContextPlugin): @@ -82,8 +82,23 @@ class CollectRenderedFiles(pyblish.api.ContextPlugin): "Missing `PYPE_PUBLISH_DATA`") paths = os.environ["PYPE_PUBLISH_DATA"].split(os.pathsep) + project_name = os.environ.get("AVALON_PROJECT") + if project_name is None: + root = None + self.log.warning( + "Environment `AVLAON_PROJECT` was not found." + "Could not set `root` which may cause issues." + ) + else: + self.log.info("Getting root setting for project \"{}\"".format( + project_name + )) + root = {"root": Roots(project_name)} + session_set = False for path in paths: + if root: + path = path.format(**root) data = self._load_json(path) if not session_set: self.log.info("Setting session using data from file") diff --git a/pype/plugins/global/publish/submit_publish_job.py b/pype/plugins/global/publish/submit_publish_job.py index 8b43bec544..82bd0c5a78 100644 --- a/pype/plugins/global/publish/submit_publish_job.py +++ b/pype/plugins/global/publish/submit_publish_job.py @@ -185,15 +185,26 @@ class ProcessSubmittedJobOnFarm(pyblish.api.InstancePlugin): batch=job["Props"]["Name"], subset=subset ) - metadata_filename = "{}_metadata.json".format(subset) output_dir = instance.data["outputDir"] - metadata_path = os.path.join(output_dir, metadata_filename) - - metadata_path = os.path.normpath(metadata_path) - mount_root = os.path.normpath(os.environ["PYPE_STUDIO_PROJECTS_MOUNT"]) - network_root = os.environ["PYPE_STUDIO_PROJECTS_PATH"] - metadata_path = metadata_path.replace(mount_root, network_root) - metadata_path = os.path.normpath(metadata_path) + # Convert output dir to `{root}/rest/of/path/...` with Anatomy + anatomy_obj = instance.context.data["anatomy"] + root_name = anatomy_obj.templates["work"].get("root_name") + success, rootless_path = ( + anatomy_obj.roots.find_root_template_from_path( + output_dir, root_name + ) + ) + if not success: + # `rootless_path` is not set to `output_dir` if none of roots match + self.log.warning(( + "Could not find root path for remapping \"{}\"." + " This may cause issues on farm." + ).format(output_dirt)) + rootless_path = output_dir + else: + # If root was found then use `mount` root for `output_dir` + anatomy_obj.roots._root_key = "mount" + output_dir = rootless_path.format(**{"root": anatomy_obj.roots}) # Generate the payload for Deadline submission payload = { @@ -221,8 +232,14 @@ class ProcessSubmittedJobOnFarm(pyblish.api.InstancePlugin): # Transfer the environment from the original job to this dependent # job so they use the same environment + metadata_filename = "{}_metadata.json".format(subset) + metadata_path = os.path.join(rootless_path, metadata_filename) + "TODO metadata_path replace root with {root[root_name]} + environment = job["Props"].get("Env", {}) environment["PYPE_METADATA_FILE"] = metadata_path + environment["AVALON_PROJECT"] = pyblish.api.Session["AVALON_PROJECT"] + i = 0 for index, key in enumerate(environment): if key.upper() in self.enviro_filter: diff --git a/pype/scripts/publish_filesequence.py b/pype/scripts/publish_filesequence.py index fe795564a5..8e14b62306 100644 --- a/pype/scripts/publish_filesequence.py +++ b/pype/scripts/publish_filesequence.py @@ -89,13 +89,6 @@ def __main__(): print("Paths: {}".format(kwargs.paths or [os.getcwd()])) paths = kwargs.paths or [os.environ.get("PYPE_METADATA_FILE")] or [os.getcwd()] # noqa - - for path in paths: - data = _load_json(path) - log.info("Setting session using data from file") - os.environ["AVALON_PROJECT"] = data["session"]["AVALON_PROJECT"] - break - args = [ os.path.join(pype_root, pype_command), "publish",