mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-25 05:14:40 +01:00
Merge branch 'develop' into bugfix/OP-8210-houdini_redshift_render_aovs_one_layer
This commit is contained in:
commit
ec55ad53ea
101 changed files with 615 additions and 616 deletions
|
|
@ -73,6 +73,20 @@ class Commands:
|
|||
import pyblish.api
|
||||
import pyblish.util
|
||||
|
||||
# Fix older jobs
|
||||
for src_key, dst_key in (
|
||||
("AVALON_PROJECT", "AYON_PROJECT_NAME"),
|
||||
("AVALON_ASSET", "AYON_FOLDER_PATH"),
|
||||
("AVALON_TASK", "AYON_TASK_NAME"),
|
||||
("AVALON_WORKDIR", "AYON_WORKDIR"),
|
||||
("AVALON_APP_NAME", "AYON_APP_NAME"),
|
||||
("AVALON_APP", "AYON_HOST_NAME"),
|
||||
):
|
||||
if src_key in os.environ and dst_key not in os.environ:
|
||||
os.environ[dst_key] = os.environ[src_key]
|
||||
# Remove old keys, so we're sure they're not used
|
||||
os.environ.pop(src_key, None)
|
||||
|
||||
log = Logger.get_logger("CLI-publish")
|
||||
|
||||
install_ayon_plugins()
|
||||
|
|
@ -87,7 +101,7 @@ class Commands:
|
|||
if not any(paths):
|
||||
raise RuntimeError("No publish paths specified")
|
||||
|
||||
app_full_name = os.getenv("AVALON_APP_NAME")
|
||||
app_full_name = os.getenv("AYON_APP_NAME")
|
||||
if app_full_name:
|
||||
context = get_global_context()
|
||||
env = get_app_environments_for_context(
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ class CreateWorkdirExtraFolders(PreLaunchHook):
|
|||
return
|
||||
|
||||
env = self.data.get("env") or {}
|
||||
workdir = env.get("AVALON_WORKDIR")
|
||||
workdir = env.get("AYON_WORKDIR")
|
||||
if not workdir or not os.path.exists(workdir):
|
||||
return
|
||||
|
||||
|
|
|
|||
|
|
@ -106,7 +106,7 @@ class HostBase(object):
|
|||
Union[str, None]: Current project name.
|
||||
"""
|
||||
|
||||
return os.environ.get("AVALON_PROJECT")
|
||||
return os.environ.get("AYON_PROJECT_NAME")
|
||||
|
||||
def get_current_asset_name(self):
|
||||
"""
|
||||
|
|
@ -114,7 +114,7 @@ class HostBase(object):
|
|||
Union[str, None]: Current asset name.
|
||||
"""
|
||||
|
||||
return os.environ.get("AVALON_ASSET")
|
||||
return os.environ.get("AYON_FOLDER_PATH")
|
||||
|
||||
def get_current_task_name(self):
|
||||
"""
|
||||
|
|
@ -122,7 +122,7 @@ class HostBase(object):
|
|||
Union[str, None]: Current task name.
|
||||
"""
|
||||
|
||||
return os.environ.get("AVALON_TASK")
|
||||
return os.environ.get("AYON_TASK_NAME")
|
||||
|
||||
def get_current_context(self):
|
||||
"""Get current context information.
|
||||
|
|
|
|||
|
|
@ -234,7 +234,7 @@ class IWorkfileHost:
|
|||
str: Path to new workdir.
|
||||
"""
|
||||
|
||||
return session["AVALON_WORKDIR"]
|
||||
return session["AYON_WORKDIR"]
|
||||
|
||||
# --- Deprecated method names ---
|
||||
def file_extensions(self):
|
||||
|
|
|
|||
|
|
@ -297,11 +297,11 @@ class AfterEffectsRoute(WebSocketRoute):
|
|||
log.info("Setting context change")
|
||||
log.info("project {} asset {} ".format(project, asset))
|
||||
if project:
|
||||
os.environ["AVALON_PROJECT"] = project
|
||||
os.environ["AYON_PROJECT_NAME"] = project
|
||||
if asset:
|
||||
os.environ["AVALON_ASSET"] = asset
|
||||
os.environ["AYON_FOLDER_PATH"] = asset
|
||||
if task:
|
||||
os.environ["AVALON_TASK"] = task
|
||||
os.environ["AYON_TASK_NAME"] = task
|
||||
|
||||
async def read(self):
|
||||
log.debug("aftereffects.read client calls server server calls "
|
||||
|
|
|
|||
|
|
@ -272,7 +272,7 @@ def set_resolution(data):
|
|||
|
||||
|
||||
def on_new():
|
||||
project = os.environ.get("AVALON_PROJECT")
|
||||
project = os.environ.get("AYON_PROJECT_NAME")
|
||||
settings = get_project_settings(project).get("blender")
|
||||
|
||||
set_resolution_startup = settings.get("set_resolution_startup")
|
||||
|
|
@ -293,7 +293,7 @@ def on_new():
|
|||
|
||||
|
||||
def on_open():
|
||||
project = os.environ.get("AVALON_PROJECT")
|
||||
project = os.environ.get("AYON_PROJECT_NAME")
|
||||
settings = get_project_settings(project).get("blender")
|
||||
|
||||
set_resolution_startup = settings.get("set_resolution_startup")
|
||||
|
|
@ -379,7 +379,7 @@ def _on_task_changed():
|
|||
# `directory` attribute, so it opens in that directory (does it?).
|
||||
# https://docs.blender.org/api/blender2.8/bpy.types.Operator.html#calling-a-file-selector
|
||||
# https://docs.blender.org/api/blender2.8/bpy.types.WindowManager.html#bpy.types.WindowManager.fileselect_add
|
||||
workdir = os.getenv("AVALON_WORKDIR")
|
||||
workdir = os.getenv("AYON_WORKDIR")
|
||||
log.debug("New working directory: %s", workdir)
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -82,7 +82,7 @@ def file_extensions() -> List[str]:
|
|||
def work_root(session: dict) -> str:
|
||||
"""Return the default root to browse for work files."""
|
||||
|
||||
work_dir = session["AVALON_WORKDIR"]
|
||||
work_dir = session["AYON_WORKDIR"]
|
||||
scene_dir = session.get("AVALON_SCENEDIR")
|
||||
if scene_dir:
|
||||
return str(Path(work_dir, scene_dir))
|
||||
|
|
|
|||
|
|
@ -34,4 +34,4 @@ def current_file():
|
|||
|
||||
|
||||
def work_root(session):
|
||||
return os.path.normpath(session["AVALON_WORKDIR"]).replace("\\", "/")
|
||||
return os.path.normpath(session["AYON_WORKDIR"]).replace("\\", "/")
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@ class LoadClip(opfapi.ClipLoader):
|
|||
self.log.info("Loading with colorspace: `{}`".format(colorspace))
|
||||
|
||||
# create workfile path
|
||||
workfile_dir = os.environ["AVALON_WORKDIR"]
|
||||
workfile_dir = os.environ["AYON_WORKDIR"]
|
||||
openclip_dir = os.path.join(
|
||||
workfile_dir, clip_name
|
||||
)
|
||||
|
|
|
|||
|
|
@ -80,7 +80,7 @@ class LoadClipBatch(opfapi.ClipLoader):
|
|||
self.log.info("Loading with colorspace: `{}`".format(colorspace))
|
||||
|
||||
# create workfile path
|
||||
workfile_dir = options.get("workdir") or os.environ["AVALON_WORKDIR"]
|
||||
workfile_dir = options.get("workdir") or os.environ["AYON_WORKDIR"]
|
||||
openclip_dir = os.path.join(
|
||||
workfile_dir, clip_name
|
||||
)
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ def get_fusion_version(app_name):
|
|||
The function is triggered by the prelaunch hooks to get the fusion version.
|
||||
|
||||
`app_name` is obtained by prelaunch hooks from the
|
||||
`launch_context.env.get("AVALON_APP_NAME")`.
|
||||
`launch_context.env.get("AYON_APP_NAME")`.
|
||||
|
||||
To get a correct Fusion version, a version number should be present
|
||||
in the `applications/fusion/variants` key
|
||||
|
|
|
|||
|
|
@ -135,7 +135,7 @@ class FusionHost(HostBase, IWorkfileHost, ILoadHost, IPublishHost):
|
|||
return current_filepath
|
||||
|
||||
def work_root(self, session):
|
||||
work_dir = session["AVALON_WORKDIR"]
|
||||
work_dir = session["AYON_WORKDIR"]
|
||||
scene_dir = session.get("AVALON_SCENEDIR")
|
||||
if scene_dir:
|
||||
return os.path.join(work_dir, scene_dir)
|
||||
|
|
|
|||
|
|
@ -135,7 +135,7 @@ class GenericCreateSaver(Creator):
|
|||
ext = data["creator_attributes"]["image_format"]
|
||||
|
||||
# Subset change detected
|
||||
workdir = os.path.normpath(os.getenv("AVALON_WORKDIR"))
|
||||
workdir = os.path.normpath(os.getenv("AYON_WORKDIR"))
|
||||
formatting_data.update({
|
||||
"workdir": workdir,
|
||||
"frame": "0" * frame_padding,
|
||||
|
|
|
|||
|
|
@ -131,7 +131,7 @@ class FusionCopyPrefsPrelaunch(PreLaunchHook):
|
|||
) = self.get_copy_fusion_prefs_settings()
|
||||
|
||||
# Get launched application context and return correct app version
|
||||
app_name = self.launch_context.env.get("AVALON_APP_NAME")
|
||||
app_name = self.launch_context.env.get("AYON_APP_NAME")
|
||||
app_version = get_fusion_version(app_name)
|
||||
if app_version is None:
|
||||
version_names = ", ".join(str(x) for x in FUSION_VERSIONS_DICT)
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ class FusionPrelaunch(PreLaunchHook):
|
|||
def execute(self):
|
||||
# making sure python 3 is installed at provided path
|
||||
# Py 3.3-3.10 for Fusion 18+ or Py 3.6 for Fu 16-17
|
||||
app_data = self.launch_context.env.get("AVALON_APP_NAME")
|
||||
app_data = self.launch_context.env.get("AYON_APP_NAME")
|
||||
app_version = get_fusion_version(app_data)
|
||||
if not app_version:
|
||||
raise ApplicationLaunchFailed(
|
||||
|
|
|
|||
|
|
@ -74,4 +74,4 @@ def current_file():
|
|||
|
||||
|
||||
def work_root(session):
|
||||
return os.path.normpath(session["AVALON_WORKDIR"]).replace("\\", "/")
|
||||
return os.path.normpath(session["AYON_WORKDIR"]).replace("\\", "/")
|
||||
|
|
|
|||
|
|
@ -77,7 +77,7 @@ class ValidateSceneSettings(pyblish.api.InstancePlugin):
|
|||
expected_settings.pop("resolutionWidth")
|
||||
expected_settings.pop("resolutionHeight")
|
||||
|
||||
if (any(re.search(pattern, os.getenv('AVALON_TASK'))
|
||||
if (any(re.search(pattern, os.getenv('AYON_TASK_NAME'))
|
||||
for pattern in self.skip_timelines_check)):
|
||||
self.log.info("Skipping frames check because of "
|
||||
"task name and pattern {}".format(
|
||||
|
|
|
|||
|
|
@ -70,4 +70,4 @@ def current_file():
|
|||
|
||||
|
||||
def work_root(session):
|
||||
return os.path.normpath(session["AVALON_WORKDIR"]).replace("\\", "/")
|
||||
return os.path.normpath(session["AYON_WORKDIR"]).replace("\\", "/")
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ class SetPath(PreLaunchHook):
|
|||
launch_types = {LaunchTypes.local}
|
||||
|
||||
def execute(self):
|
||||
workdir = self.launch_context.env.get("AVALON_WORKDIR", "")
|
||||
workdir = self.launch_context.env.get("AYON_WORKDIR", "")
|
||||
if not workdir:
|
||||
self.log.warning("BUG: Workdir is not filled.")
|
||||
return
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ class SetPath(PreLaunchHook):
|
|||
launch_types = {LaunchTypes.local}
|
||||
|
||||
def execute(self):
|
||||
workdir = self.launch_context.env.get("AVALON_WORKDIR", "")
|
||||
workdir = self.launch_context.env.get("AYON_WORKDIR", "")
|
||||
if not workdir:
|
||||
self.log.warning("BUG: Workdir is not filled.")
|
||||
return
|
||||
|
|
|
|||
|
|
@ -246,7 +246,7 @@ def _set_project():
|
|||
None
|
||||
|
||||
"""
|
||||
workdir = os.getenv("AVALON_WORKDIR")
|
||||
workdir = os.getenv("AYON_WORKDIR")
|
||||
|
||||
try:
|
||||
os.makedirs(workdir)
|
||||
|
|
@ -628,7 +628,7 @@ def on_task_changed():
|
|||
# Run
|
||||
menu.update_menu_task_label()
|
||||
|
||||
workdir = os.getenv("AVALON_WORKDIR")
|
||||
workdir = os.getenv("AYON_WORKDIR")
|
||||
if os.path.exists(workdir):
|
||||
log.info("Updating Maya workspace for task change to %s", workdir)
|
||||
_set_project()
|
||||
|
|
@ -677,7 +677,7 @@ def workfile_save_before_xgen(event):
|
|||
|
||||
import xgenm
|
||||
|
||||
current_work_dir = os.getenv("AVALON_WORKDIR").replace("\\", "/")
|
||||
current_work_dir = os.getenv("AYON_WORKDIR").replace("\\", "/")
|
||||
expected_work_dir = event.data["workdir_path"].replace("\\", "/")
|
||||
if current_work_dir == expected_work_dir:
|
||||
return
|
||||
|
|
|
|||
|
|
@ -612,7 +612,7 @@ def get_load_color_for_family(family, settings=None):
|
|||
else:
|
||||
raise ValueError("Invalid color definition {}".format(str(color)))
|
||||
|
||||
if type(red, int):
|
||||
if isinstance(red, int):
|
||||
red = red / 255.0
|
||||
green = green / 255.0
|
||||
blue = blue / 255.0
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ import gridfs
|
|||
|
||||
|
||||
DEFINITION_FILENAME = "{}/maya/shader_definition.txt".format(
|
||||
os.getenv("AVALON_PROJECT"))
|
||||
os.getenv("AYON_PROJECT_NAME"))
|
||||
|
||||
|
||||
class ShaderDefinitionsEditor(QtWidgets.QWidget):
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ def current_file():
|
|||
|
||||
|
||||
def work_root(session):
|
||||
work_dir = session["AVALON_WORKDIR"]
|
||||
work_dir = session["AYON_WORKDIR"]
|
||||
scene_dir = None
|
||||
|
||||
# Query scene file rule from workspace.mel if it exists in WORKDIR
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ class PreCopyMel(PreLaunchHook):
|
|||
|
||||
def execute(self):
|
||||
project_doc = self.data["project_doc"]
|
||||
workdir = self.launch_context.env.get("AVALON_WORKDIR")
|
||||
workdir = self.launch_context.env.get("AYON_WORKDIR")
|
||||
if not workdir:
|
||||
self.log.warning("BUG: Workdir is not filled.")
|
||||
return
|
||||
|
|
|
|||
|
|
@ -8,13 +8,12 @@ publishing on farm.
|
|||
Requires:
|
||||
instance -> families
|
||||
instance -> setMembers
|
||||
instance -> asset
|
||||
|
||||
context -> currentFile
|
||||
context -> workspaceDir
|
||||
context -> user
|
||||
|
||||
session -> AVALON_ASSET
|
||||
|
||||
Optional:
|
||||
|
||||
Provides:
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ if explicit_plugins_loading["enabled"]:
|
|||
key = "AYON_OPEN_WORKFILE_POST_INITIALIZATION"
|
||||
if bool(int(os.environ.get(key, "0"))):
|
||||
def _log_and_open():
|
||||
path = os.environ["AVALON_LAST_WORKFILE"]
|
||||
path = os.environ["AYON_LAST_WORKFILE"]
|
||||
print("Opening \"{}\"".format(path))
|
||||
cmds.file(path, open=True, force=True)
|
||||
cmds.evalDeferred(
|
||||
|
|
|
|||
|
|
@ -120,7 +120,7 @@ def deprecated(new_destination):
|
|||
class Context:
|
||||
main_window = None
|
||||
context_action_item = None
|
||||
project_name = os.getenv("AVALON_PROJECT")
|
||||
project_name = os.getenv("AYON_PROJECT_NAME")
|
||||
# Workfile related code
|
||||
workfiles_launched = False
|
||||
workfiles_tool_timer = None
|
||||
|
|
@ -2605,7 +2605,7 @@ Reopening Nuke should synchronize these paths and resolve any discrepancies.
|
|||
def set_favorites(self):
|
||||
from .utils import set_context_favorites
|
||||
|
||||
work_dir = os.getenv("AVALON_WORKDIR")
|
||||
work_dir = os.getenv("AYON_WORKDIR")
|
||||
asset = get_current_asset_name()
|
||||
favorite_items = OrderedDict()
|
||||
|
||||
|
|
@ -2953,7 +2953,7 @@ def process_workfile_builder():
|
|||
create_fv_on = workfile_builder.get("create_first_version") or None
|
||||
builder_on = workfile_builder.get("builder_on_start") or None
|
||||
|
||||
last_workfile_path = os.environ.get("AVALON_LAST_WORKFILE")
|
||||
last_workfile_path = os.environ.get("AYON_LAST_WORKFILE")
|
||||
|
||||
# generate first version in file not existing and feature is enabled
|
||||
if create_fv_on and not os.path.exists(last_workfile_path):
|
||||
|
|
@ -3203,7 +3203,7 @@ class DirmapCache:
|
|||
@classmethod
|
||||
def project_name(cls):
|
||||
if cls._project_name is None:
|
||||
cls._project_name = os.getenv("AVALON_PROJECT")
|
||||
cls._project_name = os.getenv("AYON_PROJECT_NAME")
|
||||
return cls._project_name
|
||||
|
||||
@classmethod
|
||||
|
|
|
|||
|
|
@ -68,7 +68,7 @@ def current_file():
|
|||
|
||||
def work_root(session):
|
||||
|
||||
work_dir = session["AVALON_WORKDIR"]
|
||||
work_dir = session["AYON_WORKDIR"]
|
||||
scene_dir = session.get("AVALON_SCENEDIR")
|
||||
if scene_dir:
|
||||
path = os.path.join(work_dir, scene_dir)
|
||||
|
|
|
|||
|
|
@ -112,7 +112,7 @@ class WriteNodeKnobSettingPanel(nukescripts.PythonPanel):
|
|||
for write_node in write_selected_nodes:
|
||||
# data for mapping the path
|
||||
data = {
|
||||
"work": os.getenv("AVALON_WORKDIR"),
|
||||
"work": os.getenv("AYON_WORKDIR"),
|
||||
"subset": write_node["name"].value(),
|
||||
"frame": "#" * frame_padding,
|
||||
"ext": ext
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ class PhotoshopHost(HostBase, IWorkfileHost, ILoadHost, IPublishHost):
|
|||
return None
|
||||
|
||||
def work_root(self, session):
|
||||
return os.path.normpath(session["AVALON_WORKDIR"]).replace("\\", "/")
|
||||
return os.path.normpath(session["AYON_WORKDIR"]).replace("\\", "/")
|
||||
|
||||
def open_workfile(self, filepath):
|
||||
lib.stub().open(filepath)
|
||||
|
|
|
|||
|
|
@ -52,10 +52,10 @@ class CollectBatchData(pyblish.api.ContextPlugin):
|
|||
assert os.path.exists(batch_dir), \
|
||||
"Folder {} doesn't exist".format(batch_dir)
|
||||
|
||||
project_name = os.environ.get("AVALON_PROJECT")
|
||||
project_name = os.environ.get("AYON_PROJECT_NAME")
|
||||
if project_name is None:
|
||||
raise AssertionError(
|
||||
"Environment `AVALON_PROJECT` was not found."
|
||||
"Environment `AYON_PROJECT_NAME` was not found."
|
||||
"Could not set project `root` which may cause issues."
|
||||
)
|
||||
|
||||
|
|
@ -68,8 +68,8 @@ class CollectBatchData(pyblish.api.ContextPlugin):
|
|||
batch_data["context"]
|
||||
)
|
||||
|
||||
os.environ["AVALON_ASSET"] = asset_name
|
||||
os.environ["AVALON_TASK"] = task_name
|
||||
os.environ["AYON_FOLDER_PATH"] = asset_name
|
||||
os.environ["AYON_TASK_NAME"] = task_name
|
||||
|
||||
context.data["asset"] = asset_name
|
||||
context.data["task"] = task_name
|
||||
|
|
|
|||
|
|
@ -79,7 +79,7 @@ def open_file(filepath):
|
|||
def current_file():
|
||||
pm = get_project_manager()
|
||||
file_ext = file_extensions()[0]
|
||||
workdir_path = os.getenv("AVALON_WORKDIR")
|
||||
workdir_path = os.getenv("AYON_WORKDIR")
|
||||
project = pm.GetCurrentProject()
|
||||
project_name = project.GetName()
|
||||
file_name = project_name + file_ext
|
||||
|
|
@ -93,4 +93,4 @@ def current_file():
|
|||
|
||||
|
||||
def work_root(session):
|
||||
return os.path.normpath(session["AVALON_WORKDIR"]).replace("\\", "/")
|
||||
return os.path.normpath(session["AYON_WORKDIR"]).replace("\\", "/")
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ class TrayPublisherHost(HostBase, IPublishHost):
|
|||
name = "traypublisher"
|
||||
|
||||
def install(self):
|
||||
os.environ["AVALON_APP"] = self.name
|
||||
os.environ["AYON_HOST_NAME"] = self.name
|
||||
|
||||
pyblish.api.register_host("traypublisher")
|
||||
pyblish.api.register_plugin_path(PUBLISH_PATH)
|
||||
|
|
@ -40,7 +40,7 @@ class TrayPublisherHost(HostBase, IPublishHost):
|
|||
def set_project_name(self, project_name):
|
||||
# TODO Deregister project specific plugins and register new project
|
||||
# plugins
|
||||
os.environ["AVALON_PROJECT"] = project_name
|
||||
os.environ["AYON_PROJECT_NAME"] = project_name
|
||||
HostContext.set_project_name(project_name)
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ log = Logger.get_logger(__name__)
|
|||
def initialize():
|
||||
from ayon_core.hosts.traypublisher.api.plugin import SettingsCreator
|
||||
|
||||
project_name = os.environ["AVALON_PROJECT"]
|
||||
project_name = os.environ["AYON_PROJECT_NAME"]
|
||||
project_settings = get_project_settings(project_name)
|
||||
|
||||
simple_creators = project_settings["traypublisher"]["simple_creators"]
|
||||
|
|
|
|||
|
|
@ -68,7 +68,7 @@ class TVPaintHost(HostBase, IWorkfileHost, ILoadHost, IPublishHost):
|
|||
log.info("AYON - Installing TVPaint integration")
|
||||
|
||||
# Create workdir folder if does not exist yet
|
||||
workdir = os.getenv("AVALON_WORKDIR")
|
||||
workdir = os.getenv("AYON_WORKDIR")
|
||||
if not os.path.exists(workdir):
|
||||
os.makedirs(workdir)
|
||||
|
||||
|
|
@ -155,7 +155,7 @@ class TVPaintHost(HostBase, IWorkfileHost, ILoadHost, IPublishHost):
|
|||
return execute_george(george_script)
|
||||
|
||||
def work_root(self, session):
|
||||
return session["AVALON_WORKDIR"]
|
||||
return session["AYON_WORKDIR"]
|
||||
|
||||
def get_current_workfile(self):
|
||||
return execute_george("tv_GetProjectName")
|
||||
|
|
@ -174,7 +174,7 @@ class TVPaintHost(HostBase, IWorkfileHost, ILoadHost, IPublishHost):
|
|||
# Setup project settings if its the template that's launched.
|
||||
# TODO also check for template creation when it's possible to define
|
||||
# templates
|
||||
last_workfile = os.environ.get("AVALON_LAST_WORKFILE")
|
||||
last_workfile = os.environ.get("AYON_LAST_WORKFILE")
|
||||
if not last_workfile or os.path.exists(last_workfile):
|
||||
return
|
||||
|
||||
|
|
|
|||
|
|
@ -85,8 +85,8 @@ class CollectWorkfileData(pyblish.api.ContextPlugin):
|
|||
if workfile_context:
|
||||
# Change current context with context from workfile
|
||||
key_map = (
|
||||
("AVALON_ASSET", "asset_name"),
|
||||
("AVALON_TASK", "task_name")
|
||||
("AYON_FOLDER_PATH", "asset_name"),
|
||||
("AYON_TASK_NAME", "task_name")
|
||||
)
|
||||
for env_key, key in key_map:
|
||||
os.environ[env_key] = workfile_context[key]
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ class ExtractSequence(pyblish.api.Extractor):
|
|||
families = ["review", "render"]
|
||||
|
||||
# Modifiable with settings
|
||||
review_bg = [255, 255, 255, 255]
|
||||
review_bg = [255, 255, 255, 1.0]
|
||||
|
||||
def process(self, instance):
|
||||
self.log.info(
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ class ValidateWorkfileProjectName(pyblish.api.ContextPlugin):
|
|||
"""Validate project name stored in workfile metadata.
|
||||
|
||||
It is not possible to publish from different project than is set in
|
||||
environment variable "AVALON_PROJECT".
|
||||
environment variable "AYON_PROJECT_NAME".
|
||||
"""
|
||||
|
||||
label = "Validate Workfile Project Name"
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ def start_rendering():
|
|||
inst_data.append(data)
|
||||
|
||||
try:
|
||||
project = os.environ.get("AVALON_PROJECT")
|
||||
project = os.environ.get("AYON_PROJECT_NAME")
|
||||
anatomy = Anatomy(project)
|
||||
root = anatomy.roots['renders']
|
||||
except Exception as e:
|
||||
|
|
|
|||
|
|
@ -146,7 +146,7 @@ class UnrealPrelaunchHook(PreLaunchHook):
|
|||
|
||||
def execute(self):
|
||||
"""Hook entry method."""
|
||||
workdir = self.launch_context.env["AVALON_WORKDIR"]
|
||||
workdir = self.launch_context.env["AYON_WORKDIR"]
|
||||
executable = str(self.launch_context.executable)
|
||||
engine_version = self.app_name.split("/")[-1].replace("-", ".")
|
||||
try:
|
||||
|
|
|
|||
|
|
@ -1698,15 +1698,15 @@ def prepare_context_environments(data, env_group=None, addons_manager=None):
|
|||
|
||||
app = data["app"]
|
||||
context_env = {
|
||||
"AVALON_PROJECT": project_doc["name"],
|
||||
"AVALON_APP_NAME": app.full_name
|
||||
"AYON_PROJECT_NAME": project_doc["name"],
|
||||
"AYON_APP_NAME": app.full_name
|
||||
}
|
||||
if asset_doc:
|
||||
asset_name = get_asset_name_identifier(asset_doc)
|
||||
context_env["AVALON_ASSET"] = asset_name
|
||||
context_env["AYON_FOLDER_PATH"] = asset_name
|
||||
|
||||
if task_name:
|
||||
context_env["AVALON_TASK"] = task_name
|
||||
context_env["AYON_TASK_NAME"] = task_name
|
||||
|
||||
log.debug(
|
||||
"Context environments set:\n{}".format(
|
||||
|
|
@ -1724,7 +1724,7 @@ def prepare_context_environments(data, env_group=None, addons_manager=None):
|
|||
if not app.is_host:
|
||||
return
|
||||
|
||||
data["env"]["AVALON_APP"] = app.host_name
|
||||
data["env"]["AYON_HOST_NAME"] = app.host_name
|
||||
|
||||
if not asset_doc or not task_name:
|
||||
# QUESTION replace with log.info and skip workfile discovery?
|
||||
|
|
@ -1770,7 +1770,7 @@ def prepare_context_environments(data, env_group=None, addons_manager=None):
|
|||
"Couldn't create workdir because: {}".format(str(exc))
|
||||
)
|
||||
|
||||
data["env"]["AVALON_WORKDIR"] = workdir
|
||||
data["env"]["AYON_WORKDIR"] = workdir
|
||||
|
||||
_prepare_last_workfile(data, workdir, addons_manager)
|
||||
|
||||
|
|
@ -1887,7 +1887,7 @@ def _prepare_last_workfile(data, workdir, addons_manager):
|
|||
"Setting last workfile path: {}".format(last_workfile_path)
|
||||
)
|
||||
|
||||
data["env"]["AVALON_LAST_WORKFILE"] = last_workfile_path
|
||||
data["env"]["AYON_LAST_WORKFILE"] = last_workfile_path
|
||||
data["last_workfile_path"] = last_workfile_path
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -257,7 +257,7 @@ class Logger:
|
|||
return cls._process_name
|
||||
|
||||
# Get process name
|
||||
process_name = os.environ.get("AVALON_APP_NAME")
|
||||
process_name = os.environ.get("AYON_APP_NAME")
|
||||
if not process_name:
|
||||
try:
|
||||
import psutil
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ class ClockifyStart(LauncherAction):
|
|||
|
||||
def is_compatible(self, session):
|
||||
"""Return whether the action is compatible with the session"""
|
||||
if "AVALON_TASK" in session:
|
||||
if "AYON_TASK_NAME" in session:
|
||||
return True
|
||||
return False
|
||||
|
||||
|
|
@ -20,9 +20,9 @@ class ClockifyStart(LauncherAction):
|
|||
self.clockify_api.set_api()
|
||||
user_id = self.clockify_api.user_id
|
||||
workspace_id = self.clockify_api.workspace_id
|
||||
project_name = session["AVALON_PROJECT"]
|
||||
asset_name = session["AVALON_ASSET"]
|
||||
task_name = session["AVALON_TASK"]
|
||||
project_name = session["AYON_PROJECT_NAME"]
|
||||
asset_name = session["AYON_FOLDER_PATH"]
|
||||
task_name = session["AYON_TASK_NAME"]
|
||||
description = asset_name
|
||||
|
||||
# fetch asset docs
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ class ClockifySync(LauncherAction):
|
|||
raise ClockifyPermissionsCheckFailed(
|
||||
"Current CLockify user is missing permissions for this action!"
|
||||
)
|
||||
project_name = session.get("AVALON_PROJECT") or ""
|
||||
project_name = session.get("AYON_PROJECT_NAME") or ""
|
||||
|
||||
projects_to_sync = []
|
||||
if project_name.strip():
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import six
|
|||
import sys
|
||||
|
||||
from ayon_core.lib import requests_get, Logger
|
||||
from ayon_core.modules import OpenPypeModule, IPluginPaths
|
||||
from ayon_core.modules import AYONAddon, IPluginPaths
|
||||
|
||||
|
||||
class DeadlineWebserviceError(Exception):
|
||||
|
|
@ -13,28 +13,28 @@ class DeadlineWebserviceError(Exception):
|
|||
"""
|
||||
|
||||
|
||||
class DeadlineModule(OpenPypeModule, IPluginPaths):
|
||||
class DeadlineModule(AYONAddon, IPluginPaths):
|
||||
name = "deadline"
|
||||
|
||||
def __init__(self, manager, settings):
|
||||
self.deadline_urls = {}
|
||||
super(DeadlineModule, self).__init__(manager, settings)
|
||||
|
||||
def initialize(self, modules_settings):
|
||||
def initialize(self, studio_settings):
|
||||
# This module is always enabled
|
||||
deadline_settings = modules_settings[self.name]
|
||||
self.enabled = deadline_settings["enabled"]
|
||||
deadline_url = deadline_settings.get("DEADLINE_REST_URL")
|
||||
if deadline_url:
|
||||
self.deadline_urls = {"default": deadline_url}
|
||||
else:
|
||||
self.deadline_urls = deadline_settings.get("deadline_urls") # noqa: E501
|
||||
deadline_urls = {}
|
||||
enabled = self.name in studio_settings
|
||||
if enabled:
|
||||
deadline_settings = studio_settings[self.name]
|
||||
deadline_urls = {
|
||||
url_item["name"]: url_item["value"]
|
||||
for url_item in deadline_settings["deadline_urls"]
|
||||
}
|
||||
|
||||
if not self.deadline_urls:
|
||||
self.enabled = False
|
||||
self.log.warning(("default Deadline Webservice URL "
|
||||
"not specified. Disabling module."))
|
||||
return
|
||||
if enabled and not deadline_urls:
|
||||
enabled = False
|
||||
self.log.warning((
|
||||
"Deadline Webservice URLs are not specified. Disabling addon."
|
||||
))
|
||||
|
||||
self.enabled = enabled
|
||||
self.deadline_urls = deadline_urls
|
||||
|
||||
def get_plugin_paths(self):
|
||||
"""Deadline plugin paths."""
|
||||
|
|
|
|||
|
|
@ -47,11 +47,11 @@ class CollectDeadlineServerFromInstance(pyblish.api.InstancePlugin):
|
|||
deadline_settings = (
|
||||
render_instance.context.data
|
||||
["system_settings"]
|
||||
["modules"]
|
||||
["deadline"]
|
||||
)
|
||||
|
||||
default_server = render_instance.context.data["defaultDeadline"]
|
||||
# QUESTION How and where is this is set? Should be removed?
|
||||
instance_server = render_instance.data.get("deadlineServers")
|
||||
if not instance_server:
|
||||
self.log.debug("Using default server.")
|
||||
|
|
@ -64,7 +64,10 @@ class CollectDeadlineServerFromInstance(pyblish.api.InstancePlugin):
|
|||
asString=True
|
||||
)
|
||||
|
||||
default_servers = deadline_settings["deadline_urls"]
|
||||
default_servers = {
|
||||
url_item["name"]: url_item["value"]
|
||||
for url_item in deadline_settings["deadline_urls"]
|
||||
}
|
||||
project_servers = (
|
||||
render_instance.context.data
|
||||
["project_settings"]
|
||||
|
|
|
|||
|
|
@ -80,11 +80,11 @@ class AfterEffectsSubmitDeadline(
|
|||
"FTRACK_API_KEY",
|
||||
"FTRACK_API_USER",
|
||||
"FTRACK_SERVER",
|
||||
"AVALON_PROJECT",
|
||||
"AVALON_ASSET",
|
||||
"AVALON_TASK",
|
||||
"AVALON_WORKDIR",
|
||||
"AVALON_APP_NAME",
|
||||
"AYON_PROJECT_NAME",
|
||||
"AYON_FOLDER_PATH",
|
||||
"AYON_TASK_NAME",
|
||||
"AYON_WORKDIR",
|
||||
"AYON_APP_NAME",
|
||||
"AYON_LOG_NO_COLORS",
|
||||
"IS_TEST"
|
||||
]
|
||||
|
|
|
|||
|
|
@ -102,11 +102,11 @@ class BlenderSubmitDeadline(abstract_submit_deadline.AbstractSubmitDeadline,
|
|||
"FTRACK_API_USER",
|
||||
"FTRACK_SERVER",
|
||||
"OPENPYPE_SG_USER",
|
||||
"AVALON_PROJECT",
|
||||
"AVALON_ASSET",
|
||||
"AVALON_TASK",
|
||||
"AVALON_WORKDIR",
|
||||
"AVALON_APP_NAME",
|
||||
"AYON_PROJECT_NAME",
|
||||
"AYON_FOLDER_PATH",
|
||||
"AYON_TASK_NAME",
|
||||
"AYON_WORKDIR",
|
||||
"AYON_APP_NAME",
|
||||
"IS_TEST"
|
||||
]
|
||||
|
||||
|
|
|
|||
|
|
@ -220,11 +220,11 @@ class FusionSubmitDeadline(
|
|||
"FTRACK_API_KEY",
|
||||
"FTRACK_API_USER",
|
||||
"FTRACK_SERVER",
|
||||
"AVALON_PROJECT",
|
||||
"AVALON_ASSET",
|
||||
"AVALON_TASK",
|
||||
"AVALON_WORKDIR",
|
||||
"AVALON_APP_NAME",
|
||||
"AYON_PROJECT_NAME",
|
||||
"AYON_FOLDER_PATH",
|
||||
"AYON_TASK_NAME",
|
||||
"AYON_WORKDIR",
|
||||
"AYON_APP_NAME",
|
||||
"AYON_LOG_NO_COLORS",
|
||||
"IS_TEST",
|
||||
"AYON_BUNDLE_NAME",
|
||||
|
|
|
|||
|
|
@ -273,11 +273,11 @@ class HarmonySubmitDeadline(
|
|||
"FTRACK_API_KEY",
|
||||
"FTRACK_API_USER",
|
||||
"FTRACK_SERVER",
|
||||
"AVALON_PROJECT",
|
||||
"AVALON_ASSET",
|
||||
"AVALON_TASK",
|
||||
"AVALON_WORKDIR",
|
||||
"AVALON_APP_NAME",
|
||||
"AYON_PROJECT_NAME",
|
||||
"AYON_FOLDER_PATH",
|
||||
"AYON_TASK_NAME",
|
||||
"AYON_WORKDIR",
|
||||
"AYON_APP_NAME",
|
||||
"AYON_LOG_NO_COLORS"
|
||||
"IS_TEST"
|
||||
]
|
||||
|
|
|
|||
|
|
@ -98,11 +98,11 @@ class HoudiniCacheSubmitDeadline(abstract_submit_deadline.AbstractSubmitDeadline
|
|||
"FTRACK_API_USER",
|
||||
"FTRACK_SERVER",
|
||||
"OPENPYPE_SG_USER",
|
||||
"AVALON_PROJECT",
|
||||
"AVALON_ASSET",
|
||||
"AVALON_TASK",
|
||||
"AVALON_WORKDIR",
|
||||
"AVALON_APP_NAME",
|
||||
"AYON_PROJECT_NAME",
|
||||
"AYON_FOLDER_PATH",
|
||||
"AYON_TASK_NAME",
|
||||
"AYON_WORKDIR",
|
||||
"AYON_APP_NAME",
|
||||
"AYON_LOG_NO_COLORS",
|
||||
]
|
||||
|
||||
|
|
|
|||
|
|
@ -204,11 +204,11 @@ class HoudiniSubmitDeadline(
|
|||
"FTRACK_API_USER",
|
||||
"FTRACK_SERVER",
|
||||
"OPENPYPE_SG_USER",
|
||||
"AVALON_PROJECT",
|
||||
"AVALON_ASSET",
|
||||
"AVALON_TASK",
|
||||
"AVALON_WORKDIR",
|
||||
"AVALON_APP_NAME",
|
||||
"AYON_PROJECT_NAME",
|
||||
"AYON_FOLDER_PATH",
|
||||
"AYON_TASK_NAME",
|
||||
"AYON_WORKDIR",
|
||||
"AYON_APP_NAME",
|
||||
"AYON_LOG_NO_COLORS",
|
||||
]
|
||||
|
||||
|
|
|
|||
|
|
@ -106,11 +106,11 @@ class MaxSubmitDeadline(abstract_submit_deadline.AbstractSubmitDeadline,
|
|||
"FTRACK_API_USER",
|
||||
"FTRACK_SERVER",
|
||||
"OPENPYPE_SG_USER",
|
||||
"AVALON_PROJECT",
|
||||
"AVALON_ASSET",
|
||||
"AVALON_TASK",
|
||||
"AVALON_WORKDIR",
|
||||
"AVALON_APP_NAME",
|
||||
"AYON_PROJECT_NAME",
|
||||
"AYON_FOLDER_PATH",
|
||||
"AYON_TASK_NAME",
|
||||
"AYON_WORKDIR",
|
||||
"AYON_APP_NAME",
|
||||
"IS_TEST"
|
||||
]
|
||||
|
||||
|
|
|
|||
|
|
@ -207,11 +207,11 @@ class MayaSubmitDeadline(abstract_submit_deadline.AbstractSubmitDeadline,
|
|||
"FTRACK_API_USER",
|
||||
"FTRACK_SERVER",
|
||||
"OPENPYPE_SG_USER",
|
||||
"AVALON_PROJECT",
|
||||
"AVALON_ASSET",
|
||||
"AVALON_TASK",
|
||||
"AVALON_WORKDIR",
|
||||
"AVALON_APP_NAME",
|
||||
"AYON_PROJECT_NAME",
|
||||
"AYON_FOLDER_PATH",
|
||||
"AYON_TASK_NAME",
|
||||
"AYON_WORKDIR",
|
||||
"AYON_APP_NAME",
|
||||
"IS_TEST"
|
||||
]
|
||||
|
||||
|
|
|
|||
|
|
@ -104,10 +104,10 @@ class MayaSubmitRemotePublishDeadline(
|
|||
if key in os.environ
|
||||
}
|
||||
|
||||
environment["AVALON_PROJECT"] = project_name
|
||||
environment["AVALON_ASSET"] = instance.context.data["asset"]
|
||||
environment["AVALON_TASK"] = instance.context.data["task"]
|
||||
environment["AVALON_APP_NAME"] = os.environ.get("AVALON_APP_NAME")
|
||||
environment["AYON_PROJECT_NAME"] = project_name
|
||||
environment["AYON_FOLDER_PATH"] = instance.context.data["asset"]
|
||||
environment["AYON_TASK_NAME"] = instance.context.data["task"]
|
||||
environment["AYON_APP_NAME"] = os.environ.get("AYON_APP_NAME")
|
||||
environment["OPENPYPE_PUBLISH_SUBSET"] = instance.data["subset"]
|
||||
environment["AYON_LOG_NO_COLORS"] = "1"
|
||||
environment["AYON_USERNAME"] = instance.context.data["user"]
|
||||
|
|
|
|||
|
|
@ -373,10 +373,10 @@ class NukeSubmitDeadline(pyblish.api.InstancePlugin,
|
|||
keys = [
|
||||
"PYTHONPATH",
|
||||
"PATH",
|
||||
"AVALON_PROJECT",
|
||||
"AVALON_ASSET",
|
||||
"AVALON_TASK",
|
||||
"AVALON_APP_NAME",
|
||||
"AYON_PROJECT_NAME",
|
||||
"AYON_FOLDER_PATH",
|
||||
"AYON_TASK_NAME",
|
||||
"AYON_APP_NAME",
|
||||
"FTRACK_API_KEY",
|
||||
"FTRACK_API_USER",
|
||||
"FTRACK_SERVER",
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@ class ProcessSubmittedCacheJobOnFarm(pyblish.api.InstancePlugin,
|
|||
"FTRACK_API_USER",
|
||||
"FTRACK_API_KEY",
|
||||
"FTRACK_SERVER",
|
||||
"AVALON_APP_NAME",
|
||||
"AYON_APP_NAME",
|
||||
"AYON_USERNAME",
|
||||
"OPENPYPE_SG_USER",
|
||||
"KITSU_LOGIN",
|
||||
|
|
@ -125,9 +125,9 @@ class ProcessSubmittedCacheJobOnFarm(pyblish.api.InstancePlugin,
|
|||
create_metadata_path(instance, anatomy)
|
||||
|
||||
environment = {
|
||||
"AVALON_PROJECT": instance.context.data["projectName"],
|
||||
"AVALON_ASSET": instance.context.data["asset"],
|
||||
"AVALON_TASK": instance.context.data["task"],
|
||||
"AYON_PROJECT_NAME": instance.context.data["projectName"],
|
||||
"AYON_FOLDER_PATH": instance.context.data["asset"],
|
||||
"AYON_TASK_NAME": instance.context.data["task"],
|
||||
"AYON_USERNAME": instance.context.data["user"],
|
||||
"AYON_LOG_NO_COLORS": "1",
|
||||
"IS_TEST": str(int(is_in_tests())),
|
||||
|
|
|
|||
|
|
@ -130,7 +130,7 @@ class ProcessSubmittedJobOnFarm(pyblish.api.InstancePlugin,
|
|||
"FTRACK_API_USER",
|
||||
"FTRACK_API_KEY",
|
||||
"FTRACK_SERVER",
|
||||
"AVALON_APP_NAME",
|
||||
"AYON_APP_NAME",
|
||||
"AYON_USERNAME",
|
||||
"OPENPYPE_SG_USER",
|
||||
"KITSU_LOGIN",
|
||||
|
|
@ -202,9 +202,9 @@ class ProcessSubmittedJobOnFarm(pyblish.api.InstancePlugin,
|
|||
create_metadata_path(instance, anatomy)
|
||||
|
||||
environment = {
|
||||
"AVALON_PROJECT": instance.context.data["projectName"],
|
||||
"AVALON_ASSET": instance.context.data["asset"],
|
||||
"AVALON_TASK": instance.context.data["task"],
|
||||
"AYON_PROJECT_NAME": instance.context.data["projectName"],
|
||||
"AYON_FOLDER_PATH": instance.context.data["asset"],
|
||||
"AYON_TASK_NAME": instance.context.data["task"],
|
||||
"AYON_USERNAME": instance.context.data["user"],
|
||||
"AYON_LOG_NO_COLORS": "1",
|
||||
"IS_TEST": str(int(is_in_tests())),
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ from Deadline.Scripting import (
|
|||
DirectoryUtils,
|
||||
ProcessUtils,
|
||||
)
|
||||
__version__ = "1.0.0"
|
||||
__version__ = "1.0.1"
|
||||
VERSION_REGEX = re.compile(
|
||||
r"(?P<major>0|[1-9]\d*)"
|
||||
r"\.(?P<minor>0|[1-9]\d*)"
|
||||
|
|
@ -471,12 +471,21 @@ def inject_ayon_environment(deadlinePlugin):
|
|||
]
|
||||
|
||||
add_kwargs = {
|
||||
"project": job.GetJobEnvironmentKeyValue("AVALON_PROJECT"),
|
||||
"asset": job.GetJobEnvironmentKeyValue("AVALON_ASSET"),
|
||||
"task": job.GetJobEnvironmentKeyValue("AVALON_TASK"),
|
||||
"app": job.GetJobEnvironmentKeyValue("AVALON_APP_NAME"),
|
||||
"envgroup": "farm",
|
||||
}
|
||||
# Support backwards compatible keys
|
||||
for key, env_keys in (
|
||||
("project", ["AYON_PROJECT_NAME", "AVALON_PROJECT"]),
|
||||
("asset", ["AYON_FOLDER_PATH", "AVALON_ASSET"]),
|
||||
("task", ["AYON_TASK_NAME", "AVALON_TASK"]),
|
||||
("app", ["AYON_APP_NAME", "AVALON_APP_NAME"]),
|
||||
):
|
||||
value = ""
|
||||
for env_key in env_keys:
|
||||
value = job.GetJobEnvironmentKeyValue(env_key)
|
||||
if value:
|
||||
break
|
||||
add_kwargs[key] = value
|
||||
|
||||
if job.GetJobEnvironmentKeyValue("IS_TEST"):
|
||||
args.append("--automatic-tests")
|
||||
|
|
@ -486,8 +495,8 @@ def inject_ayon_environment(deadlinePlugin):
|
|||
args.extend(["--{}".format(key), value])
|
||||
else:
|
||||
raise RuntimeError((
|
||||
"Missing required env vars: AVALON_PROJECT, AVALON_ASSET,"
|
||||
" AVALON_TASK, AVALON_APP_NAME"
|
||||
"Missing required env vars: AYON_PROJECT_NAME,"
|
||||
" AYON_FOLDER_PATH, AYON_TASK_NAME, AYON_APP_NAME"
|
||||
))
|
||||
|
||||
environment = {
|
||||
|
|
|
|||
|
|
@ -361,8 +361,8 @@ class BaseCreateRoyalRenderJob(pyblish.api.InstancePlugin,
|
|||
|
||||
if not all(add_kwargs.values()):
|
||||
raise RuntimeError((
|
||||
"Missing required env vars: AVALON_PROJECT, AVALON_ASSET,"
|
||||
" AVALON_TASK, AVALON_APP_NAME"
|
||||
"Missing required env vars: AYON_PROJECT_NAME, AYON_FOLDER_PATH,"
|
||||
" AYON_TASK_NAME, AYON_APP_NAME"
|
||||
))
|
||||
|
||||
for key, value in add_kwargs.items():
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ class CreatePublishRoyalRenderJob(pyblish.api.InstancePlugin,
|
|||
"FTRACK_API_USER",
|
||||
"FTRACK_API_KEY",
|
||||
"FTRACK_SERVER",
|
||||
"AVALON_APP_NAME",
|
||||
"AYON_APP_NAME",
|
||||
"AYON_USERNAME",
|
||||
"OPENPYPE_SG_USER",
|
||||
]
|
||||
|
|
@ -179,9 +179,9 @@ class CreatePublishRoyalRenderJob(pyblish.api.InstancePlugin,
|
|||
anatomy_data = instance.context.data["anatomyData"]
|
||||
|
||||
environment = RREnvList({
|
||||
"AVALON_PROJECT": anatomy_data["project"]["name"],
|
||||
"AVALON_ASSET": instance.context.data["asset"],
|
||||
"AVALON_TASK": anatomy_data["task"]["name"],
|
||||
"AYON_PROJECT_NAME": anatomy_data["project"]["name"],
|
||||
"AYON_FOLDER_PATH": instance.context.data["asset"],
|
||||
"AYON_TASK_NAME": anatomy_data["task"]["name"],
|
||||
"AYON_USERNAME": anatomy_data["user"]
|
||||
})
|
||||
|
||||
|
|
|
|||
|
|
@ -136,10 +136,10 @@ class OpenPypeContextSelector:
|
|||
|
||||
def run_publish(self):
|
||||
"""Run publish process."""
|
||||
env = {"AVALON_PROJECT": str(self.context.get("project")),
|
||||
"AVALON_ASSET": str(self.context.get("asset")),
|
||||
"AVALON_TASK": str(self.context.get("task")),
|
||||
# "AVALON_APP_NAME": str(self.context.get("app_name"))
|
||||
env = {"AYON_PROJECT_NAME": str(self.context.get("project")),
|
||||
"AYON_FOLDER_PATH": str(self.context.get("asset")),
|
||||
"AYON_TASK_NAME": str(self.context.get("task")),
|
||||
# "AYON_APP_NAME": str(self.context.get("app_name"))
|
||||
}
|
||||
|
||||
print(">>> setting environment:")
|
||||
|
|
@ -182,10 +182,18 @@ print("running selector")
|
|||
selector = OpenPypeContextSelector()
|
||||
|
||||
# try to set context from environment
|
||||
selector.context["project"] = os.getenv("AVALON_PROJECT")
|
||||
selector.context["asset"] = os.getenv("AVALON_ASSET")
|
||||
selector.context["task"] = os.getenv("AVALON_TASK")
|
||||
# selector.context["app_name"] = os.getenv("AVALON_APP_NAME")
|
||||
for key, env_keys in (
|
||||
("project", ["AYON_PROJECT_NAME", "AVALON_PROJECT"]),
|
||||
("asset", ["AYON_FOLDER_PATH", "AVALON_ASSET"]),
|
||||
("task", ["AYON_TASK_NAME", "AVALON_TASK"]),
|
||||
# ("app_name", ["AYON_APP_NAME", "AVALON_APP_NAME"])
|
||||
):
|
||||
value = ""
|
||||
for env_key in env_keys:
|
||||
value = os.getenv(env_key)
|
||||
if value:
|
||||
break
|
||||
selector.context[key] = value
|
||||
|
||||
# if anything inside is None, scratch the whole thing and
|
||||
# ask user for context.
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ class LauncherAction(object):
|
|||
|
||||
Args:
|
||||
session (dict[str, Union[str, None]]): Session data with
|
||||
AVALON_PROJECT, AVALON_ASSET and AVALON_TASK.
|
||||
AYON_PROJECT_NAME, AYON_FOLDER_PATH and AYON_TASK_NAME.
|
||||
"""
|
||||
|
||||
return True
|
||||
|
|
|
|||
|
|
@ -423,7 +423,7 @@ class Anatomy(BaseAnatomy):
|
|||
|
||||
def __init__(self, project_name=None, site_name=None):
|
||||
if not project_name:
|
||||
project_name = os.environ.get("AVALON_PROJECT")
|
||||
project_name = os.environ.get("AYON_PROJECT_NAME")
|
||||
|
||||
if not project_name:
|
||||
raise ProjectNotSet((
|
||||
|
|
|
|||
|
|
@ -117,12 +117,12 @@ def install_host(host):
|
|||
|
||||
addons_manager = _get_addons_manager()
|
||||
|
||||
project_name = os.getenv("AVALON_PROJECT")
|
||||
project_name = os.getenv("AYON_PROJECT_NAME")
|
||||
# WARNING: This might be an issue
|
||||
# - commented out because 'traypublisher' does not have set project
|
||||
# if not project_name:
|
||||
# raise ValueError(
|
||||
# "AVALON_PROJECT is missing in environment variables."
|
||||
# "AYON_PROJECT_NAME is missing in environment variables."
|
||||
# )
|
||||
|
||||
log.info("Activating {}..".format(project_name))
|
||||
|
|
@ -152,7 +152,7 @@ def install_host(host):
|
|||
print("Registering pyblish target: automated")
|
||||
pyblish.api.register_target("automated")
|
||||
|
||||
host_name = os.environ.get("AVALON_APP")
|
||||
host_name = os.environ.get("AYON_HOST_NAME")
|
||||
|
||||
# Give option to handle host installation
|
||||
for addon in addons_manager.get_enabled_addons():
|
||||
|
|
@ -172,7 +172,7 @@ def install_ayon_plugins(project_name=None, host_name=None):
|
|||
register_inventory_action_path(INVENTORY_PATH)
|
||||
|
||||
if host_name is None:
|
||||
host_name = os.environ.get("AVALON_APP")
|
||||
host_name = os.environ.get("AYON_HOST_NAME")
|
||||
|
||||
addons_manager = _get_addons_manager()
|
||||
publish_plugin_dirs = addons_manager.collect_publish_plugin_paths(
|
||||
|
|
@ -196,7 +196,7 @@ def install_ayon_plugins(project_name=None, host_name=None):
|
|||
register_inventory_action_path(path)
|
||||
|
||||
if project_name is None:
|
||||
project_name = os.environ.get("AVALON_PROJECT")
|
||||
project_name = os.environ.get("AYON_PROJECT_NAME")
|
||||
|
||||
# Register studio specific plugins
|
||||
if project_name:
|
||||
|
|
@ -331,7 +331,7 @@ def get_current_host_name():
|
|||
"""Current host name.
|
||||
|
||||
Function is based on currently registered host integration or environment
|
||||
variable 'AVALON_APP'.
|
||||
variable 'AYON_HOST_NAME'.
|
||||
|
||||
Returns:
|
||||
Union[str, None]: Name of host integration in current process or None.
|
||||
|
|
@ -340,7 +340,7 @@ def get_current_host_name():
|
|||
host = registered_host()
|
||||
if isinstance(host, HostBase):
|
||||
return host.name
|
||||
return os.environ.get("AVALON_APP")
|
||||
return os.environ.get("AYON_HOST_NAME")
|
||||
|
||||
|
||||
def get_global_context():
|
||||
|
|
@ -365,9 +365,9 @@ def get_global_context():
|
|||
"""
|
||||
|
||||
return {
|
||||
"project_name": os.environ.get("AVALON_PROJECT"),
|
||||
"asset_name": os.environ.get("AVALON_ASSET"),
|
||||
"task_name": os.environ.get("AVALON_TASK"),
|
||||
"project_name": os.environ.get("AYON_PROJECT_NAME"),
|
||||
"asset_name": os.environ.get("AYON_FOLDER_PATH"),
|
||||
"task_name": os.environ.get("AYON_TASK_NAME"),
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -474,10 +474,10 @@ def get_template_data_from_session(session=None, system_settings=None):
|
|||
"""
|
||||
|
||||
if session is not None:
|
||||
project_name = session["AVALON_PROJECT"]
|
||||
asset_name = session["AVALON_ASSET"]
|
||||
task_name = session["AVALON_TASK"]
|
||||
host_name = session["AVALON_APP"]
|
||||
project_name = session["AYON_PROJECT_NAME"]
|
||||
asset_name = session["AYON_FOLDER_PATH"]
|
||||
task_name = session["AYON_TASK_NAME"]
|
||||
host_name = session["AYON_HOST_NAME"]
|
||||
else:
|
||||
context = get_current_context()
|
||||
project_name = context["project_name"]
|
||||
|
|
@ -525,8 +525,8 @@ def get_workdir_from_session(session=None, template_key=None):
|
|||
"""
|
||||
|
||||
if session is not None:
|
||||
project_name = session["AVALON_PROJECT"]
|
||||
host_name = session["AVALON_APP"]
|
||||
project_name = session["AYON_PROJECT_NAME"]
|
||||
host_name = session["AYON_HOST_NAME"]
|
||||
else:
|
||||
project_name = get_current_project_name()
|
||||
host_name = get_current_host_name()
|
||||
|
|
@ -566,10 +566,10 @@ def get_custom_workfile_template_from_session(
|
|||
"""
|
||||
|
||||
if session is not None:
|
||||
project_name = session["AVALON_PROJECT"]
|
||||
asset_name = session["AVALON_ASSET"]
|
||||
task_name = session["AVALON_TASK"]
|
||||
host_name = session["AVALON_APP"]
|
||||
project_name = session["AYON_PROJECT_NAME"]
|
||||
asset_name = session["AYON_FOLDER_PATH"]
|
||||
task_name = session["AYON_TASK_NAME"]
|
||||
host_name = session["AYON_HOST_NAME"]
|
||||
else:
|
||||
context = get_current_context()
|
||||
project_name = context["project_name"]
|
||||
|
|
@ -616,10 +616,10 @@ def change_current_context(asset_doc, task_name, template_key=None):
|
|||
|
||||
folder_path = get_asset_name_identifier(asset_doc)
|
||||
envs = {
|
||||
"AVALON_PROJECT": project_name,
|
||||
"AVALON_ASSET": folder_path,
|
||||
"AVALON_TASK": task_name,
|
||||
"AVALON_WORKDIR": workdir,
|
||||
"AYON_PROJECT_NAME": project_name,
|
||||
"AYON_FOLDER_PATH": folder_path,
|
||||
"AYON_TASK_NAME": task_name,
|
||||
"AYON_WORKDIR": workdir,
|
||||
}
|
||||
|
||||
# Update the Session and environments. Pop from environments all keys with
|
||||
|
|
|
|||
|
|
@ -1536,7 +1536,7 @@ class CreateContext:
|
|||
def host_name(self):
|
||||
if hasattr(self.host, "name"):
|
||||
return self.host.name
|
||||
return os.environ["AVALON_APP"]
|
||||
return os.environ["AYON_HOST_NAME"]
|
||||
|
||||
def get_current_project_name(self):
|
||||
"""Project name which was used as current context on context reset.
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ class LegacyCreator(object):
|
|||
def apply_settings(cls, project_settings, system_settings):
|
||||
"""Apply OpenPype settings to a plugin class."""
|
||||
|
||||
host_name = os.environ.get("AVALON_APP")
|
||||
host_name = os.environ.get("AYON_HOST_NAME")
|
||||
plugin_type = "create"
|
||||
plugin_type_settings = (
|
||||
project_settings
|
||||
|
|
|
|||
|
|
@ -128,13 +128,13 @@ def get_subset_name(
|
|||
return ""
|
||||
|
||||
if not host_name:
|
||||
host_name = os.environ.get("AVALON_APP")
|
||||
host_name = os.environ.get("AYON_HOST_NAME")
|
||||
|
||||
# Use only last part of class family value split by dot (`.`)
|
||||
family = family.rsplit(".", 1)[-1]
|
||||
|
||||
if project_name is None:
|
||||
project_name = os.environ.get("AVALON_PROJECT")
|
||||
project_name = os.environ.get("AYON_PROJECT_NAME")
|
||||
|
||||
asset_tasks = asset_doc.get("data", {}).get("tasks") or {}
|
||||
task_info = asset_tasks.get(task_name) or {}
|
||||
|
|
|
|||
|
|
@ -321,7 +321,7 @@ def prepare_representations(skeleton_data, exp_files, anatomy, aov_filter,
|
|||
|
||||
"""
|
||||
representations = []
|
||||
host_name = os.environ.get("AVALON_APP", "")
|
||||
host_name = os.environ.get("AYON_HOST_NAME", "")
|
||||
collections, remainders = clique.assemble(exp_files)
|
||||
|
||||
log = Logger.get_logger("farm_publishing")
|
||||
|
|
@ -541,7 +541,7 @@ def _create_instances_for_aov(instance, skeleton, aov_filter, additional_data,
|
|||
|
||||
"""
|
||||
# TODO: this needs to be taking the task from context or instance
|
||||
task = os.environ["AVALON_TASK"]
|
||||
task = os.environ["AYON_TASK_NAME"]
|
||||
|
||||
anatomy = instance.context.data["anatomy"]
|
||||
subset = skeleton["subset"]
|
||||
|
|
@ -611,7 +611,7 @@ def _create_instances_for_aov(instance, skeleton, aov_filter, additional_data,
|
|||
|
||||
log.info("Creating data for: {}".format(subset_name))
|
||||
|
||||
app = os.environ.get("AVALON_APP", "")
|
||||
app = os.environ.get("AYON_HOST_NAME", "")
|
||||
|
||||
if isinstance(col, list):
|
||||
render_file_name = os.path.basename(col[0])
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ class LoaderPlugin(list):
|
|||
|
||||
@classmethod
|
||||
def apply_settings(cls, project_settings, system_settings):
|
||||
host_name = os.environ.get("AVALON_APP")
|
||||
host_name = os.environ.get("AYON_HOST_NAME")
|
||||
plugin_type = "load"
|
||||
plugin_type_settings = (
|
||||
project_settings
|
||||
|
|
|
|||
|
|
@ -437,7 +437,7 @@ def filter_pyblish_plugins(plugins):
|
|||
# - kept becau on farm is probably used host 'shell' which propably
|
||||
# affect how settings are applied there
|
||||
host_name = pyblish.api.current_host()
|
||||
project_name = os.environ.get("AVALON_PROJECT")
|
||||
project_name = os.environ.get("AYON_PROJECT_NAME")
|
||||
|
||||
project_settings = get_project_settings(project_name)
|
||||
system_settings = get_system_settings()
|
||||
|
|
|
|||
|
|
@ -229,8 +229,8 @@ class BuildWorkfile:
|
|||
def get_build_presets(self, task_name, asset_doc):
|
||||
""" Returns presets to build workfile for task name.
|
||||
|
||||
Presets are loaded for current project set in
|
||||
io.Session["AVALON_PROJECT"], filtered by registered host
|
||||
Presets are loaded for current project received by
|
||||
'get_current_project_name', filtered by registered host
|
||||
and entered task name.
|
||||
|
||||
Args:
|
||||
|
|
|
|||
|
|
@ -157,7 +157,7 @@ def get_workdir(
|
|||
task_name (str): Task name for which are workdir data preapred.
|
||||
host_name (str): Host which is used to workdir. This is required
|
||||
because workdir template may contain `{app}` key. In `Session`
|
||||
is stored under `AVALON_APP` key.
|
||||
is stored under `AYON_HOST_NAME` key.
|
||||
anatomy (Anatomy): Optional argument. Anatomy object is created using
|
||||
project name from `project_doc`. It is preferred to pass this
|
||||
argument as initialization of a new Anatomy object may be time
|
||||
|
|
|
|||
|
|
@ -103,7 +103,7 @@ class AbstractTemplateBuilder(object):
|
|||
if isinstance(host, HostBase):
|
||||
host_name = host.name
|
||||
else:
|
||||
host_name = os.environ.get("AVALON_APP")
|
||||
host_name = os.environ.get("AYON_HOST_NAME")
|
||||
|
||||
self._host = host
|
||||
self._host_name = host_name
|
||||
|
|
@ -129,19 +129,19 @@ class AbstractTemplateBuilder(object):
|
|||
def project_name(self):
|
||||
if isinstance(self._host, HostBase):
|
||||
return self._host.get_current_project_name()
|
||||
return os.getenv("AVALON_PROJECT")
|
||||
return os.getenv("AYON_PROJECT_NAME")
|
||||
|
||||
@property
|
||||
def current_asset_name(self):
|
||||
if isinstance(self._host, HostBase):
|
||||
return self._host.get_current_asset_name()
|
||||
return os.getenv("AVALON_ASSET")
|
||||
return os.getenv("AYON_FOLDER_PATH")
|
||||
|
||||
@property
|
||||
def current_task_name(self):
|
||||
if isinstance(self._host, HostBase):
|
||||
return self._host.get_current_task_name()
|
||||
return os.getenv("AVALON_TASK")
|
||||
return os.getenv("AYON_TASK_NAME")
|
||||
|
||||
def get_current_context(self):
|
||||
if isinstance(self._host, HostBase):
|
||||
|
|
@ -585,7 +585,7 @@ class AbstractTemplateBuilder(object):
|
|||
template_path (str): Fullpath for current task and
|
||||
host's template file.
|
||||
"""
|
||||
last_workfile_path = os.environ.get("AVALON_LAST_WORKFILE")
|
||||
last_workfile_path = os.environ.get("AYON_LAST_WORKFILE")
|
||||
self.log.info("__ last_workfile_path: {}".format(last_workfile_path))
|
||||
if os.path.exists(last_workfile_path):
|
||||
# ignore in case workfile existence
|
||||
|
|
|
|||
|
|
@ -22,14 +22,14 @@ class OpenTaskPath(LauncherAction):
|
|||
|
||||
def is_compatible(self, session):
|
||||
"""Return whether the action is compatible with the session"""
|
||||
return bool(session.get("AVALON_ASSET"))
|
||||
return bool(session.get("AYON_FOLDER_PATH"))
|
||||
|
||||
def process(self, session, **kwargs):
|
||||
from qtpy import QtCore, QtWidgets
|
||||
|
||||
project_name = session["AVALON_PROJECT"]
|
||||
asset_name = session["AVALON_ASSET"]
|
||||
task_name = session.get("AVALON_TASK", None)
|
||||
project_name = session["AYON_PROJECT_NAME"]
|
||||
asset_name = session["AYON_FOLDER_PATH"]
|
||||
task_name = session.get("AYON_TASK_NAME", None)
|
||||
|
||||
path = self._get_workdir(project_name, asset_name, task_name)
|
||||
if not path:
|
||||
|
|
|
|||
|
|
@ -359,7 +359,7 @@
|
|||
#
|
||||
# if mongo_changes_bulk:
|
||||
# dbcon = AvalonMongoDB()
|
||||
# dbcon.Session["AVALON_PROJECT"] = project_name
|
||||
# dbcon.Session["AYON_PROJECT_NAME"] = project_name
|
||||
# dbcon.install()
|
||||
# dbcon.bulk_write(mongo_changes_bulk)
|
||||
# dbcon.uninstall()
|
||||
|
|
|
|||
|
|
@ -4,9 +4,9 @@ Requires:
|
|||
context -> anatomy
|
||||
context -> projectEntity
|
||||
context -> assetEntity
|
||||
context -> task
|
||||
context -> username
|
||||
context -> datetimeData
|
||||
session -> AVALON_TASK
|
||||
|
||||
Provides:
|
||||
context -> anatomyData
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
"""Collect Anatomy and global anatomy data.
|
||||
|
||||
Requires:
|
||||
session -> AVALON_ASSET
|
||||
context -> projectName
|
||||
context -> asset
|
||||
context -> task
|
||||
|
|
|
|||
|
|
@ -57,9 +57,9 @@ class CollectFromCreateContext(pyblish.api.ContextPlugin):
|
|||
asset_name = create_context.get_current_asset_name()
|
||||
task_name = create_context.get_current_task_name()
|
||||
for key, value in (
|
||||
("AVALON_PROJECT", project_name),
|
||||
("AVALON_ASSET", asset_name),
|
||||
("AVALON_TASK", task_name)
|
||||
("AYON_PROJECT_NAME", project_name),
|
||||
("AYON_FOLDER_PATH", asset_name),
|
||||
("AYON_TASK_NAME", task_name)
|
||||
):
|
||||
if value is None:
|
||||
os.environ.pop(key, None)
|
||||
|
|
|
|||
|
|
@ -24,13 +24,13 @@ class CollectHostName(pyblish.api.ContextPlugin):
|
|||
if host_name and app_name and app_label:
|
||||
return
|
||||
|
||||
# Use AVALON_APP to get host name if available
|
||||
# Use AYON_HOST_NAME to get host name if available
|
||||
if not host_name:
|
||||
host_name = os.environ.get("AVALON_APP")
|
||||
host_name = os.environ.get("AYON_HOST_NAME")
|
||||
|
||||
# Use AVALON_APP_NAME to get full app name
|
||||
# Use AYON_APP_NAME to get full app name
|
||||
if not app_name:
|
||||
app_name = os.environ.get("AVALON_APP_NAME")
|
||||
app_name = os.environ.get("AYON_APP_NAME")
|
||||
|
||||
# Fill missing values based on app full name
|
||||
if (not host_name or not app_label) and app_name:
|
||||
|
|
|
|||
|
|
@ -179,14 +179,14 @@ class CollectRenderedFiles(pyblish.api.ContextPlugin):
|
|||
)
|
||||
|
||||
# Remap workdir if it's set
|
||||
workdir = os.getenv("AVALON_WORKDIR")
|
||||
workdir = os.getenv("AYON_WORKDIR")
|
||||
remapped_workdir = None
|
||||
if workdir:
|
||||
remapped_workdir = anatomy.roots_obj.path_remapper(
|
||||
os.getenv("AVALON_WORKDIR")
|
||||
os.getenv("AYON_WORKDIR")
|
||||
)
|
||||
if remapped_workdir:
|
||||
os.environ["AVALON_WORKDIR"] = remapped_workdir
|
||||
os.environ["AYON_WORKDIR"] = remapped_workdir
|
||||
except Exception as e:
|
||||
self.log.error(e, exc_info=True)
|
||||
raise Exception("Error") from e
|
||||
|
|
|
|||
|
|
@ -79,7 +79,7 @@ def main(argv):
|
|||
if after_script_idx is not None:
|
||||
launch_args = sys_args[after_script_idx:]
|
||||
|
||||
host_name = os.environ["AVALON_APP"].lower()
|
||||
host_name = os.environ["AYON_HOST_NAME"].lower()
|
||||
if host_name == "photoshop":
|
||||
# TODO refactor launch logic according to AE
|
||||
from ayon_core.hosts.photoshop.api.lib import main
|
||||
|
|
@ -90,7 +90,7 @@ def main(argv):
|
|||
else:
|
||||
title = "Unknown host name"
|
||||
message = (
|
||||
"BUG: Environment variable AVALON_APP contains unknown"
|
||||
"BUG: Environment variable AYON_HOST_NAME contains unknown"
|
||||
" host name \"{}\""
|
||||
).format(host_name)
|
||||
show_error_messagebox(title, message)
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ from .lib import (
|
|||
get_current_project_settings,
|
||||
get_local_settings,
|
||||
)
|
||||
from .ayon_settings import get_ayon_settings
|
||||
|
||||
|
||||
__all__ = (
|
||||
|
|
@ -20,4 +21,6 @@ __all__ = (
|
|||
"get_project_settings",
|
||||
"get_current_project_settings",
|
||||
"get_local_settings",
|
||||
|
||||
"get_ayon_settings",
|
||||
)
|
||||
|
|
|
|||
|
|
@ -62,36 +62,6 @@ def _convert_general(ayon_settings, output, default_settings):
|
|||
}
|
||||
|
||||
|
||||
def _convert_kitsu_system_settings(
|
||||
ayon_settings, output, addon_versions, default_settings
|
||||
):
|
||||
if "kitsu" in ayon_settings:
|
||||
output["kitsu"] = ayon_settings["kitsu"]
|
||||
|
||||
enabled = addon_versions.get("kitsu") is not None
|
||||
kitsu_settings = default_settings["modules"]["kitsu"]
|
||||
kitsu_settings["enabled"] = enabled
|
||||
if enabled:
|
||||
kitsu_settings["server"] = ayon_settings["kitsu"]["server"]
|
||||
output["modules"]["kitsu"] = kitsu_settings
|
||||
|
||||
|
||||
def _convert_deadline_system_settings(
|
||||
ayon_settings, output, addon_versions, default_settings
|
||||
):
|
||||
enabled = addon_versions.get("deadline") is not None
|
||||
deadline_settings = default_settings["modules"]["deadline"]
|
||||
deadline_settings["enabled"] = enabled
|
||||
if enabled:
|
||||
ayon_deadline = ayon_settings["deadline"]
|
||||
deadline_settings["deadline_urls"] = {
|
||||
item["name"]: item["value"]
|
||||
for item in ayon_deadline["deadline_urls"]
|
||||
}
|
||||
|
||||
output["modules"]["deadline"] = deadline_settings
|
||||
|
||||
|
||||
def _convert_royalrender_system_settings(
|
||||
ayon_settings, output, addon_versions, default_settings
|
||||
):
|
||||
|
|
@ -113,8 +83,6 @@ def _convert_modules_system(
|
|||
# TODO add all modules
|
||||
# TODO add 'enabled' values
|
||||
for func in (
|
||||
_convert_kitsu_system_settings,
|
||||
_convert_deadline_system_settings,
|
||||
_convert_royalrender_system_settings,
|
||||
):
|
||||
func(ayon_settings, output, addon_versions, default_settings)
|
||||
|
|
@ -122,6 +90,7 @@ def _convert_modules_system(
|
|||
for key in {
|
||||
"timers_manager",
|
||||
"clockify",
|
||||
"deadline",
|
||||
}:
|
||||
if addon_versions.get(key):
|
||||
output[key] = ayon_settings
|
||||
|
|
@ -164,9 +133,6 @@ def convert_system_settings(ayon_settings, default_settings, addon_versions):
|
|||
output = {
|
||||
"modules": {}
|
||||
}
|
||||
if "applications" in ayon_settings:
|
||||
output["applications"] = ayon_settings["applications"]
|
||||
|
||||
if "core" in ayon_settings:
|
||||
_convert_general(ayon_settings, output, default_settings)
|
||||
|
||||
|
|
@ -188,59 +154,6 @@ def convert_system_settings(ayon_settings, default_settings, addon_versions):
|
|||
|
||||
|
||||
# --------- Project settings ---------
|
||||
def _convert_blender_project_settings(ayon_settings, output):
|
||||
if "blender" not in ayon_settings:
|
||||
return
|
||||
ayon_blender = ayon_settings["blender"]
|
||||
|
||||
output["blender"] = ayon_blender
|
||||
|
||||
|
||||
def _convert_celaction_project_settings(ayon_settings, output):
|
||||
if "celaction" not in ayon_settings:
|
||||
return
|
||||
|
||||
ayon_celaction = ayon_settings["celaction"]
|
||||
|
||||
output["celaction"] = ayon_celaction
|
||||
|
||||
|
||||
def _convert_flame_project_settings(ayon_settings, output):
|
||||
if "flame" not in ayon_settings:
|
||||
return
|
||||
|
||||
ayon_flame = ayon_settings["flame"]
|
||||
|
||||
output["flame"] = ayon_flame
|
||||
|
||||
|
||||
def _convert_fusion_project_settings(ayon_settings, output):
|
||||
if "fusion" not in ayon_settings:
|
||||
return
|
||||
|
||||
ayon_fusion = ayon_settings["fusion"]
|
||||
|
||||
output["fusion"] = ayon_fusion
|
||||
|
||||
|
||||
def _convert_maya_project_settings(ayon_settings, output):
|
||||
if "maya" not in ayon_settings:
|
||||
return
|
||||
|
||||
ayon_maya = ayon_settings["maya"]
|
||||
|
||||
output["maya"] = ayon_maya
|
||||
|
||||
|
||||
def _convert_3dsmax_project_settings(ayon_settings, output):
|
||||
if "max" not in ayon_settings:
|
||||
return
|
||||
|
||||
ayon_max = ayon_settings["max"]
|
||||
|
||||
output["max"] = ayon_max
|
||||
|
||||
|
||||
def _convert_nuke_knobs(knobs):
|
||||
new_knobs = []
|
||||
for knob in knobs:
|
||||
|
|
@ -456,56 +369,6 @@ def _convert_hiero_project_settings(ayon_settings, output):
|
|||
output["hiero"] = ayon_hiero
|
||||
|
||||
|
||||
def _convert_photoshop_project_settings(ayon_settings, output):
|
||||
if "photoshop" not in ayon_settings:
|
||||
return
|
||||
|
||||
ayon_photoshop = ayon_settings["photoshop"]
|
||||
output["photoshop"] = ayon_photoshop
|
||||
|
||||
|
||||
def _convert_substancepainter_project_settings(ayon_settings, output):
|
||||
if "substancepainter" not in ayon_settings:
|
||||
return
|
||||
|
||||
ayon_substance_painter = ayon_settings["substancepainter"]
|
||||
output["substancepainter"] = ayon_substance_painter
|
||||
|
||||
|
||||
def _convert_tvpaint_project_settings(ayon_settings, output):
|
||||
if "tvpaint" not in ayon_settings:
|
||||
return
|
||||
|
||||
ayon_tvpaint = ayon_settings["tvpaint"]
|
||||
output["tvpaint"] = ayon_tvpaint
|
||||
|
||||
|
||||
def _convert_traypublisher_project_settings(ayon_settings, output):
|
||||
if "traypublisher" not in ayon_settings:
|
||||
return
|
||||
|
||||
ayon_traypublisher = ayon_settings["traypublisher"]
|
||||
|
||||
output["traypublisher"] = ayon_traypublisher
|
||||
|
||||
|
||||
def _convert_webpublisher_project_settings(ayon_settings, output):
|
||||
if "webpublisher" not in ayon_settings:
|
||||
return
|
||||
|
||||
ayon_webpublisher = ayon_settings["webpublisher"]
|
||||
|
||||
ayon_publish = ayon_webpublisher["publish"]
|
||||
|
||||
ayon_collect_files = ayon_publish["CollectPublishedFiles"]
|
||||
ayon_collect_files["task_type_to_family"] = {
|
||||
item["name"]: item["value"]
|
||||
for item in ayon_collect_files["task_type_to_family"]
|
||||
}
|
||||
|
||||
output["webpublisher"] = ayon_webpublisher
|
||||
|
||||
|
||||
def _convert_royalrender_project_settings(ayon_settings, output):
|
||||
if "royalrender" not in ayon_settings:
|
||||
return
|
||||
|
|
@ -518,62 +381,6 @@ def _convert_royalrender_project_settings(ayon_settings, output):
|
|||
}
|
||||
|
||||
|
||||
def _convert_kitsu_project_settings(ayon_settings, output):
|
||||
if "kitsu" not in ayon_settings:
|
||||
return
|
||||
|
||||
ayon_kitsu_settings = ayon_settings["kitsu"]
|
||||
ayon_kitsu_settings.pop("server")
|
||||
|
||||
integrate_note = ayon_kitsu_settings["publish"]["IntegrateKitsuNote"]
|
||||
status_change_conditions = integrate_note["status_change_conditions"]
|
||||
if "product_type_requirements" in status_change_conditions:
|
||||
status_change_conditions["family_requirements"] = (
|
||||
status_change_conditions.pop("product_type_requirements"))
|
||||
|
||||
output["kitsu"] = ayon_kitsu_settings
|
||||
|
||||
|
||||
def _convert_shotgrid_project_settings(ayon_settings, output):
|
||||
if "shotgrid" not in ayon_settings:
|
||||
return
|
||||
|
||||
ayon_shotgrid = ayon_settings["shotgrid"]
|
||||
# This means that a different variant of addon is used
|
||||
if "leecher_backend_url" not in ayon_shotgrid:
|
||||
return
|
||||
|
||||
for key in {
|
||||
"leecher_backend_url",
|
||||
"filter_projects_by_login",
|
||||
"shotgrid_settings",
|
||||
"leecher_manager_url",
|
||||
}:
|
||||
ayon_shotgrid.pop(key)
|
||||
|
||||
asset_field = ayon_shotgrid["fields"]["asset"]
|
||||
asset_field["type"] = asset_field.pop("asset_type")
|
||||
|
||||
task_field = ayon_shotgrid["fields"]["task"]
|
||||
if "task" in task_field:
|
||||
task_field["step"] = task_field.pop("task")
|
||||
|
||||
output["shotgrid"] = ayon_settings["shotgrid"]
|
||||
|
||||
|
||||
def _convert_slack_project_settings(ayon_settings, output):
|
||||
if "slack" not in ayon_settings:
|
||||
return
|
||||
|
||||
ayon_slack = ayon_settings["slack"]
|
||||
ayon_slack.pop("enabled", None)
|
||||
for profile in ayon_slack["publish"]["CollectSlackFamilies"]["profiles"]:
|
||||
profile["tasks"] = profile.pop("task_names")
|
||||
profile["subsets"] = profile.pop("subset_names")
|
||||
|
||||
output["slack"] = ayon_slack
|
||||
|
||||
|
||||
def _convert_global_project_settings(ayon_settings, output, default_settings):
|
||||
if "core" not in ayon_settings:
|
||||
return
|
||||
|
|
@ -747,41 +554,13 @@ def _convert_global_project_settings(ayon_settings, output, default_settings):
|
|||
|
||||
|
||||
def convert_project_settings(ayon_settings, default_settings):
|
||||
# Missing settings
|
||||
# - standalonepublisher
|
||||
default_settings = copy.deepcopy(default_settings)
|
||||
output = {}
|
||||
exact_match = {
|
||||
"aftereffects",
|
||||
"harmony",
|
||||
"houdini",
|
||||
"resolve",
|
||||
"unreal",
|
||||
"applications",
|
||||
"deadline",
|
||||
}
|
||||
for key in exact_match:
|
||||
if key in ayon_settings:
|
||||
output[key] = ayon_settings[key]
|
||||
|
||||
_convert_blender_project_settings(ayon_settings, output)
|
||||
_convert_celaction_project_settings(ayon_settings, output)
|
||||
_convert_flame_project_settings(ayon_settings, output)
|
||||
_convert_fusion_project_settings(ayon_settings, output)
|
||||
_convert_maya_project_settings(ayon_settings, output)
|
||||
_convert_3dsmax_project_settings(ayon_settings, output)
|
||||
_convert_nuke_project_settings(ayon_settings, output)
|
||||
_convert_hiero_project_settings(ayon_settings, output)
|
||||
_convert_photoshop_project_settings(ayon_settings, output)
|
||||
_convert_substancepainter_project_settings(ayon_settings, output)
|
||||
_convert_tvpaint_project_settings(ayon_settings, output)
|
||||
_convert_traypublisher_project_settings(ayon_settings, output)
|
||||
_convert_webpublisher_project_settings(ayon_settings, output)
|
||||
|
||||
_convert_royalrender_project_settings(ayon_settings, output)
|
||||
_convert_kitsu_project_settings(ayon_settings, output)
|
||||
_convert_shotgrid_project_settings(ayon_settings, output)
|
||||
_convert_slack_project_settings(ayon_settings, output)
|
||||
|
||||
_convert_global_project_settings(ayon_settings, output, default_settings)
|
||||
|
||||
|
|
|
|||
|
|
@ -241,15 +241,15 @@ def get_site_local_overrides(project_name, site_name, local_settings=None):
|
|||
def get_current_project_settings():
|
||||
"""Project settings for current context project.
|
||||
|
||||
Project name should be stored in environment variable `AVALON_PROJECT`.
|
||||
Project name should be stored in environment variable `AYON_PROJECT_NAME`.
|
||||
This function should be used only in host context where environment
|
||||
variable must be set and should not happen that any part of process will
|
||||
change the value of the enviornment variable.
|
||||
"""
|
||||
project_name = os.environ.get("AVALON_PROJECT")
|
||||
project_name = os.environ.get("AYON_PROJECT_NAME")
|
||||
if not project_name:
|
||||
raise ValueError(
|
||||
"Missing context project in environemt variable `AVALON_PROJECT`."
|
||||
"Missing context project in environemt variable `AYON_PROJECT_NAME`."
|
||||
)
|
||||
return get_project_settings(project_name)
|
||||
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ from .folders_widget import (
|
|||
FoldersWidget,
|
||||
FoldersQtModel,
|
||||
FOLDERS_MODEL_SENDER_NAME,
|
||||
SimpleFoldersWidget,
|
||||
)
|
||||
|
||||
from .tasks_widget import (
|
||||
|
|
@ -31,6 +32,7 @@ __all__ = (
|
|||
"FoldersWidget",
|
||||
"FoldersQtModel",
|
||||
"FOLDERS_MODEL_SENDER_NAME",
|
||||
"SimpleFoldersWidget",
|
||||
|
||||
"TasksWidget",
|
||||
"TasksQtModel",
|
||||
|
|
|
|||
|
|
@ -2,6 +2,11 @@ import collections
|
|||
|
||||
from qtpy import QtWidgets, QtGui, QtCore
|
||||
|
||||
from ayon_core.lib.events import QueuedEventSystem
|
||||
from ayon_core.tools.ayon_utils.models import (
|
||||
HierarchyModel,
|
||||
HierarchyExpectedSelection,
|
||||
)
|
||||
from ayon_core.tools.utils import (
|
||||
RecursiveSortFilterProxyModel,
|
||||
TreeView,
|
||||
|
|
@ -390,6 +395,15 @@ class FoldersWidget(QtWidgets.QWidget):
|
|||
|
||||
return self._get_selected_item_id()
|
||||
|
||||
def get_selected_folder_path(self):
|
||||
"""Get selected folder id.
|
||||
|
||||
Returns:
|
||||
Union[str, None]: Folder path which is selected.
|
||||
"""
|
||||
|
||||
return self._get_selected_item_value(FOLDER_PATH_ROLE)
|
||||
|
||||
def get_selected_folder_label(self):
|
||||
"""Selected folder label.
|
||||
|
||||
|
|
@ -473,9 +487,12 @@ class FoldersWidget(QtWidgets.QWidget):
|
|||
self.refreshed.emit()
|
||||
|
||||
def _get_selected_item_id(self):
|
||||
return self._get_selected_item_value(FOLDER_ID_ROLE)
|
||||
|
||||
def _get_selected_item_value(self, role):
|
||||
selection_model = self._folders_view.selectionModel()
|
||||
for index in selection_model.selectedIndexes():
|
||||
item_id = index.data(FOLDER_ID_ROLE)
|
||||
item_id = index.data(role)
|
||||
if item_id is not None:
|
||||
return item_id
|
||||
return None
|
||||
|
|
@ -514,3 +531,110 @@ class FoldersWidget(QtWidgets.QWidget):
|
|||
if folder_id is not None:
|
||||
self.set_selected_folder(folder_id)
|
||||
self._controller.expected_folder_selected(folder_id)
|
||||
|
||||
|
||||
class SimpleSelectionModel(object):
|
||||
"""Model handling selection changes.
|
||||
|
||||
Triggering events:
|
||||
- "selection.project.changed"
|
||||
- "selection.folder.changed"
|
||||
"""
|
||||
|
||||
event_source = "selection.model"
|
||||
|
||||
def __init__(self, controller):
|
||||
self._controller = controller
|
||||
|
||||
self._project_name = None
|
||||
self._folder_id = None
|
||||
self._task_id = None
|
||||
self._task_name = None
|
||||
|
||||
def get_selected_project_name(self):
|
||||
return self._project_name
|
||||
|
||||
def set_selected_project(self, project_name):
|
||||
self._project_name = project_name
|
||||
self._controller.emit_event(
|
||||
"selection.project.changed",
|
||||
{"project_name": project_name},
|
||||
self.event_source
|
||||
)
|
||||
|
||||
def get_selected_folder_id(self):
|
||||
return self._folder_id
|
||||
|
||||
def set_selected_folder(self, folder_id):
|
||||
if folder_id == self._folder_id:
|
||||
return
|
||||
self._folder_id = folder_id
|
||||
self._controller.emit_event(
|
||||
"selection.folder.changed",
|
||||
{
|
||||
"project_name": self._project_name,
|
||||
"folder_id": folder_id,
|
||||
},
|
||||
self.event_source
|
||||
)
|
||||
|
||||
|
||||
class SimpleFoldersController(object):
|
||||
def __init__(self):
|
||||
self._event_system = self._create_event_system()
|
||||
self._hierarchy_model = HierarchyModel(self)
|
||||
self._selection_model = SimpleSelectionModel(self)
|
||||
self._expected_selection = HierarchyExpectedSelection(
|
||||
self, handle_project=False, handle_folder=True, handle_task=False
|
||||
)
|
||||
|
||||
def emit_event(self, topic, data=None, source=None):
|
||||
"""Use implemented event system to trigger event."""
|
||||
|
||||
if data is None:
|
||||
data = {}
|
||||
self._event_system.emit(topic, data, source)
|
||||
|
||||
def register_event_callback(self, topic, callback):
|
||||
self._event_system.add_callback(topic, callback)
|
||||
|
||||
# Model functions
|
||||
def get_folder_items(self, project_name, sender=None):
|
||||
return self._hierarchy_model.get_folder_items(project_name, sender)
|
||||
|
||||
def set_selected_project(self, project_name):
|
||||
self._selection_model.set_selected_project(project_name)
|
||||
|
||||
def set_selected_folder(self, folder_id):
|
||||
self._selection_model.set_selected_folder(folder_id)
|
||||
|
||||
def get_expected_selection_data(self):
|
||||
self._expected_selection.get_expected_selection_data()
|
||||
|
||||
def expected_folder_selected(self, folder_id):
|
||||
self._expected_selection.expected_folder_selected(folder_id)
|
||||
|
||||
def _create_event_system(self):
|
||||
return QueuedEventSystem()
|
||||
|
||||
|
||||
class SimpleFoldersWidget(FoldersWidget):
|
||||
def __init__(self, controller=None, *args, **kwargs):
|
||||
if controller is None:
|
||||
controller = SimpleFoldersController()
|
||||
super(SimpleFoldersWidget, self).__init__(controller, *args, **kwargs)
|
||||
|
||||
def set_project_name(self, project_name):
|
||||
self._controller.set_selected_project(project_name)
|
||||
super(SimpleFoldersWidget, self).set_project_name(project_name)
|
||||
|
||||
def _on_project_selection_change(self, event):
|
||||
"""Ignore project selection change from controller.
|
||||
|
||||
Only who can trigger project change is this widget with
|
||||
'set_project_name' which already cares about project change.
|
||||
|
||||
Args:
|
||||
event (Event): Triggered event.
|
||||
"""
|
||||
pass
|
||||
|
|
|
|||
|
|
@ -89,9 +89,13 @@ class ExperimentalTools:
|
|||
"New publisher",
|
||||
"Combined creation and publishing into one tool.",
|
||||
self._show_publisher,
|
||||
hosts_filter=["blender", "maya", "nuke", "celaction", "flame",
|
||||
"fusion", "harmony", "hiero", "resolve",
|
||||
"tvpaint", "unreal"]
|
||||
hosts_filter=[
|
||||
"celaction",
|
||||
"flame",
|
||||
"harmony",
|
||||
"hiero",
|
||||
"resolve",
|
||||
]
|
||||
)
|
||||
]
|
||||
|
||||
|
|
@ -139,7 +143,7 @@ class ExperimentalTools:
|
|||
|
||||
def get_tools_for_host(self, host_name=None):
|
||||
if not host_name:
|
||||
host_name = os.environ.get("AVALON_APP")
|
||||
host_name = os.environ.get("AYON_HOST_NAME")
|
||||
tools = []
|
||||
for tool in self.tools:
|
||||
if (
|
||||
|
|
|
|||
|
|
@ -69,9 +69,9 @@ class ApplicationAction(LauncherAction):
|
|||
|
||||
_log = None
|
||||
required_session_keys = (
|
||||
"AVALON_PROJECT",
|
||||
"AVALON_ASSET",
|
||||
"AVALON_TASK"
|
||||
"AYON_PROJECT_NAME",
|
||||
"AYON_FOLDER_PATH",
|
||||
"AYON_TASK_NAME"
|
||||
)
|
||||
|
||||
@property
|
||||
|
|
@ -85,7 +85,7 @@ class ApplicationAction(LauncherAction):
|
|||
if not session.get(key):
|
||||
return False
|
||||
|
||||
project_name = session["AVALON_PROJECT"]
|
||||
project_name = session["AYON_PROJECT_NAME"]
|
||||
project_entity = self.project_entities[project_name]
|
||||
apps = project_entity["attrib"].get("applications")
|
||||
if not apps or self.application.full_name not in apps:
|
||||
|
|
@ -119,9 +119,9 @@ class ApplicationAction(LauncherAction):
|
|||
ApplicationLaunchFailed,
|
||||
)
|
||||
|
||||
project_name = session["AVALON_PROJECT"]
|
||||
asset_name = session["AVALON_ASSET"]
|
||||
task_name = session["AVALON_TASK"]
|
||||
project_name = session["AYON_PROJECT_NAME"]
|
||||
asset_name = session["AYON_FOLDER_PATH"]
|
||||
task_name = session["AYON_TASK_NAME"]
|
||||
try:
|
||||
self.application.launch(
|
||||
project_name=project_name,
|
||||
|
|
@ -416,6 +416,10 @@ class ActionsModel:
|
|||
task_name = task["name"]
|
||||
|
||||
return {
|
||||
"AYON_PROJECT_NAME": project_name,
|
||||
"AYON_FOLDER_PATH": folder_path,
|
||||
"AYON_TASK_NAME": task_name,
|
||||
# Deprecated - kept for backwards compatibility
|
||||
"AVALON_PROJECT": project_name,
|
||||
"AVALON_ASSET": folder_path,
|
||||
"AVALON_TASK": task_name,
|
||||
|
|
|
|||
|
|
@ -1807,9 +1807,9 @@ class PublisherController(BasePublisherController):
|
|||
context_title = self._host.get_context_title()
|
||||
|
||||
if context_title is None:
|
||||
context_title = os.environ.get("AVALON_APP_NAME")
|
||||
context_title = os.environ.get("AYON_APP_NAME")
|
||||
if context_title is None:
|
||||
context_title = os.environ.get("AVALON_APP")
|
||||
context_title = os.environ.get("AYON_HOST_NAME")
|
||||
|
||||
return context_title
|
||||
|
||||
|
|
|
|||
|
|
@ -132,8 +132,8 @@ class TextureCopy:
|
|||
def texture_copy(asset, project, path):
|
||||
t.echo("*** Running Texture tool ***")
|
||||
t.echo(">>> Initializing avalon session ...")
|
||||
os.environ["AVALON_PROJECT"] = project
|
||||
os.environ["AVALON_ASSET"] = asset
|
||||
os.environ["AYON_PROJECT_NAME"] = project
|
||||
os.environ["AYON_FOLDER_PATH"] = asset
|
||||
TextureCopy().process(asset, project, path)
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ class WorkfileBuildPlaceholderDialog(QtWidgets.QDialog):
|
|||
|
||||
host_name = getattr(self._host, "name", None)
|
||||
if not host_name:
|
||||
host_name = os.getenv("AVALON_APP") or "NA"
|
||||
host_name = os.getenv("AYON_HOST_NAME") or "NA"
|
||||
self._host_name = host_name
|
||||
|
||||
plugins_combo = QtWidgets.QComboBox(self)
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
"""Package declaring AYON core addon version."""
|
||||
__version__ = "0.2.1-dev.1"
|
||||
__version__ = "0.3.0-dev.1"
|
||||
|
|
|
|||
|
|
@ -1,8 +1,11 @@
|
|||
name = "core"
|
||||
title = "Core"
|
||||
version = "0.2.1-dev.1"
|
||||
version = "0.3.0-dev.1"
|
||||
|
||||
client_dir = "ayon_core"
|
||||
|
||||
plugin_for = ["ayon_server"]
|
||||
ayon_version = ">=1.0.3,<2.0.0"
|
||||
requires = [
|
||||
"~ayon_server-1.0.3+<2.0.0",
|
||||
]
|
||||
|
||||
|
|
|
|||
|
|
@ -387,14 +387,22 @@ class ExtractReviewOutputDefModel(BaseSettingsModel):
|
|||
"Crop input overscan. See the documentation for more information."
|
||||
)
|
||||
)
|
||||
overscan_color: ColorRGB_uint8 = SettingsField(
|
||||
(0, 0, 0),
|
||||
overscan_color: ColorRGBA_uint8 = SettingsField(
|
||||
(0, 0, 0, 0.0),
|
||||
title="Overscan color",
|
||||
description=(
|
||||
"Overscan color is used when input aspect ratio is not"
|
||||
" same as output aspect ratio."
|
||||
)
|
||||
)
|
||||
# overscan_color: ColorRGB_uint8 = SettingsField(
|
||||
# (0, 0, 0),
|
||||
# title="Overscan color",
|
||||
# description=(
|
||||
# "Overscan color is used when input aspect ratio is not"
|
||||
# " same as output aspect ratio."
|
||||
# )
|
||||
# )
|
||||
width: int = SettingsField(
|
||||
0,
|
||||
ge=0,
|
||||
|
|
@ -901,7 +909,8 @@ DEFAULT_PUBLISH_VALUES = {
|
|||
"single_frame_filter": "single_frame"
|
||||
},
|
||||
"overscan_crop": "",
|
||||
"overscan_color": [0, 0, 0],
|
||||
# "overscan_color": [0, 0, 0],
|
||||
"overscan_color": [0, 0, 0, 0.0],
|
||||
"width": 1920,
|
||||
"height": 1080,
|
||||
"scale_pixel_aspect": True,
|
||||
|
|
@ -946,7 +955,8 @@ DEFAULT_PUBLISH_VALUES = {
|
|||
"single_frame_filter": "multi_frame"
|
||||
},
|
||||
"overscan_crop": "",
|
||||
"overscan_color": [0, 0, 0],
|
||||
# "overscan_color": [0, 0, 0],
|
||||
"overscan_color": [0, 0, 0, 0.0],
|
||||
"width": 0,
|
||||
"height": 0,
|
||||
"scale_pixel_aspect": True,
|
||||
|
|
|
|||
|
|
@ -92,8 +92,9 @@ class ApplicationsAddon(BaseServerAddon):
|
|||
settings_model = ApplicationsAddonSettings
|
||||
|
||||
async def get_default_settings(self):
|
||||
applications_path = os.path.join(self.addon_dir, "applications.json")
|
||||
tools_path = os.path.join(self.addon_dir, "tools.json")
|
||||
server_dir = os.path.join(self.addon_dir, "server")
|
||||
applications_path = os.path.join(server_dir, "applications.json")
|
||||
tools_path = os.path.join(server_dir, "tools.json")
|
||||
default_values = copy.deepcopy(DEFAULT_VALUES)
|
||||
with open(applications_path, "r") as stream:
|
||||
default_values.update(json.load(stream))
|
||||
|
|
|
|||
|
|
@ -40,6 +40,11 @@ IGNORED_HOSTS = [
|
|||
|
||||
IGNORED_MODULES = []
|
||||
|
||||
PACKAGE_PY_TEMPLATE = """name = "{addon_name}"
|
||||
version = "{addon_version}"
|
||||
plugin_for = ["ayon_server"]
|
||||
"""
|
||||
|
||||
|
||||
class ZipFileLongPaths(zipfile.ZipFile):
|
||||
"""Allows longer paths in zip files.
|
||||
|
|
@ -144,18 +149,12 @@ def create_addon_zip(
|
|||
output_dir: Path,
|
||||
addon_name: str,
|
||||
addon_version: str,
|
||||
keep_source: bool
|
||||
keep_source: bool,
|
||||
):
|
||||
zip_filepath = output_dir / f"{addon_name}-{addon_version}.zip"
|
||||
|
||||
addon_output_dir = output_dir / addon_name / addon_version
|
||||
with ZipFileLongPaths(zip_filepath, "w", zipfile.ZIP_DEFLATED) as zipf:
|
||||
zipf.writestr(
|
||||
"manifest.json",
|
||||
json.dumps({
|
||||
"addon_name": addon_name,
|
||||
"addon_version": addon_version
|
||||
})
|
||||
)
|
||||
# Add client code content to zip
|
||||
src_root = os.path.normpath(str(addon_output_dir.absolute()))
|
||||
src_root_offset = len(src_root) + 1
|
||||
|
|
@ -167,9 +166,10 @@ def create_addon_zip(
|
|||
for filename in filenames:
|
||||
src_path = os.path.join(root, filename)
|
||||
if rel_root:
|
||||
dst_path = os.path.join("addon", rel_root, filename)
|
||||
dst_path = os.path.join(rel_root, filename)
|
||||
else:
|
||||
dst_path = os.path.join("addon", filename)
|
||||
dst_path = filename
|
||||
|
||||
zipf.write(src_path, dst_path)
|
||||
|
||||
if not keep_source:
|
||||
|
|
@ -180,9 +180,8 @@ def create_addon_package(
|
|||
addon_dir: Path,
|
||||
output_dir: Path,
|
||||
create_zip: bool,
|
||||
keep_source: bool
|
||||
keep_source: bool,
|
||||
):
|
||||
server_dir = addon_dir / "server"
|
||||
addon_version = get_addon_version(addon_dir)
|
||||
|
||||
addon_output_dir = output_dir / addon_dir.name / addon_version
|
||||
|
|
@ -191,18 +190,21 @@ def create_addon_package(
|
|||
addon_output_dir.mkdir(parents=True)
|
||||
|
||||
# Copy server content
|
||||
src_root = os.path.normpath(str(server_dir.absolute()))
|
||||
src_root_offset = len(src_root) + 1
|
||||
for root, _, filenames in os.walk(str(server_dir)):
|
||||
dst_root = addon_output_dir
|
||||
if root != src_root:
|
||||
rel_root = root[src_root_offset:]
|
||||
dst_root = dst_root / rel_root
|
||||
package_py = addon_output_dir / "package.py"
|
||||
addon_name = addon_dir.name
|
||||
if addon_name == "royal_render":
|
||||
addon_name = "royalrender"
|
||||
package_py_content = PACKAGE_PY_TEMPLATE.format(
|
||||
addon_name=addon_name, addon_version=addon_version
|
||||
)
|
||||
|
||||
dst_root.mkdir(parents=True, exist_ok=True)
|
||||
for filename in filenames:
|
||||
src_path = os.path.join(root, filename)
|
||||
shutil.copy(src_path, str(dst_root))
|
||||
with open(package_py, "w+") as pkg_py:
|
||||
pkg_py.write(package_py_content)
|
||||
|
||||
server_dir = addon_dir / "server"
|
||||
shutil.copytree(
|
||||
server_dir, addon_output_dir / "server", dirs_exist_ok=True
|
||||
)
|
||||
|
||||
if create_zip:
|
||||
create_addon_zip(
|
||||
|
|
|
|||
|
|
@ -1,72 +1,88 @@
|
|||
from ayon_server.settings import BaseSettingsModel, SettingsField
|
||||
from ayon_server.types import ColorRGB_float
|
||||
from ayon_server.types import ColorRGB_float, ColorRGBA_uint8
|
||||
|
||||
|
||||
class ColorsSetting(BaseSettingsModel):
|
||||
model: ColorRGB_float = SettingsField(
|
||||
(0.82, 0.52, 0.12),
|
||||
title="Model:"
|
||||
)
|
||||
rig: ColorRGB_float = SettingsField(
|
||||
(0.23, 0.89, 0.92),
|
||||
title="Rig:"
|
||||
)
|
||||
pointcache: ColorRGB_float = SettingsField(
|
||||
(0.37, 0.82, 0.12),
|
||||
title="Pointcache:"
|
||||
)
|
||||
animation: ColorRGB_float = SettingsField(
|
||||
(0.37, 0.82, 0.12),
|
||||
title="Animation:"
|
||||
)
|
||||
ass: ColorRGB_float = SettingsField(
|
||||
(0.98, 0.53, 0.21),
|
||||
title="Arnold StandIn:"
|
||||
)
|
||||
camera: ColorRGB_float = SettingsField(
|
||||
(0.53, 0.45, 0.96),
|
||||
title="Camera:"
|
||||
)
|
||||
fbx: ColorRGB_float = SettingsField(
|
||||
(0.84, 0.65, 1.0),
|
||||
title="FBX:"
|
||||
)
|
||||
mayaAscii: ColorRGB_float = SettingsField(
|
||||
(0.26, 0.68, 1.0),
|
||||
title="Maya Ascii:"
|
||||
)
|
||||
mayaScene: ColorRGB_float = SettingsField(
|
||||
(0.26, 0.68, 1.0),
|
||||
title="Maya Scene:"
|
||||
)
|
||||
setdress: ColorRGB_float = SettingsField(
|
||||
(1.0, 0.98, 0.35),
|
||||
title="Set Dress:"
|
||||
)
|
||||
layout: ColorRGB_float = SettingsField(
|
||||
(1.0, 0.98, 0.35),
|
||||
title="Layout:"
|
||||
)
|
||||
vdbcache: ColorRGB_float = SettingsField(
|
||||
(0.98, 0.21, 0.0),
|
||||
title="VDB Cache:"
|
||||
)
|
||||
vrayproxy: ColorRGB_float = SettingsField(
|
||||
(1.0, 0.59, 0.05),
|
||||
title="VRay Proxy:"
|
||||
)
|
||||
vrayscene_layer: ColorRGB_float = SettingsField(
|
||||
(1.0, 0.59, 0.05),
|
||||
title="VRay Scene:"
|
||||
)
|
||||
yeticache: ColorRGB_float = SettingsField(
|
||||
(0.39, 0.81, 0.86),
|
||||
title="Yeti Cache:"
|
||||
)
|
||||
yetiRig: ColorRGB_float = SettingsField(
|
||||
(0.0, 0.80, 0.49),
|
||||
title="Yeti Rig:"
|
||||
)
|
||||
model: ColorRGBA_uint8 = SettingsField(
|
||||
(209, 132, 30, 1.0), title="Model:")
|
||||
rig: ColorRGBA_uint8 = SettingsField(
|
||||
(59, 226, 235, 1.0), title="Rig:")
|
||||
pointcache: ColorRGBA_uint8 = SettingsField(
|
||||
(94, 209, 30, 1.0), title="Pointcache:")
|
||||
animation: ColorRGBA_uint8 = SettingsField(
|
||||
(94, 209, 30, 1.0), title="Animation:")
|
||||
ass: ColorRGBA_uint8 = SettingsField(
|
||||
(249, 135, 53, 1.0), title="Arnold StandIn:")
|
||||
camera: ColorRGBA_uint8 = SettingsField(
|
||||
(136, 114, 244, 1.0), title="Camera:")
|
||||
fbx: ColorRGBA_uint8 = SettingsField(
|
||||
(215, 166, 255, 1.0), title="FBX:")
|
||||
mayaAscii: ColorRGBA_uint8 = SettingsField(
|
||||
(67, 174, 255, 1.0), title="Maya Ascii:")
|
||||
mayaScene: ColorRGBA_uint8 = SettingsField(
|
||||
(67, 174, 255, 1.0), title="Maya Scene:")
|
||||
setdress: ColorRGBA_uint8 = SettingsField(
|
||||
(255, 250, 90, 1.0), title="Set Dress:")
|
||||
layout: ColorRGBA_uint8 = SettingsField((
|
||||
255, 250, 90, 1.0), title="Layout:")
|
||||
vdbcache: ColorRGBA_uint8 = SettingsField(
|
||||
(249, 54, 0, 1.0), title="VDB Cache:")
|
||||
vrayproxy: ColorRGBA_uint8 = SettingsField(
|
||||
(255, 150, 12, 1.0), title="VRay Proxy:")
|
||||
vrayscene_layer: ColorRGBA_uint8 = SettingsField(
|
||||
(255, 150, 12, 1.0), title="VRay Scene:")
|
||||
yeticache: ColorRGBA_uint8 = SettingsField(
|
||||
(99, 206, 220, 1.0), title="Yeti Cache:")
|
||||
yetiRig: ColorRGBA_uint8 = SettingsField(
|
||||
(0, 205, 125, 1.0), title="Yeti Rig:")
|
||||
# model: ColorRGB_float = SettingsField(
|
||||
# (0.82, 0.52, 0.12), title="Model:"
|
||||
# )
|
||||
# rig: ColorRGB_float = SettingsField(
|
||||
# (0.23, 0.89, 0.92), title="Rig:"
|
||||
# )
|
||||
# pointcache: ColorRGB_float = SettingsField(
|
||||
# (0.37, 0.82, 0.12), title="Pointcache:"
|
||||
# )
|
||||
# animation: ColorRGB_float = SettingsField(
|
||||
# (0.37, 0.82, 0.12), title="Animation:"
|
||||
# )
|
||||
# ass: ColorRGB_float = SettingsField(
|
||||
# (0.98, 0.53, 0.21), title="Arnold StandIn:"
|
||||
# )
|
||||
# camera: ColorRGB_float = SettingsField(
|
||||
# (0.53, 0.45, 0.96), title="Camera:"
|
||||
# )
|
||||
# fbx: ColorRGB_float = SettingsField(
|
||||
# (0.84, 0.65, 1.0), title="FBX:"
|
||||
# )
|
||||
# mayaAscii: ColorRGB_float = SettingsField(
|
||||
# (0.26, 0.68, 1.0), title="Maya Ascii:"
|
||||
# )
|
||||
# mayaScene: ColorRGB_float = SettingsField(
|
||||
# (0.26, 0.68, 1.0), title="Maya Scene:"
|
||||
# )
|
||||
# setdress: ColorRGB_float = SettingsField(
|
||||
# (1.0, 0.98, 0.35), title="Set Dress:"
|
||||
# )
|
||||
# layout: ColorRGB_float = SettingsField(
|
||||
# (1.0, 0.98, 0.35), title="Layout:"
|
||||
# )
|
||||
# vdbcache: ColorRGB_float = SettingsField(
|
||||
# (0.98, 0.21, 0.0), title="VDB Cache:"
|
||||
# )
|
||||
# vrayproxy: ColorRGB_float = SettingsField(
|
||||
# (1.0, 0.59, 0.05), title="VRay Proxy:"
|
||||
# )
|
||||
# vrayscene_layer: ColorRGB_float = SettingsField(
|
||||
# (1.0, 0.59, 0.05), title="VRay Scene:"
|
||||
# )
|
||||
# yeticache: ColorRGB_float = SettingsField(
|
||||
# (0.39, 0.81, 0.86), title="Yeti Cache:"
|
||||
# )
|
||||
# yetiRig: ColorRGB_float = SettingsField(
|
||||
# (0.0, 0.80, 0.49), title="Yeti Rig:"
|
||||
# )
|
||||
|
||||
|
||||
class ReferenceLoaderModel(BaseSettingsModel):
|
||||
|
|
@ -99,22 +115,38 @@ class LoadersModel(BaseSettingsModel):
|
|||
|
||||
DEFAULT_LOADERS_SETTING = {
|
||||
"colors": {
|
||||
"model": [0.82, 0.52, 0.12],
|
||||
"rig": [0.23, 0.89, 0.92],
|
||||
"pointcache": [0.37, 0.82, 0.12],
|
||||
"animation": [0.37, 0.82, 0.12],
|
||||
"ass": [0.98, 0.53, 0.21],
|
||||
"camera":[0.53, 0.45, 0.96],
|
||||
"fbx": [0.84, 0.65, 1.0],
|
||||
"mayaAscii": [0.26, 0.68, 1.0],
|
||||
"mayaScene": [0.26, 0.68, 1.0],
|
||||
"setdress": [1.0, 0.98, 0.35],
|
||||
"layout": [1.0, 0.98, 0.35],
|
||||
"vdbcache": [0.98, 0.21, 0.0],
|
||||
"vrayproxy": [1.0, 0.59, 0.05],
|
||||
"vrayscene_layer": [1.0, 0.59, 0.05],
|
||||
"yeticache": [0.39, 0.81, 0.86],
|
||||
"yetiRig": [0.0, 0.80, 0.49],
|
||||
"model": [209, 132, 30, 1.0],
|
||||
"rig": [59, 226, 235, 1.0],
|
||||
"pointcache": [94, 209, 30, 1.0],
|
||||
"animation": [94, 209, 30, 1.0],
|
||||
"ass": [249, 135, 53, 1.0],
|
||||
"camera": [136, 114, 244, 1.0],
|
||||
"fbx": [215, 166, 255, 1.0],
|
||||
"mayaAscii": [67, 174, 255, 1.0],
|
||||
"mayaScene": [67, 174, 255, 1.0],
|
||||
"setdress": [255, 250, 90, 1.0],
|
||||
"layout": [255, 250, 90, 1.0],
|
||||
"vdbcache": [249, 54, 0, 1.0],
|
||||
"vrayproxy": [255, 150, 12, 1.0],
|
||||
"vrayscene_layer": [255, 150, 12, 1.0],
|
||||
"yeticache": [99, 206, 220, 1.0],
|
||||
"yetiRig": [0, 205, 125, 1.0]
|
||||
# "model": [0.82, 0.52, 0.12],
|
||||
# "rig": [0.23, 0.89, 0.92],
|
||||
# "pointcache": [0.37, 0.82, 0.12],
|
||||
# "animation": [0.37, 0.82, 0.12],
|
||||
# "ass": [0.98, 0.53, 0.21],
|
||||
# "camera":[0.53, 0.45, 0.96],
|
||||
# "fbx": [0.84, 0.65, 1.0],
|
||||
# "mayaAscii": [0.26, 0.68, 1.0],
|
||||
# "mayaScene": [0.26, 0.68, 1.0],
|
||||
# "setdress": [1.0, 0.98, 0.35],
|
||||
# "layout": [1.0, 0.98, 0.35],
|
||||
# "vdbcache": [0.98, 0.21, 0.0],
|
||||
# "vrayproxy": [1.0, 0.59, 0.05],
|
||||
# "vrayscene_layer": [1.0, 0.59, 0.05],
|
||||
# "yeticache": [0.39, 0.81, 0.86],
|
||||
# "yetiRig": [0.0, 0.80, 0.49],
|
||||
},
|
||||
"reference_loader": {
|
||||
"namespace": "{folder[name]}_{product[name]}_##_",
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ from ayon_server.settings import (
|
|||
ensure_unique_names,
|
||||
task_types_enum,
|
||||
)
|
||||
from ayon_server.types import ColorRGB_float
|
||||
from ayon_server.types import ColorRGBA_uint8, ColorRGB_float
|
||||
|
||||
|
||||
def hardware_falloff_enum():
|
||||
|
|
@ -54,18 +54,27 @@ class DisplayOptionsSetting(BaseSettingsModel):
|
|||
override_display: bool = SettingsField(
|
||||
True, title="Override display options"
|
||||
)
|
||||
background: ColorRGB_float = SettingsField(
|
||||
(0.5, 0.5, 0.5), title="Background Color"
|
||||
background: ColorRGBA_uint8 = SettingsField(
|
||||
(125, 125, 125, 1.0), title="Background Color"
|
||||
)
|
||||
# background: ColorRGB_float = SettingsField(
|
||||
# (0.5, 0.5, 0.5), title="Background Color"
|
||||
# )
|
||||
displayGradient: bool = SettingsField(
|
||||
True, title="Display background gradient"
|
||||
)
|
||||
backgroundTop: ColorRGB_float = SettingsField(
|
||||
(0.5, 0.5, 0.5), title="Background Top"
|
||||
backgroundTop: ColorRGBA_uint8 = SettingsField(
|
||||
(125, 125, 125, 1.0), title="Background Top"
|
||||
)
|
||||
backgroundBottom: ColorRGB_float = SettingsField(
|
||||
(0.5, 0.5, 0.5), title="Background Bottom"
|
||||
backgroundBottom: ColorRGBA_uint8 = SettingsField(
|
||||
(125, 125, 125, 1.0), title="Background Bottom"
|
||||
)
|
||||
# backgroundTop: ColorRGB_float = SettingsField(
|
||||
# (0.5, 0.5, 0.5), title="Background Top"
|
||||
# )
|
||||
# backgroundBottom: ColorRGB_float = SettingsField(
|
||||
# (0.5, 0.5, 0.5), title="Background Bottom"
|
||||
# )
|
||||
|
||||
|
||||
class GenericSetting(BaseSettingsModel):
|
||||
|
|
@ -282,21 +291,12 @@ DEFAULT_PLAYBLAST_SETTING = {
|
|||
},
|
||||
"DisplayOptions": {
|
||||
"override_display": True,
|
||||
"background": [
|
||||
0.5,
|
||||
0.5,
|
||||
0.5
|
||||
],
|
||||
"backgroundBottom": [
|
||||
0.5,
|
||||
0.5,
|
||||
0.5
|
||||
],
|
||||
"backgroundTop": [
|
||||
0.5,
|
||||
0.5,
|
||||
0.5
|
||||
],
|
||||
"background": [125, 125, 125, 1.0],
|
||||
"backgroundBottom": [125, 125, 125, 1.0],
|
||||
"backgroundTop": [125, 125, 125, 1.0],
|
||||
# "background": [0.5, 0.5, 0.5],
|
||||
# "backgroundBottom": [0.5, 0.5, 0.5],
|
||||
# "backgroundTop": [0.5, 0.5, 0.5],
|
||||
"displayGradient": True
|
||||
},
|
||||
"Generic": {
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue