mirror of
https://github.com/ynput/ayon-core.git
synced 2026-01-01 08:24:53 +01:00
Merge branch 'feature/1605-settings-task-types-enum-entity' into feature/895-add-option-to-define-paht-to-workfile-template
This commit is contained in:
commit
8019196a5f
29 changed files with 717 additions and 287 deletions
|
|
@ -55,6 +55,7 @@
|
|||
"ftrack"
|
||||
]
|
||||
},
|
||||
"overscan_crop": "",
|
||||
"width": 0,
|
||||
"height": 0,
|
||||
"bg_color": [
|
||||
|
|
|
|||
|
|
@ -103,6 +103,7 @@ from .enum_entity import (
|
|||
EnumEntity,
|
||||
AppsEnumEntity,
|
||||
ToolsEnumEntity,
|
||||
TaskTypeEnumEntity,
|
||||
ProvidersEnum
|
||||
)
|
||||
|
||||
|
|
@ -154,6 +155,7 @@ __all__ = (
|
|||
"EnumEntity",
|
||||
"AppsEnumEntity",
|
||||
"ToolsEnumEntity",
|
||||
"TaskTypeEnumEntity",
|
||||
"ProvidersEnum",
|
||||
|
||||
"ListEntity",
|
||||
|
|
|
|||
|
|
@ -111,6 +111,8 @@ class BaseItemEntity(BaseEntity):
|
|||
self.file_item = None
|
||||
# Reference to `RootEntity`
|
||||
self.root_item = None
|
||||
# Change of value requires restart of OpenPype
|
||||
self._require_restart_on_change = False
|
||||
|
||||
# Entity is in hierarchy of dynamically created entity
|
||||
self.is_in_dynamic_item = False
|
||||
|
|
@ -171,6 +173,14 @@ class BaseItemEntity(BaseEntity):
|
|||
roles = [roles]
|
||||
self.roles = roles
|
||||
|
||||
@property
|
||||
def require_restart_on_change(self):
|
||||
return self._require_restart_on_change
|
||||
|
||||
@property
|
||||
def require_restart(self):
|
||||
return False
|
||||
|
||||
@property
|
||||
def has_studio_override(self):
|
||||
"""Says if entity or it's children has studio overrides."""
|
||||
|
|
@ -261,6 +271,14 @@ class BaseItemEntity(BaseEntity):
|
|||
self, "Dynamic entity has set `is_group` to true."
|
||||
)
|
||||
|
||||
if (
|
||||
self.require_restart_on_change
|
||||
and (self.is_dynamic_item or self.is_in_dynamic_item)
|
||||
):
|
||||
raise EntitySchemaError(
|
||||
self, "Dynamic entity can't require restart."
|
||||
)
|
||||
|
||||
@abstractmethod
|
||||
def set_override_state(self, state):
|
||||
"""Set override state and trigger it on children.
|
||||
|
|
@ -788,6 +806,15 @@ class ItemEntity(BaseItemEntity):
|
|||
# Root item reference
|
||||
self.root_item = self.parent.root_item
|
||||
|
||||
# Item require restart on value change
|
||||
require_restart_on_change = self.schema_data.get("require_restart")
|
||||
if (
|
||||
require_restart_on_change is None
|
||||
and not (self.is_dynamic_item or self.is_in_dynamic_item)
|
||||
):
|
||||
require_restart_on_change = self.parent.require_restart_on_change
|
||||
self._require_restart_on_change = require_restart_on_change
|
||||
|
||||
# File item reference
|
||||
if self.parent.is_file:
|
||||
self.file_item = self.parent
|
||||
|
|
|
|||
|
|
@ -439,10 +439,10 @@ class DictMutableKeysEntity(EndpointEntity):
|
|||
new_initial_value = []
|
||||
for key, value in _settings_value:
|
||||
if key in initial_value:
|
||||
new_initial_value.append(key, initial_value.pop(key))
|
||||
new_initial_value.append([key, initial_value.pop(key)])
|
||||
|
||||
for key, value in initial_value.items():
|
||||
new_initial_value.append(key, value)
|
||||
new_initial_value.append([key, value])
|
||||
initial_value = new_initial_value
|
||||
else:
|
||||
initial_value = _settings_value
|
||||
|
|
|
|||
|
|
@ -219,6 +219,40 @@ class ToolsEnumEntity(BaseEnumEntity):
|
|||
self._current_value = new_value
|
||||
|
||||
|
||||
class TaskTypeEnumEntity(BaseEnumEntity):
|
||||
schema_types = ["task-types-enum"]
|
||||
|
||||
def _item_initalization(self):
|
||||
self.multiselection = True
|
||||
self.value_on_not_set = []
|
||||
self.enum_items = []
|
||||
self.valid_keys = set()
|
||||
self.valid_value_types = (list, )
|
||||
self.placeholder = None
|
||||
|
||||
def _get_enum_values(self):
|
||||
from ..lib import get_default_anatomy_settings
|
||||
anatomy_settings = get_default_anatomy_settings()
|
||||
|
||||
valid_keys = set()
|
||||
enum_items = []
|
||||
for task_type, _task_attr in anatomy_settings["tasks"].items():
|
||||
enum_items.append({task_type: task_type})
|
||||
valid_keys.add(task_type)
|
||||
|
||||
return enum_items, valid_keys
|
||||
|
||||
def set_override_state(self, *args, **kwargs):
|
||||
super(TaskTypeEnumEntity, self).set_override_state(*args, **kwargs)
|
||||
|
||||
self.enum_items, self.valid_keys = self._get_enum_values()
|
||||
new_value = []
|
||||
for key in self._current_value:
|
||||
if key in self.valid_keys:
|
||||
new_value.append(key)
|
||||
self._current_value = new_value
|
||||
|
||||
|
||||
class ProvidersEnum(BaseEnumEntity):
|
||||
schema_types = ["providers-enum"]
|
||||
|
||||
|
|
|
|||
|
|
@ -68,8 +68,18 @@ class EndpointEntity(ItemEntity):
|
|||
def on_change(self):
|
||||
for callback in self.on_change_callbacks:
|
||||
callback()
|
||||
|
||||
if self.require_restart_on_change:
|
||||
if self.require_restart:
|
||||
self.root_item.add_item_require_restart(self)
|
||||
else:
|
||||
self.root_item.remove_item_require_restart(self)
|
||||
self.parent.on_child_change(self)
|
||||
|
||||
@property
|
||||
def require_restart(self):
|
||||
return self.has_unsaved_changes
|
||||
|
||||
def update_default_value(self, value):
|
||||
value = self._check_update_value(value, "default")
|
||||
self._default_value = value
|
||||
|
|
@ -115,6 +125,10 @@ class InputEntity(EndpointEntity):
|
|||
"""Entity's value without metadata."""
|
||||
return self._current_value
|
||||
|
||||
@property
|
||||
def require_restart(self):
|
||||
return self._value_is_modified
|
||||
|
||||
def _settings_value(self):
|
||||
return copy.deepcopy(self.value)
|
||||
|
||||
|
|
|
|||
|
|
@ -55,6 +55,8 @@ class RootEntity(BaseItemEntity):
|
|||
|
||||
def __init__(self, schema_data, reset):
|
||||
super(RootEntity, self).__init__(schema_data)
|
||||
self._require_restart_callbacks = []
|
||||
self._item_ids_require_restart = set()
|
||||
self._item_initalization()
|
||||
if reset:
|
||||
self.reset()
|
||||
|
|
@ -64,6 +66,31 @@ class RootEntity(BaseItemEntity):
|
|||
"""Current OverrideState."""
|
||||
return self._override_state
|
||||
|
||||
@property
|
||||
def require_restart(self):
|
||||
return bool(self._item_ids_require_restart)
|
||||
|
||||
def add_require_restart_change_callback(self, callback):
|
||||
self._require_restart_callbacks.append(callback)
|
||||
|
||||
def _on_require_restart_change(self):
|
||||
for callback in self._require_restart_callbacks:
|
||||
callback()
|
||||
|
||||
def add_item_require_restart(self, item):
|
||||
was_empty = len(self._item_ids_require_restart) == 0
|
||||
self._item_ids_require_restart.add(item.id)
|
||||
if was_empty:
|
||||
self._on_require_restart_change()
|
||||
|
||||
def remove_item_require_restart(self, item):
|
||||
if item.id not in self._item_ids_require_restart:
|
||||
return
|
||||
|
||||
self._item_ids_require_restart.remove(item.id)
|
||||
if not self._item_ids_require_restart:
|
||||
self._on_require_restart_change()
|
||||
|
||||
@abstractmethod
|
||||
def reset(self):
|
||||
"""Reset values and entities to initial state.
|
||||
|
|
|
|||
|
|
@ -173,6 +173,15 @@
|
|||
{
|
||||
"type": "separator"
|
||||
},
|
||||
{
|
||||
"type": "label",
|
||||
"label": "Crop input overscan. See the documentation for more information."
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"key": "overscan_crop",
|
||||
"label": "Overscan crop"
|
||||
},
|
||||
{
|
||||
"type": "label",
|
||||
"label": "Width and Height must be both set to higher value than 0 else source resolution is used."
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
"key": "ftrack",
|
||||
"label": "Ftrack",
|
||||
"collapsible": true,
|
||||
"require_restart": true,
|
||||
"checkbox_key": "enabled",
|
||||
"children": [
|
||||
{
|
||||
|
|
|
|||
|
|
@ -34,7 +34,8 @@
|
|||
"key": "environment",
|
||||
"label": "Environment",
|
||||
"type": "raw-json",
|
||||
"env_group_key": "global"
|
||||
"env_group_key": "global",
|
||||
"require_restart": true
|
||||
},
|
||||
{
|
||||
"type": "splitter"
|
||||
|
|
@ -44,7 +45,8 @@
|
|||
"key": "openpype_path",
|
||||
"label": "Versions Repository",
|
||||
"multiplatform": true,
|
||||
"multipath": true
|
||||
"multipath": true,
|
||||
"require_restart": true
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@
|
|||
"key": "avalon",
|
||||
"label": "Avalon",
|
||||
"collapsible": true,
|
||||
"require_restart": true,
|
||||
"children": [
|
||||
{
|
||||
"type": "number",
|
||||
|
|
@ -35,6 +36,7 @@
|
|||
"key": "timers_manager",
|
||||
"label": "Timers Manager",
|
||||
"collapsible": true,
|
||||
"require_restart": true,
|
||||
"checkbox_key": "enabled",
|
||||
"children": [
|
||||
{
|
||||
|
|
@ -66,6 +68,7 @@
|
|||
"key": "clockify",
|
||||
"label": "Clockify",
|
||||
"collapsible": true,
|
||||
"require_restart": true,
|
||||
"checkbox_key": "enabled",
|
||||
"children": [
|
||||
{
|
||||
|
|
@ -84,6 +87,7 @@
|
|||
"key": "sync_server",
|
||||
"label": "Site Sync",
|
||||
"collapsible": true,
|
||||
"require_restart": true,
|
||||
"checkbox_key": "enabled",
|
||||
"children": [
|
||||
{
|
||||
|
|
@ -114,6 +118,7 @@
|
|||
"type": "dict",
|
||||
"key": "deadline",
|
||||
"label": "Deadline",
|
||||
"require_restart": true,
|
||||
"collapsible": true,
|
||||
"checkbox_key": "enabled",
|
||||
"children": [
|
||||
|
|
@ -133,6 +138,7 @@
|
|||
"type": "dict",
|
||||
"key": "muster",
|
||||
"label": "Muster",
|
||||
"require_restart": true,
|
||||
"collapsible": true,
|
||||
"checkbox_key": "enabled",
|
||||
"children": [
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue