Merge pull request #77 from ynput/enhancement/OP-8198_RoyalRender-use-AYON-settings

RoyalRender: Use AYON settings
This commit is contained in:
Jakub Trllo 2024-02-21 12:28:10 +01:00 committed by GitHub
commit 95c4aa7f40
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 60 additions and 189 deletions

View file

@ -1,6 +1,6 @@
from .royal_render_module import RoyalRenderModule
from .addon import RoyalRenderAddon
__all__ = (
"RoyalRenderModule",
"RoyalRenderAddon",
)

View file

@ -0,0 +1,36 @@
# -*- coding: utf-8 -*-
"""Module providing support for Royal Render."""
import os
from ayon_core.addon import AYONAddon, IPluginPaths
class RoyalRenderAddon(AYONAddon, IPluginPaths):
"""Class providing basic Royal Render implementation logic."""
name = "royalrender"
# _rr_api = None
# @property
# def rr_api(self):
# if not self._rr_api:
# # import royal render modules
# from .api import Api
# self._rr_api = Api(self.settings)
# return self._rr_api
def initialize(self, studio_settings):
# type: (dict) -> None
self.enabled = self.name in studio_settings
@staticmethod
def get_plugin_paths():
# type: () -> dict
"""Royal Render plugin paths.
Returns:
dict: Dictionary of plugin paths for RR.
"""
current_dir = os.path.dirname(os.path.abspath(__file__))
return {
"publish": [os.path.join(current_dir, "plugins", "publish")]
}

View file

@ -108,9 +108,7 @@ class BaseCreateRoyalRenderJob(pyblish.api.InstancePlugin,
context = instance.context
self._rr_root = self._resolve_rr_path(context, instance.data.get(
"rrPathName")) # noqa
self.log.debug(self._rr_root)
self._rr_root = instance.data.get("rrPathName")
if not self._rr_root:
raise KnownPublishError(
("Missing RoyalRender root. "
@ -210,35 +208,6 @@ class BaseCreateRoyalRenderJob(pyblish.api.InstancePlugin,
"""Host specific mapping for RRJob"""
raise NotImplementedError
@staticmethod
def _resolve_rr_path(context, rr_path_name):
# type: (pyblish.api.Context, str) -> str
rr_settings = (
context.data
["system_settings"]
["modules"]
["royalrender"]
)
try:
default_servers = rr_settings["rr_paths"]
project_servers = (
context.data
["project_settings"]
["royalrender"]
["rr_paths"]
)
rr_servers = {
k: default_servers[k]
for k in project_servers
if k in default_servers
}
except (AttributeError, KeyError):
# Handle situation were we had only one url for royal render.
return context.data["defaultRRPath"][platform.system().lower()]
return rr_servers[rr_path_name][platform.system().lower()]
def expected_files(self, instance, path, start_frame, end_frame):
"""Get expected files.

View file

@ -18,30 +18,24 @@ class CollectRRPathFromInstance(pyblish.api.InstancePlugin):
def _collect_rr_path_name(instance):
# type: (pyblish.api.Instance) -> str
"""Get Royal Render pat name from render instance."""
rr_settings = (
instance.context.data
["system_settings"]
["modules"]
["royalrender"]
)
if not instance.data.get("rrPaths"):
# TODO there are no "rrPaths" on instance, if Publisher should expose
# this (eg. artist could select specific server) it must be added
# to publisher
instance_rr_paths = instance.data.get("rrPaths")
if instance_rr_paths is None:
return "default"
try:
default_servers = rr_settings["rr_paths"]
project_servers = (
instance.context.data
["project_settings"]
["royalrender"]
["rr_paths"]
)
rr_servers = {
k: default_servers[k]
for k in project_servers
if k in default_servers
}
except (AttributeError, KeyError):
# Handle situation were we had only one url for royal render.
return rr_settings["rr_paths"]["default"]
rr_settings = instance.context.data["project_settings"]["royalrender"]
rr_paths = rr_settings["rr_paths"]
selected_paths = rr_settings["selected_rr_paths"]
return list(rr_servers.keys())[int(instance.data.get("rrPaths"))]
rr_servers = {
path_key
for path_key in selected_paths
if path_key in rr_paths
}
for instance_rr_path in instance_rr_paths:
if instance_rr_path in rr_servers:
return instance_rr_path
return "default"

View file

@ -216,7 +216,7 @@ class CreatePublishRoyalRenderJob(pyblish.api.InstancePlugin,
SeqEnd=1,
SeqStep=1,
SeqFileOffset=0,
Version=self._sanitize_version(os.environ.get("OPENPYPE_VERSION")),
Version=os.environ["AYON_BUNDLE_NAME"],
SceneName=abs_metadata_path,
# command line arguments
CustomAddCmdFlags=" ".join(args),
@ -243,26 +243,3 @@ class CreatePublishRoyalRenderJob(pyblish.api.InstancePlugin,
job.WaitForPreIDs += jobs_pre_ids
return job
def _sanitize_version(self, version):
"""Returns version in format MAJOR.MINORPATCH
3.15.7-nightly.2 >> 3.157
"""
VERSION_REGEX = re.compile(
r"(?P<major>0|[1-9]\d*)"
r"\.(?P<minor>0|[1-9]\d*)"
r"\.(?P<patch>0|[1-9]\d*)"
r"(?:-(?P<prerelease>[a-zA-Z\d\-.]*))?"
r"(?:\+(?P<buildmetadata>[a-zA-Z\d\-.]*))?"
)
valid_parts = VERSION_REGEX.findall(version)
if len(valid_parts) != 1:
# Return invalid version with filled 'origin' attribute
return version
# Unpack found version
major, minor, patch, pre, post = valid_parts[0]
return "{}.{}{}".format(major, minor, patch)

View file

@ -25,16 +25,6 @@ class SubmitJobsToRoyalRender(pyblish.api.ContextPlugin):
self._submission_parameters = []
def process(self, context):
rr_settings = (
context.data
["system_settings"]
["modules"]
["royalrender"]
)
if rr_settings["enabled"] is not True:
self.log.warning("RoyalRender modules is disabled.")
return
# iterate over all instances and try to find RRJobs
jobs = []
@ -51,7 +41,7 @@ class SubmitJobsToRoyalRender(pyblish.api.ContextPlugin):
instance_rr_path = instance.data["rrPathName"]
if jobs:
self._rr_root = self._resolve_rr_path(context, instance_rr_path)
self._rr_root = instance_rr_path
if not self._rr_root:
raise KnownPublishError(
("Missing RoyalRender root. "
@ -100,32 +90,3 @@ class SubmitJobsToRoyalRender(pyblish.api.ContextPlugin):
def get_submission_parameters(self):
return [SubmitterParameter("RequiredMemory", "0")]
@staticmethod
def _resolve_rr_path(context, rr_path_name):
# type: (pyblish.api.Context, str) -> str
rr_settings = (
context.data
["system_settings"]
["modules"]
["royalrender"]
)
try:
default_servers = rr_settings["rr_paths"]
project_servers = (
context.data
["project_settings"]
["royalrender"]
["rr_paths"]
)
rr_servers = {
k: default_servers[k]
for k in project_servers
if k in default_servers
}
except (AttributeError, KeyError):
# Handle situation were we had only one url for royal render.
return context.data["defaultRRPath"][platform.system().lower()]
return rr_servers[rr_path_name][platform.system().lower()]

View file

@ -1,45 +0,0 @@
# -*- coding: utf-8 -*-
"""Module providing support for Royal Render."""
import os
import ayon_core.modules
from ayon_core.modules import OpenPypeModule, IPluginPaths
class RoyalRenderModule(OpenPypeModule, IPluginPaths):
"""Class providing basic Royal Render implementation logic."""
name = "royalrender"
@property
def api(self):
if not self._api:
# import royal render modules
from . import api as rr_api
self._api = rr_api.Api(self.settings)
return self._api
def __init__(self, manager, settings):
# type: (ayon_core.addon.AddonsManager, dict) -> None
self.rr_paths = {}
self._api = None
self.settings = settings
super(RoyalRenderModule, self).__init__(manager, settings)
def initialize(self, module_settings):
# type: (dict) -> None
rr_settings = module_settings[self.name]
self.enabled = rr_settings["enabled"]
self.rr_paths = rr_settings.get("rr_paths")
@staticmethod
def get_plugin_paths():
# type: () -> dict
"""Royal Render plugin paths.
Returns:
dict: Dictionary of plugin paths for RR.
"""
current_dir = os.path.dirname(os.path.abspath(__file__))
return {
"publish": [os.path.join(current_dir, "plugins", "publish")]
}

View file

@ -62,34 +62,13 @@ def _convert_general(ayon_settings, output, default_settings):
}
def _convert_royalrender_system_settings(
ayon_settings, output, addon_versions, default_settings
):
enabled = addon_versions.get("royalrender") is not None
rr_settings = default_settings["modules"]["royalrender"]
rr_settings["enabled"] = enabled
if enabled:
ayon_royalrender = ayon_settings["royalrender"]
rr_settings["rr_paths"] = {
item["name"]: item["value"]
for item in ayon_royalrender["rr_paths"]
}
output["modules"]["royalrender"] = rr_settings
def _convert_modules_system(
ayon_settings, output, addon_versions, default_settings
):
# TODO add all modules
# TODO add 'enabled' values
for func in (
_convert_royalrender_system_settings,
):
func(ayon_settings, output, addon_versions, default_settings)
for key in {
"timers_manager",
"clockify",
"royalrender",
"deadline",
}:
if addon_versions.get(key):