ayon-core/server_addon/applications/server/settings.py
Petr Kalis a557b8b5e3
Wrap: new integration (#5823)
* Added Wrap to applications

* Added icon

* Added wrap to template pre hooks

Needed to copy template as new workfile.
Needed to open Wrap with workfile.
2023-12-05 13:04:32 +01:00

203 lines
6.7 KiB
Python

import json
from pydantic import Field, validator
from ayon_server.settings import BaseSettingsModel, ensure_unique_names
from ayon_server.exceptions import BadRequestException
def validate_json_dict(value):
if not value.strip():
return "{}"
try:
converted_value = json.loads(value)
success = isinstance(converted_value, dict)
except json.JSONDecodeError as exc:
print(exc)
success = False
if not success:
raise BadRequestException(
"Environment's can't be parsed as json object"
)
return value
class MultiplatformStrList(BaseSettingsModel):
windows: list[str] = Field(default_factory=list, title="Windows")
linux: list[str] = Field(default_factory=list, title="Linux")
darwin: list[str] = Field(default_factory=list, title="MacOS")
class AppVariant(BaseSettingsModel):
name: str = Field("", title="Name")
label: str = Field("", title="Label")
executables: MultiplatformStrList = Field(
default_factory=MultiplatformStrList, title="Executables"
)
arguments: MultiplatformStrList = Field(
default_factory=MultiplatformStrList, title="Arguments"
)
environment: str = Field("{}", title="Environment", widget="textarea")
@validator("environment")
def validate_json(cls, value):
return validate_json_dict(value)
class AppVariantWithPython(AppVariant):
use_python_2: bool = Field(False, title="Use Python 2")
class AppGroup(BaseSettingsModel):
enabled: bool = Field(True)
label: str = Field("", title="Label")
host_name: str = Field("", title="Host name")
icon: str = Field("", title="Icon")
environment: str = Field("{}", title="Environment", widget="textarea")
variants: list[AppVariant] = Field(
default_factory=list,
title="Variants",
description="Different variants of the applications",
section="Variants",
)
@validator("variants")
def validate_unique_name(cls, value):
ensure_unique_names(value)
return value
class AppGroupWithPython(AppGroup):
variants: list[AppVariantWithPython] = Field(
default_factory=list,
title="Variants",
description="Different variants of the applications",
section="Variants",
)
class AdditionalAppGroup(BaseSettingsModel):
enabled: bool = Field(True)
name: str = Field("", title="Name")
label: str = Field("", title="Label")
host_name: str = Field("", title="Host name")
icon: str = Field("", title="Icon")
environment: str = Field("{}", title="Environment", widget="textarea")
variants: list[AppVariantWithPython] = Field(
default_factory=list,
title="Variants",
description="Different variants of the applications",
section="Variants",
)
@validator("variants")
def validate_unique_name(cls, value):
ensure_unique_names(value)
return value
class ToolVariantModel(BaseSettingsModel):
name: str = Field("", title="Name")
label: str = Field("", title="Label")
host_names: list[str] = Field(default_factory=list, title="Hosts")
# TODO use applications enum if possible
app_variants: list[str] = Field(default_factory=list, title="Applications")
environment: str = Field("{}", title="Environments", widget="textarea")
@validator("environment")
def validate_json(cls, value):
return validate_json_dict(value)
class ToolGroupModel(BaseSettingsModel):
name: str = Field("", title="Name")
label: str = Field("", title="Label")
environment: str = Field("{}", title="Environments", widget="textarea")
variants: list[ToolVariantModel] = Field(default_factory=list)
@validator("environment")
def validate_json(cls, value):
return validate_json_dict(value)
@validator("variants")
def validate_unique_name(cls, value):
ensure_unique_names(value)
return value
class ApplicationsSettings(BaseSettingsModel):
"""Applications settings"""
maya: AppGroupWithPython = Field(
default_factory=AppGroupWithPython, title="Autodesk Maya")
adsk_3dsmax: AppGroupWithPython = Field(
default_factory=AppGroupWithPython, title="Autodesk 3ds Max")
flame: AppGroupWithPython = Field(
default_factory=AppGroupWithPython, title="Autodesk Flame")
nuke: AppGroupWithPython = Field(
default_factory=AppGroupWithPython, title="Nuke")
nukeassist: AppGroupWithPython = Field(
default_factory=AppGroupWithPython, title="Nuke Assist")
nukex: AppGroupWithPython = Field(
default_factory=AppGroupWithPython, title="Nuke X")
nukestudio: AppGroupWithPython = Field(
default_factory=AppGroupWithPython, title="Nuke Studio")
hiero: AppGroupWithPython = Field(
default_factory=AppGroupWithPython, title="Hiero")
fusion: AppGroup = Field(
default_factory=AppGroupWithPython, title="Fusion")
resolve: AppGroupWithPython = Field(
default_factory=AppGroupWithPython, title="Resolve")
houdini: AppGroupWithPython = Field(
default_factory=AppGroupWithPython, title="Houdini")
blender: AppGroup = Field(
default_factory=AppGroupWithPython, title="Blender")
harmony: AppGroup = Field(
default_factory=AppGroupWithPython, title="Harmony")
tvpaint: AppGroup = Field(
default_factory=AppGroupWithPython, title="TVPaint")
photoshop: AppGroup = Field(
default_factory=AppGroupWithPython, title="Adobe Photoshop")
aftereffects: AppGroup = Field(
default_factory=AppGroupWithPython, title="Adobe After Effects")
celaction: AppGroup = Field(
default_factory=AppGroupWithPython, title="Celaction 2D")
substancepainter: AppGroup = Field(
default_factory=AppGroupWithPython, title="Substance Painter")
unreal: AppGroup = Field(
default_factory=AppGroupWithPython, title="Unreal Editor")
wrap: AppGroup = Field(
default_factory=AppGroupWithPython, title="Wrap")
additional_apps: list[AdditionalAppGroup] = Field(
default_factory=list, title="Additional Applications")
@validator("additional_apps")
def validate_unique_name(cls, value):
ensure_unique_names(value)
return value
class ApplicationsAddonSettings(BaseSettingsModel):
applications: ApplicationsSettings = Field(
default_factory=ApplicationsSettings,
title="Applications",
scope=["studio"]
)
tool_groups: list[ToolGroupModel] = Field(
default_factory=list,
scope=["studio"]
)
only_available: bool = Field(
True, title="Show only available applications")
@validator("tool_groups")
def validate_unique_name(cls, value):
ensure_unique_names(value)
return value
DEFAULT_VALUES = {
"only_available": False
}