mirror of
https://github.com/ynput/ayon-core.git
synced 2026-01-01 16:34:53 +01:00
Merge branch '3.0/feature/PS_group_subset_by_task_name' into feaure/change_integratenew_template_profiles_setting
This commit is contained in:
commit
ac8a85995e
5 changed files with 132 additions and 10 deletions
|
|
@ -112,6 +112,7 @@ from .profiles_filtering import filter_profiles
|
||||||
from .plugin_tools import (
|
from .plugin_tools import (
|
||||||
TaskNotSetError,
|
TaskNotSetError,
|
||||||
get_subset_name,
|
get_subset_name,
|
||||||
|
prepare_template_data,
|
||||||
filter_pyblish_plugins,
|
filter_pyblish_plugins,
|
||||||
set_plugin_attributes_from_settings,
|
set_plugin_attributes_from_settings,
|
||||||
source_hash,
|
source_hash,
|
||||||
|
|
|
||||||
|
|
@ -73,6 +73,23 @@ def get_subset_name(
|
||||||
("family", family),
|
("family", family),
|
||||||
("task", task_name)
|
("task", task_name)
|
||||||
)
|
)
|
||||||
|
return template.format(**prepare_template_data(fill_pairs))
|
||||||
|
|
||||||
|
|
||||||
|
def prepare_template_data(fill_pairs):
|
||||||
|
"""
|
||||||
|
Prepares formatted data for filling template.
|
||||||
|
|
||||||
|
It produces mutliple variants of keys (key, Key, KEY) to control
|
||||||
|
format of filled template.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
fill_pairs (iterable) of tuples (key, value)
|
||||||
|
Returns:
|
||||||
|
(dict)
|
||||||
|
('host', 'maya') > {'host':'maya', 'Host': 'Maya', 'HOST': 'MAYA'}
|
||||||
|
|
||||||
|
"""
|
||||||
fill_data = {}
|
fill_data = {}
|
||||||
for key, value in fill_pairs:
|
for key, value in fill_pairs:
|
||||||
# Handle cases when value is `None` (standalone publisher)
|
# Handle cases when value is `None` (standalone publisher)
|
||||||
|
|
@ -94,7 +111,7 @@ def get_subset_name(
|
||||||
capitalized += value[1:]
|
capitalized += value[1:]
|
||||||
fill_data[key.capitalize()] = capitalized
|
fill_data[key.capitalize()] = capitalized
|
||||||
|
|
||||||
return template.format(**fill_data)
|
return fill_data
|
||||||
|
|
||||||
|
|
||||||
def filter_pyblish_plugins(plugins):
|
def filter_pyblish_plugins(plugins):
|
||||||
|
|
|
||||||
|
|
@ -12,10 +12,13 @@ import shutil
|
||||||
from pymongo import DeleteOne, InsertOne
|
from pymongo import DeleteOne, InsertOne
|
||||||
import pyblish.api
|
import pyblish.api
|
||||||
from avalon import io
|
from avalon import io
|
||||||
|
from avalon.api import format_template_with_optional_keys
|
||||||
from avalon.vendor import filelink
|
from avalon.vendor import filelink
|
||||||
import openpype.api
|
import openpype.api
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
# from pype.modules import ModulesManager
|
# from pype.modules import ModulesManager
|
||||||
|
from openpype.lib.profiles_filtering import filter_profiles
|
||||||
|
from openpype.lib import prepare_template_data
|
||||||
|
|
||||||
# this is needed until speedcopy for linux is fixed
|
# this is needed until speedcopy for linux is fixed
|
||||||
if sys.platform == "win32":
|
if sys.platform == "win32":
|
||||||
|
|
@ -697,14 +700,7 @@ class IntegrateAssetNew(pyblish.api.InstancePlugin):
|
||||||
|
|
||||||
subset = io.find_one({"_id": _id})
|
subset = io.find_one({"_id": _id})
|
||||||
|
|
||||||
# add group if available
|
self._set_subset_group(instance, subset["_id"])
|
||||||
if instance.data.get("subsetGroup"):
|
|
||||||
io.update_many({
|
|
||||||
'type': 'subset',
|
|
||||||
'_id': io.ObjectId(subset["_id"])
|
|
||||||
}, {'$set': {'data.subsetGroup':
|
|
||||||
instance.data.get('subsetGroup')}}
|
|
||||||
)
|
|
||||||
|
|
||||||
# Update families on subset.
|
# Update families on subset.
|
||||||
families = [instance.data["family"]]
|
families = [instance.data["family"]]
|
||||||
|
|
@ -716,6 +712,65 @@ class IntegrateAssetNew(pyblish.api.InstancePlugin):
|
||||||
|
|
||||||
return subset
|
return subset
|
||||||
|
|
||||||
|
def _set_subset_group(self, instance, subset_id):
|
||||||
|
"""
|
||||||
|
Mark subset as belonging to group in DB.
|
||||||
|
|
||||||
|
Uses Settings > Global > Publish plugins > IntegrateAssetNew
|
||||||
|
|
||||||
|
Args:
|
||||||
|
instance (dict): processed instance
|
||||||
|
subset_id (str): DB's subset _id
|
||||||
|
|
||||||
|
"""
|
||||||
|
# add group if available
|
||||||
|
integrate_new_sett = (instance.context.data["project_settings"]
|
||||||
|
["global"]
|
||||||
|
["publish"]
|
||||||
|
["IntegrateAssetNew"])
|
||||||
|
|
||||||
|
profiles = integrate_new_sett["subset_grouping_profiles"]
|
||||||
|
|
||||||
|
filtering_criteria = {
|
||||||
|
"families": instance.data["family"],
|
||||||
|
"hosts": instance.data["anatomyData"]["app"],
|
||||||
|
"tasks": instance.data["anatomyData"]["task"] or
|
||||||
|
io.Session["AVALON_TASK"]
|
||||||
|
}
|
||||||
|
matching_profile = filter_profiles(profiles, filtering_criteria)
|
||||||
|
|
||||||
|
filled_template = None
|
||||||
|
if matching_profile:
|
||||||
|
template = matching_profile["template"]
|
||||||
|
fill_pairs = (
|
||||||
|
("family", filtering_criteria["families"]),
|
||||||
|
("task", filtering_criteria["tasks"]),
|
||||||
|
("host", filtering_criteria["hosts"]),
|
||||||
|
("subset", instance.data["subset"]),
|
||||||
|
("renderlayer", instance.data.get("renderlayer"))
|
||||||
|
)
|
||||||
|
fill_pairs = prepare_template_data(fill_pairs)
|
||||||
|
|
||||||
|
try:
|
||||||
|
filled_template = \
|
||||||
|
format_template_with_optional_keys(fill_pairs, template)
|
||||||
|
except KeyError:
|
||||||
|
keys = []
|
||||||
|
if fill_pairs:
|
||||||
|
keys = fill_pairs.keys()
|
||||||
|
|
||||||
|
msg = "Subset grouping failed. " \
|
||||||
|
"Only {} are expected in Settings".format(','.join(keys))
|
||||||
|
self.log.warning(msg)
|
||||||
|
|
||||||
|
if instance.data.get("subsetGroup") or filled_template:
|
||||||
|
subset_group = instance.data.get('subsetGroup') or filled_template
|
||||||
|
|
||||||
|
io.update_many({
|
||||||
|
'type': 'subset',
|
||||||
|
'_id': io.ObjectId(subset_id)
|
||||||
|
}, {'$set': {'data.subsetGroup': subset_group}})
|
||||||
|
|
||||||
def create_version(self, subset, version_number, data=None):
|
def create_version(self, subset, version_number, data=None):
|
||||||
""" Copy given source to destination
|
""" Copy given source to destination
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -128,7 +128,15 @@
|
||||||
"prerender"
|
"prerender"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
"subset_grouping_profiles": [
|
||||||
|
{
|
||||||
|
"families": [],
|
||||||
|
"hosts": [],
|
||||||
|
"tasks": [],
|
||||||
|
"template": ""
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"ProcessSubmittedJobOnFarm": {
|
"ProcessSubmittedJobOnFarm": {
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
|
|
|
||||||
|
|
@ -423,6 +423,47 @@
|
||||||
"type": "raw-json",
|
"type": "raw-json",
|
||||||
"key": "template_name_profiles",
|
"key": "template_name_profiles",
|
||||||
"label": "template_name_profiles"
|
"label": "template_name_profiles"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "list",
|
||||||
|
"key": "subset_grouping_profiles",
|
||||||
|
"label": "Subset grouping profiles",
|
||||||
|
"use_label_wrap": true,
|
||||||
|
"object_type": {
|
||||||
|
"type": "dict",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "label",
|
||||||
|
"label": "Set all published instances as a part of specific group named according to 'Template'. <br>Implemented all variants of placeholders [{task},{family},{host},{subset},{renderlayer}]"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "families",
|
||||||
|
"label": "Families",
|
||||||
|
"type": "list",
|
||||||
|
"object_type": "text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "hosts",
|
||||||
|
"label": "Hosts",
|
||||||
|
"type": "list",
|
||||||
|
"object_type": "text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "tasks",
|
||||||
|
"label": "Task names",
|
||||||
|
"type": "list",
|
||||||
|
"object_type": "text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "separator"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "text",
|
||||||
|
"key": "template",
|
||||||
|
"label": "Template"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue