ayon-core/server_addon/resolve/server/settings.py
2024-04-03 13:09:08 +02:00

208 lines
5.3 KiB
Python

from pydantic import validator
from ayon_server.settings import (
BaseSettingsModel,
SettingsField,
ensure_unique_names,
)
from .imageio import ResolveImageIOModel
class CreateShotClipModels(BaseSettingsModel):
hierarchy: str = SettingsField(
"{folder}/{sequence}",
title="Shot parent hierarchy",
section="Shot Hierarchy And Rename Settings"
)
clipRename: bool = SettingsField(
True,
title="Rename clips"
)
clipName: str = SettingsField(
"{track}{sequence}{shot}",
title="Clip name template"
)
countFrom: int = SettingsField(
10,
title="Count sequence from"
)
countSteps: int = SettingsField(
10,
title="Stepping number"
)
folder: str = SettingsField(
"shots",
title="{folder}",
section="Shot Template Keywords"
)
episode: str = SettingsField(
"ep01",
title="{episode}"
)
sequence: str = SettingsField(
"sq01",
title="{sequence}"
)
track: str = SettingsField(
"{_track_}",
title="{track}"
)
shot: str = SettingsField(
"sh###",
title="{shot}"
)
vSyncOn: bool = SettingsField(
False,
title="Enable Vertical Sync",
section="Vertical Synchronization Of Attributes"
)
workfileFrameStart: int = SettingsField(
1001,
title="Workfile Start Frame",
section="Shot Attributes"
)
handleStart: int = SettingsField(
10,
title="Handle start (head)"
)
handleEnd: int = SettingsField(
10,
title="Handle end (tail)"
)
class CreatorPluginsModel(BaseSettingsModel):
CreateShotClip: CreateShotClipModels = SettingsField(
default_factory=CreateShotClipModels,
title="Create Shot Clip"
)
class MetadataMappingModel(BaseSettingsModel):
"""Metadata mapping
Representation document context data are used for formatting of
anatomy tokens. Following are supported:
- version
- task
- asset
"""
name: str = SettingsField(
"",
title="Metadata property name"
)
value: str = SettingsField(
"",
title="Metadata value template"
)
class LoadMediaModel(BaseSettingsModel):
clip_color_last: str = SettingsField(
"Olive",
title="Clip color for last version"
)
clip_color_old: str = SettingsField(
"Orange",
title="Clip color for old version"
)
media_pool_bin_path: str = SettingsField(
"Loader/{folder[path]}",
title="Media Pool bin path template"
)
metadata: list[MetadataMappingModel] = SettingsField(
default_factory=list,
title="Metadata mapping",
description=(
"Set these media pool item metadata values on load and update. The"
" keys must match the exact Resolve metadata names like"
" 'Clip Name' or 'Shot'"
)
)
@validator("metadata")
def validate_unique_outputs(cls, value):
ensure_unique_names(value)
return value
class LoaderPluginsModel(BaseSettingsModel):
LoadMedia: LoadMediaModel = SettingsField(
default_factory=LoadMediaModel,
title="Load Media"
)
class ResolveSettings(BaseSettingsModel):
launch_openpype_menu_on_start: bool = SettingsField(
False, title="Launch OpenPype menu on start of Resolve"
)
imageio: ResolveImageIOModel = SettingsField(
default_factory=ResolveImageIOModel,
title="Color Management (ImageIO)"
)
create: CreatorPluginsModel = SettingsField(
default_factory=CreatorPluginsModel,
title="Creator plugins",
)
load: LoaderPluginsModel = SettingsField(
default_factory=LoaderPluginsModel,
title="Loader plugins",
)
DEFAULT_VALUES = {
"launch_openpype_menu_on_start": False,
"create": {
"CreateShotClip": {
"hierarchy": "{folder}/{sequence}",
"clipRename": True,
"clipName": "{track}{sequence}{shot}",
"countFrom": 10,
"countSteps": 10,
"folder": "shots",
"episode": "ep01",
"sequence": "sq01",
"track": "{_track_}",
"shot": "sh###",
"vSyncOn": False,
"workfileFrameStart": 1001,
"handleStart": 10,
"handleEnd": 10
}
},
"load": {
"LoadMedia": {
"clip_color_last": "Olive",
"clip_color_old": "Orange",
"media_pool_bin_path": (
"Loader/{folder[path]}"
),
"metadata": [
{
"name": "Comments",
"value": "{version[attrib][comment]}"
},
{
"name": "Shot",
"value": "{folder[path]}"
},
{
"name": "Take",
"value": "{product[name]} {version[name]}"
},
{
"name": "Clip Name",
"value": (
"{folder[path]} {product[name]} "
"{version[name]} ({representation[name]})"
)
}
]
}
}
}