ayon-core/openpype/plugins/publish/collect_resources_path.py
Roy Nieterau b05afaa837
Global: Optimize anatomy formatting by only formatting used templates instead (#4784)
* TemplatesDict can create different type of template

* anatomy templates can be formatted on their own

* return objected templates on get item

* '_rootless_path' is public classmethod 'rootless_path_from_result'

* 'AnatomyStringTemplate' expect anatomy templates

* remove key getters

* fix typo 'create_ojected_templates' -> 'create_objected_templates'

* Fix type of argument

* Fix long line

* Optimize formatting to use single template formatting instead of formatting full anatomy

* Optimize formatting to use single template formatting instead of formatting full anatomy

* Optimize formatting to use single template formatting instead of formatting full anatomy

* Optimize formatting to use single template formatting instead of formatting full anatomy

* Optimize formatting to use single template formatting instead of formatting full anatomy

* Optimize formatting to use single template formatting instead of formatting full anatomy

* Optimize formatting to use single template formatting instead of formatting full anatomy

* Use format strict + code cosmetics

* Get template from the formatted data

* Update openpype/plugins/publish/integrate_legacy.py

Co-authored-by: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com>

* Cosmetics

* Move template obj definition for path up + rename to `path_template_obj`

* Refactor more cases from `anatomy.format` to template obj `.format_strict`

* Refactor more cases from `anatomy.format` to template obj `.format_strict`

* Refactor more cases from `anatomy.format` to template obj `.format_strict`

---------

Co-authored-by: Jakub Trllo <jakub.trllo@gmail.com>
Co-authored-by: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com>
2023-04-17 14:53:15 +02:00

109 lines
3.2 KiB
Python

"""
Requires:
context -> anatomy
context -> anatomyData
Provides:
instance -> publishDir
instance -> resourcesDir
"""
import os
import copy
import pyblish.api
class CollectResourcesPath(pyblish.api.InstancePlugin):
"""Generate directory path where the files and resources will be stored.
Collects folder name and file name from files, if exists, for in-situ
publishing.
"""
label = "Collect Resources Path"
order = pyblish.api.CollectorOrder + 0.495
families = ["workfile",
"pointcache",
"proxyAbc",
"camera",
"animation",
"model",
"mayaAscii",
"mayaScene",
"setdress",
"layout",
"ass",
"vdbcache",
"scene",
"vrayproxy",
"render",
"prerender",
"imagesequence",
"rendersetup",
"rig",
"plate",
"look",
"mvLook",
"yetiRig",
"yeticache",
"nukenodes",
"gizmo",
"source",
"matchmove",
"image",
"source",
"assembly",
"fbx",
"gltf",
"textures",
"action",
"background",
"effect",
"staticMesh",
"skeletalMesh",
"xgen"
]
def process(self, instance):
anatomy = instance.context.data["anatomy"]
template_data = copy.deepcopy(instance.data["anatomyData"])
# This is for cases of Deprecated anatomy without `folder`
# TODO remove when all clients have solved this issue
template_data.update({
"frame": "FRAME_TEMP",
"representation": "TEMP"
})
# For the first time publish
if instance.data.get("hierarchy"):
template_data.update({
"hierarchy": instance.data["hierarchy"]
})
publish_templates = anatomy.templates_obj["publish"]
if "folder" in publish_templates:
publish_folder = publish_templates["folder"].format_strict(
template_data
)
else:
# solve deprecated situation when `folder` key is not underneath
# `publish` anatomy
self.log.warning((
"Deprecation warning: Anatomy does not have set `folder`"
" key underneath `publish` (in global of for project `{}`)."
).format(anatomy.project_name))
file_path = publish_templates["path"].format_strict(template_data)
publish_folder = os.path.dirname(file_path)
publish_folder = os.path.normpath(publish_folder)
resources_folder = os.path.join(publish_folder, "resources")
instance.data["publishDir"] = publish_folder
instance.data["resourcesDir"] = resources_folder
self.log.debug("publishDir: \"{}\"".format(publish_folder))
self.log.debug("resourcesDir: \"{}\"".format(resources_folder))