Run Flamenco Unit Tests in the local timezone #104236
29
.gitattributes
vendored
29
.gitattributes
vendored
@ -3,3 +3,32 @@
|
|||||||
/addon/flamenco/manager_README.md linguist-generated=true
|
/addon/flamenco/manager_README.md linguist-generated=true
|
||||||
/web/app/src/manager-api/** linguist-generated=true
|
/web/app/src/manager-api/** linguist-generated=true
|
||||||
**/*.gen.go linguist-generated=true
|
**/*.gen.go linguist-generated=true
|
||||||
|
|
||||||
|
# Set the default newline behavior, in case people don't have core.autocrlf set.
|
||||||
|
* text=auto
|
||||||
|
|
||||||
|
*.cjs text
|
||||||
|
*.css text
|
||||||
|
*.csv text
|
||||||
|
*.go text
|
||||||
|
*.html text
|
||||||
|
*.ini text
|
||||||
|
*.js text
|
||||||
|
*.json text
|
||||||
|
*.map text
|
||||||
|
*.md text
|
||||||
|
*.py text
|
||||||
|
*.sh text
|
||||||
|
*.svg text
|
||||||
|
*.toml text
|
||||||
|
*.txt text
|
||||||
|
*.vue text
|
||||||
|
*.webapp text
|
||||||
|
*.webmanifest text
|
||||||
|
*.xml text
|
||||||
|
*.yaml text
|
||||||
|
/go.mod text
|
||||||
|
/go.sum text
|
||||||
|
/LICENSE text
|
||||||
|
/Makefile text
|
||||||
|
/VERSION text
|
||||||
|
@ -13,6 +13,9 @@ bugs in actually-released versions.
|
|||||||
- Add support for finding the top-level 'project' directory. When submitting files to Flamenco, the add-on will try to retain the directory structure of your Blender project as precisely as possible. This new feature allows the add-on to find the top-level directory of your project by finding a `.blender_project`, `.git`, or `.subversion` directory. This can be configured in the add-on preferences.
|
- Add support for finding the top-level 'project' directory. When submitting files to Flamenco, the add-on will try to retain the directory structure of your Blender project as precisely as possible. This new feature allows the add-on to find the top-level directory of your project by finding a `.blender_project`, `.git`, or `.subversion` directory. This can be configured in the add-on preferences.
|
||||||
- Worker status is remembered when they sign off, so that workers when they come back online do so to the same state ([#99549](https://projects.blender.org/studio/flamenco/issues/99549)).
|
- Worker status is remembered when they sign off, so that workers when they come back online do so to the same state ([#99549](https://projects.blender.org/studio/flamenco/issues/99549)).
|
||||||
- Nicer version display for non-release builds. Instead of `3.3-alpha0-v3.2-76-gdd34d538`, show `3.3-alpha0 (v3.2-76-gdd34d538)`.
|
- Nicer version display for non-release builds. Instead of `3.3-alpha0-v3.2-76-gdd34d538`, show `3.3-alpha0 (v3.2-76-gdd34d538)`.
|
||||||
|
- Job settings: add a description for the `eval` field. This is shown in the tooltip of the 'set to automatic value' button, to make it clear what that button will do.
|
||||||
|
- Job settings: make it possible for a setting to be "linked" to its automatic value. For job settings that have this new feature enabled, they will not be editable by default, and the setting will just use its `eval` expression to determine the value. This can be toggled by the user in Blender's submission interface, to still allow manual edits of the value when needed.
|
||||||
|
|
||||||
|
|
||||||
## 3.2 - released 2023-02-21
|
## 3.2 - released 2023-02-21
|
||||||
|
|
||||||
|
@ -95,8 +95,12 @@ class FLAMENCO_PT_job_submission(bpy.types.Panel):
|
|||||||
return
|
return
|
||||||
|
|
||||||
row = layout.row(align=True)
|
row = layout.row(align=True)
|
||||||
|
|
||||||
if setting.get("editable", True):
|
if setting.get("editable", True):
|
||||||
self.draw_setting_editable(row, propgroup, setting)
|
if job_types.show_eval_on_submit_button(setting):
|
||||||
|
self.draw_setting_autoeval(row, propgroup, setting)
|
||||||
|
else:
|
||||||
|
self.draw_setting_editable(row, propgroup, setting)
|
||||||
else:
|
else:
|
||||||
self.draw_setting_readonly(context, row, propgroup, setting)
|
self.draw_setting_readonly(context, row, propgroup, setting)
|
||||||
|
|
||||||
@ -122,6 +126,7 @@ class FLAMENCO_PT_job_submission(bpy.types.Panel):
|
|||||||
props = layout.operator("flamenco.eval_setting", text="", icon="SCRIPTPLUGINS")
|
props = layout.operator("flamenco.eval_setting", text="", icon="SCRIPTPLUGINS")
|
||||||
props.setting_key = setting.key
|
props.setting_key = setting.key
|
||||||
props.setting_eval = setting_eval
|
props.setting_eval = setting_eval
|
||||||
|
props.eval_description = job_types.eval_description(setting)
|
||||||
|
|
||||||
def draw_setting_readonly(
|
def draw_setting_readonly(
|
||||||
self,
|
self,
|
||||||
@ -132,6 +137,38 @@ class FLAMENCO_PT_job_submission(bpy.types.Panel):
|
|||||||
) -> None:
|
) -> None:
|
||||||
layout.prop(propgroup, setting.key)
|
layout.prop(propgroup, setting.key)
|
||||||
|
|
||||||
|
def draw_setting_autoeval(
|
||||||
|
self,
|
||||||
|
layout: bpy.types.UILayout,
|
||||||
|
propgroup: JobTypePropertyGroup,
|
||||||
|
setting: _AvailableJobSetting,
|
||||||
|
) -> None:
|
||||||
|
autoeval_enabled = job_types.setting_should_autoeval(propgroup, setting)
|
||||||
|
if autoeval_enabled:
|
||||||
|
# Mypy doesn't know the bl_rna attribute exists.
|
||||||
|
label = propgroup.bl_rna.properties[setting.key].name # type: ignore
|
||||||
|
|
||||||
|
split = layout.split(factor=0.4, align=True)
|
||||||
|
split.alignment = "RIGHT"
|
||||||
|
split.label(text=label)
|
||||||
|
|
||||||
|
row = split.row(align=True)
|
||||||
|
row.label(text=getattr(setting.eval_info, "description") or "")
|
||||||
|
row.prop(
|
||||||
|
propgroup,
|
||||||
|
job_types.setting_autoeval_propname(setting),
|
||||||
|
text="",
|
||||||
|
icon="LINKED",
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
self.draw_setting_editable(layout, propgroup, setting)
|
||||||
|
layout.prop(
|
||||||
|
propgroup,
|
||||||
|
job_types.setting_autoeval_propname(setting),
|
||||||
|
text="",
|
||||||
|
icon="UNLINKED",
|
||||||
|
)
|
||||||
|
|
||||||
def draw_flamenco_status(
|
def draw_flamenco_status(
|
||||||
self, context: bpy.types.Context, layout: bpy.types.UILayout
|
self, context: bpy.types.Context, layout: bpy.types.UILayout
|
||||||
) -> None:
|
) -> None:
|
||||||
|
@ -68,6 +68,45 @@ def setting_is_visible(setting: _AvailableJobSetting) -> bool:
|
|||||||
return str(visibility) in {"visible", "submission"}
|
return str(visibility) in {"visible", "submission"}
|
||||||
|
|
||||||
|
|
||||||
|
def setting_should_autoeval(
|
||||||
|
propgroup: job_types_propgroup.JobTypePropertyGroup,
|
||||||
|
setting: _AvailableJobSetting,
|
||||||
|
) -> bool:
|
||||||
|
if not setting_is_visible(setting):
|
||||||
|
# Invisible settings are there purely to be auto-evaluated.
|
||||||
|
return True
|
||||||
|
|
||||||
|
propname = setting_autoeval_propname(setting)
|
||||||
|
return getattr(propgroup, propname, False)
|
||||||
|
|
||||||
|
|
||||||
|
def show_eval_on_submit_button(setting: _AvailableJobSetting) -> bool:
|
||||||
|
"""Return whether this setting should show the 'eval on submit' toggle button."""
|
||||||
|
|
||||||
|
eval_info = setting.get("eval_info", None)
|
||||||
|
if not eval_info:
|
||||||
|
return False
|
||||||
|
|
||||||
|
show_button: bool = eval_info.get("show_link_button", False)
|
||||||
|
return show_button
|
||||||
|
|
||||||
|
|
||||||
|
def eval_description(setting: _AvailableJobSetting) -> str:
|
||||||
|
"""Return the 'eval description' of this setting, or an empty string if not found."""
|
||||||
|
|
||||||
|
eval_info = setting.get("eval_info", None)
|
||||||
|
if not eval_info:
|
||||||
|
return ""
|
||||||
|
|
||||||
|
description: str = eval_info.get("description", "")
|
||||||
|
return description
|
||||||
|
|
||||||
|
|
||||||
|
def setting_autoeval_propname(setting: _AvailableJobSetting) -> str:
|
||||||
|
"""Return the property name of the 'auto-eval' state for this setting."""
|
||||||
|
return f"autoeval_{setting.key}"
|
||||||
|
|
||||||
|
|
||||||
def _store_available_job_types(available_job_types: _AvailableJobTypes) -> None:
|
def _store_available_job_types(available_job_types: _AvailableJobTypes) -> None:
|
||||||
global _available_job_types
|
global _available_job_types
|
||||||
global _job_type_enum_items
|
global _job_type_enum_items
|
||||||
|
@ -131,8 +131,7 @@ class JobTypePropertyGroup:
|
|||||||
setting value. Otherwise the default is used.
|
setting value. Otherwise the default is used.
|
||||||
"""
|
"""
|
||||||
for setting in self.job_type.settings:
|
for setting in self.job_type.settings:
|
||||||
if job_types.setting_is_visible(setting):
|
if not job_types.setting_should_autoeval(self, setting):
|
||||||
# Skip those settings that will be visible in the GUI.
|
|
||||||
continue
|
continue
|
||||||
|
|
||||||
setting_eval = setting.get("eval", "")
|
setting_eval = setting.get("eval", "")
|
||||||
@ -253,10 +252,16 @@ def generate(job_type: _AvailableJobType) -> type[JobTypePropertyGroup]:
|
|||||||
)
|
)
|
||||||
pg_type.__annotations__ = {}
|
pg_type.__annotations__ = {}
|
||||||
|
|
||||||
|
# Add RNA properties for the settings.
|
||||||
for setting in job_type.settings:
|
for setting in job_type.settings:
|
||||||
prop = _create_property(job_type, setting)
|
prop = _create_property(job_type, setting)
|
||||||
pg_type.__annotations__[setting.key] = prop
|
pg_type.__annotations__[setting.key] = prop
|
||||||
|
|
||||||
|
if job_types.show_eval_on_submit_button(setting):
|
||||||
|
# Add RNA property for the 'auto-eval' toggle.
|
||||||
|
propname, prop = _create_autoeval_property(setting)
|
||||||
|
pg_type.__annotations__[propname] = prop
|
||||||
|
|
||||||
assert issubclass(pg_type, JobTypePropertyGroup), "did not expect type %r" % type(
|
assert issubclass(pg_type, JobTypePropertyGroup), "did not expect type %r" % type(
|
||||||
pg_type
|
pg_type
|
||||||
)
|
)
|
||||||
@ -304,6 +309,29 @@ def _create_property(job_type: _AvailableJobType, setting: _AvailableJobSetting)
|
|||||||
return prop
|
return prop
|
||||||
|
|
||||||
|
|
||||||
|
def _create_autoeval_property(
|
||||||
|
setting: _AvailableJobSetting,
|
||||||
|
) -> tuple[str, Any]:
|
||||||
|
from flamenco.manager.model.available_job_setting import AvailableJobSetting
|
||||||
|
|
||||||
|
assert isinstance(setting, AvailableJobSetting)
|
||||||
|
|
||||||
|
setting_name = _job_setting_key_to_label(setting.key)
|
||||||
|
prop_descr = (
|
||||||
|
"Automatically determine the value for %r when the job gets submitted"
|
||||||
|
% setting_name
|
||||||
|
)
|
||||||
|
|
||||||
|
prop = bpy.props.BoolProperty(
|
||||||
|
name="Use Automatic Value",
|
||||||
|
description=prop_descr,
|
||||||
|
default=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
prop_name = job_types.setting_autoeval_propname(setting)
|
||||||
|
return prop_name, prop
|
||||||
|
|
||||||
|
|
||||||
def _find_prop_type(
|
def _find_prop_type(
|
||||||
job_type: _AvailableJobType, setting: _AvailableJobSetting
|
job_type: _AvailableJobType, setting: _AvailableJobSetting
|
||||||
) -> tuple[Any, dict[str, Any]]:
|
) -> tuple[Any, dict[str, Any]]:
|
||||||
|
@ -13,6 +13,7 @@ Name | Type | Description | Notes
|
|||||||
**description** | **bool, date, datetime, dict, float, int, list, str, none_type** | The description/tooltip shown in the user interface. | [optional]
|
**description** | **bool, date, datetime, dict, float, int, list, str, none_type** | The description/tooltip shown in the user interface. | [optional]
|
||||||
**default** | **bool, date, datetime, dict, float, int, list, str, none_type** | The default value shown to the user when determining this setting. | [optional]
|
**default** | **bool, date, datetime, dict, float, int, list, str, none_type** | The default value shown to the user when determining this setting. | [optional]
|
||||||
**eval** | **str** | Python expression to be evaluated in order to determine the default value for this setting. | [optional]
|
**eval** | **str** | Python expression to be evaluated in order to determine the default value for this setting. | [optional]
|
||||||
|
**eval_info** | [**AvailableJobSettingEvalInfo**](AvailableJobSettingEvalInfo.md) | | [optional]
|
||||||
**visible** | [**AvailableJobSettingVisibility**](AvailableJobSettingVisibility.md) | | [optional]
|
**visible** | [**AvailableJobSettingVisibility**](AvailableJobSettingVisibility.md) | | [optional]
|
||||||
**required** | **bool** | Whether to immediately reject a job definition, of this type, without this particular setting. | [optional] if omitted the server will use the default value of False
|
**required** | **bool** | Whether to immediately reject a job definition, of this type, without this particular setting. | [optional] if omitted the server will use the default value of False
|
||||||
**editable** | **bool** | Whether to allow editing this setting after the job has been submitted. Would imply deleting all existing tasks for this job, and recompiling it. | [optional] if omitted the server will use the default value of False
|
**editable** | **bool** | Whether to allow editing this setting after the job has been submitted. Would imply deleting all existing tasks for this job, and recompiling it. | [optional] if omitted the server will use the default value of False
|
||||||
|
14
addon/flamenco/manager/docs/AvailableJobSettingEvalInfo.md
generated
Normal file
14
addon/flamenco/manager/docs/AvailableJobSettingEvalInfo.md
generated
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
# AvailableJobSettingEvalInfo
|
||||||
|
|
||||||
|
Meta-data for the 'eval' expression.
|
||||||
|
|
||||||
|
## Properties
|
||||||
|
Name | Type | Description | Notes
|
||||||
|
------------ | ------------- | ------------- | -------------
|
||||||
|
**show_link_button** | **bool** | Enables the 'eval on submit' toggle button behavior for this setting. A toggle button will be shown in Blender's submission interface. When toggled on, the `eval` expression will determine the setting's value. Manually editing the setting is then no longer possible, and instead of an input field, the 'description' string is shown. An example use is the to-be-rendered frame range, which by default automatically follows the scene range, but can be overridden manually when desired. | defaults to False
|
||||||
|
**description** | **str** | Description of what the 'eval' expression is doing. It is also used as placeholder text to show when the manual input field is hidden (because eval-on-submit has been toggled on by the user). | defaults to ""
|
||||||
|
**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional]
|
||||||
|
|
||||||
|
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
|
||||||
|
|
||||||
|
|
@ -30,9 +30,11 @@ from flamenco.manager.exceptions import ApiAttributeError
|
|||||||
|
|
||||||
|
|
||||||
def lazy_import():
|
def lazy_import():
|
||||||
|
from flamenco.manager.model.available_job_setting_eval_info import AvailableJobSettingEvalInfo
|
||||||
from flamenco.manager.model.available_job_setting_subtype import AvailableJobSettingSubtype
|
from flamenco.manager.model.available_job_setting_subtype import AvailableJobSettingSubtype
|
||||||
from flamenco.manager.model.available_job_setting_type import AvailableJobSettingType
|
from flamenco.manager.model.available_job_setting_type import AvailableJobSettingType
|
||||||
from flamenco.manager.model.available_job_setting_visibility import AvailableJobSettingVisibility
|
from flamenco.manager.model.available_job_setting_visibility import AvailableJobSettingVisibility
|
||||||
|
globals()['AvailableJobSettingEvalInfo'] = AvailableJobSettingEvalInfo
|
||||||
globals()['AvailableJobSettingSubtype'] = AvailableJobSettingSubtype
|
globals()['AvailableJobSettingSubtype'] = AvailableJobSettingSubtype
|
||||||
globals()['AvailableJobSettingType'] = AvailableJobSettingType
|
globals()['AvailableJobSettingType'] = AvailableJobSettingType
|
||||||
globals()['AvailableJobSettingVisibility'] = AvailableJobSettingVisibility
|
globals()['AvailableJobSettingVisibility'] = AvailableJobSettingVisibility
|
||||||
@ -99,6 +101,7 @@ class AvailableJobSetting(ModelNormal):
|
|||||||
'description': (bool, date, datetime, dict, float, int, list, str, none_type,), # noqa: E501
|
'description': (bool, date, datetime, dict, float, int, list, str, none_type,), # noqa: E501
|
||||||
'default': (bool, date, datetime, dict, float, int, list, str, none_type,), # noqa: E501
|
'default': (bool, date, datetime, dict, float, int, list, str, none_type,), # noqa: E501
|
||||||
'eval': (str,), # noqa: E501
|
'eval': (str,), # noqa: E501
|
||||||
|
'eval_info': (AvailableJobSettingEvalInfo,), # noqa: E501
|
||||||
'visible': (AvailableJobSettingVisibility,), # noqa: E501
|
'visible': (AvailableJobSettingVisibility,), # noqa: E501
|
||||||
'required': (bool,), # noqa: E501
|
'required': (bool,), # noqa: E501
|
||||||
'editable': (bool,), # noqa: E501
|
'editable': (bool,), # noqa: E501
|
||||||
@ -118,6 +121,7 @@ class AvailableJobSetting(ModelNormal):
|
|||||||
'description': 'description', # noqa: E501
|
'description': 'description', # noqa: E501
|
||||||
'default': 'default', # noqa: E501
|
'default': 'default', # noqa: E501
|
||||||
'eval': 'eval', # noqa: E501
|
'eval': 'eval', # noqa: E501
|
||||||
|
'eval_info': 'evalInfo', # noqa: E501
|
||||||
'visible': 'visible', # noqa: E501
|
'visible': 'visible', # noqa: E501
|
||||||
'required': 'required', # noqa: E501
|
'required': 'required', # noqa: E501
|
||||||
'editable': 'editable', # noqa: E501
|
'editable': 'editable', # noqa: E501
|
||||||
@ -174,6 +178,7 @@ class AvailableJobSetting(ModelNormal):
|
|||||||
description (bool, date, datetime, dict, float, int, list, str, none_type): The description/tooltip shown in the user interface.. [optional] # noqa: E501
|
description (bool, date, datetime, dict, float, int, list, str, none_type): The description/tooltip shown in the user interface.. [optional] # noqa: E501
|
||||||
default (bool, date, datetime, dict, float, int, list, str, none_type): The default value shown to the user when determining this setting.. [optional] # noqa: E501
|
default (bool, date, datetime, dict, float, int, list, str, none_type): The default value shown to the user when determining this setting.. [optional] # noqa: E501
|
||||||
eval (str): Python expression to be evaluated in order to determine the default value for this setting.. [optional] # noqa: E501
|
eval (str): Python expression to be evaluated in order to determine the default value for this setting.. [optional] # noqa: E501
|
||||||
|
eval_info (AvailableJobSettingEvalInfo): [optional] # noqa: E501
|
||||||
visible (AvailableJobSettingVisibility): [optional] # noqa: E501
|
visible (AvailableJobSettingVisibility): [optional] # noqa: E501
|
||||||
required (bool): Whether to immediately reject a job definition, of this type, without this particular setting. . [optional] if omitted the server will use the default value of False # noqa: E501
|
required (bool): Whether to immediately reject a job definition, of this type, without this particular setting. . [optional] if omitted the server will use the default value of False # noqa: E501
|
||||||
editable (bool): Whether to allow editing this setting after the job has been submitted. Would imply deleting all existing tasks for this job, and recompiling it. . [optional] if omitted the server will use the default value of False # noqa: E501
|
editable (bool): Whether to allow editing this setting after the job has been submitted. Would imply deleting all existing tasks for this job, and recompiling it. . [optional] if omitted the server will use the default value of False # noqa: E501
|
||||||
@ -270,6 +275,7 @@ class AvailableJobSetting(ModelNormal):
|
|||||||
description (bool, date, datetime, dict, float, int, list, str, none_type): The description/tooltip shown in the user interface.. [optional] # noqa: E501
|
description (bool, date, datetime, dict, float, int, list, str, none_type): The description/tooltip shown in the user interface.. [optional] # noqa: E501
|
||||||
default (bool, date, datetime, dict, float, int, list, str, none_type): The default value shown to the user when determining this setting.. [optional] # noqa: E501
|
default (bool, date, datetime, dict, float, int, list, str, none_type): The default value shown to the user when determining this setting.. [optional] # noqa: E501
|
||||||
eval (str): Python expression to be evaluated in order to determine the default value for this setting.. [optional] # noqa: E501
|
eval (str): Python expression to be evaluated in order to determine the default value for this setting.. [optional] # noqa: E501
|
||||||
|
eval_info (AvailableJobSettingEvalInfo): [optional] # noqa: E501
|
||||||
visible (AvailableJobSettingVisibility): [optional] # noqa: E501
|
visible (AvailableJobSettingVisibility): [optional] # noqa: E501
|
||||||
required (bool): Whether to immediately reject a job definition, of this type, without this particular setting. . [optional] if omitted the server will use the default value of False # noqa: E501
|
required (bool): Whether to immediately reject a job definition, of this type, without this particular setting. . [optional] if omitted the server will use the default value of False # noqa: E501
|
||||||
editable (bool): Whether to allow editing this setting after the job has been submitted. Would imply deleting all existing tasks for this job, and recompiling it. . [optional] if omitted the server will use the default value of False # noqa: E501
|
editable (bool): Whether to allow editing this setting after the job has been submitted. Would imply deleting all existing tasks for this job, and recompiling it. . [optional] if omitted the server will use the default value of False # noqa: E501
|
||||||
|
271
addon/flamenco/manager/model/available_job_setting_eval_info.py
generated
Normal file
271
addon/flamenco/manager/model/available_job_setting_eval_info.py
generated
Normal file
@ -0,0 +1,271 @@
|
|||||||
|
"""
|
||||||
|
Flamenco manager
|
||||||
|
|
||||||
|
Render Farm manager API # noqa: E501
|
||||||
|
|
||||||
|
The version of the OpenAPI document: 1.0.0
|
||||||
|
Generated by: https://openapi-generator.tech
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
import re # noqa: F401
|
||||||
|
import sys # noqa: F401
|
||||||
|
|
||||||
|
from flamenco.manager.model_utils import ( # noqa: F401
|
||||||
|
ApiTypeError,
|
||||||
|
ModelComposed,
|
||||||
|
ModelNormal,
|
||||||
|
ModelSimple,
|
||||||
|
cached_property,
|
||||||
|
change_keys_js_to_python,
|
||||||
|
convert_js_args_to_python_args,
|
||||||
|
date,
|
||||||
|
datetime,
|
||||||
|
file_type,
|
||||||
|
none_type,
|
||||||
|
validate_get_composed_info,
|
||||||
|
OpenApiModel
|
||||||
|
)
|
||||||
|
from flamenco.manager.exceptions import ApiAttributeError
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class AvailableJobSettingEvalInfo(ModelNormal):
|
||||||
|
"""NOTE: This class is auto generated by OpenAPI Generator.
|
||||||
|
Ref: https://openapi-generator.tech
|
||||||
|
|
||||||
|
Do not edit the class manually.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
allowed_values (dict): The key is the tuple path to the attribute
|
||||||
|
and the for var_name this is (var_name,). The value is a dict
|
||||||
|
with a capitalized key describing the allowed value and an allowed
|
||||||
|
value. These dicts store the allowed enum values.
|
||||||
|
attribute_map (dict): The key is attribute name
|
||||||
|
and the value is json key in definition.
|
||||||
|
discriminator_value_class_map (dict): A dict to go from the discriminator
|
||||||
|
variable value to the discriminator class name.
|
||||||
|
validations (dict): The key is the tuple path to the attribute
|
||||||
|
and the for var_name this is (var_name,). The value is a dict
|
||||||
|
that stores validations for max_length, min_length, max_items,
|
||||||
|
min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
|
||||||
|
inclusive_minimum, and regex.
|
||||||
|
additional_properties_type (tuple): A tuple of classes accepted
|
||||||
|
as additional properties values.
|
||||||
|
"""
|
||||||
|
|
||||||
|
allowed_values = {
|
||||||
|
}
|
||||||
|
|
||||||
|
validations = {
|
||||||
|
}
|
||||||
|
|
||||||
|
@cached_property
|
||||||
|
def additional_properties_type():
|
||||||
|
"""
|
||||||
|
This must be a method because a model may have properties that are
|
||||||
|
of type self, this must run after the class is loaded
|
||||||
|
"""
|
||||||
|
return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501
|
||||||
|
|
||||||
|
_nullable = False
|
||||||
|
|
||||||
|
@cached_property
|
||||||
|
def openapi_types():
|
||||||
|
"""
|
||||||
|
This must be a method because a model may have properties that are
|
||||||
|
of type self, this must run after the class is loaded
|
||||||
|
|
||||||
|
Returns
|
||||||
|
openapi_types (dict): The key is attribute name
|
||||||
|
and the value is attribute type.
|
||||||
|
"""
|
||||||
|
return {
|
||||||
|
'show_link_button': (bool,), # noqa: E501
|
||||||
|
'description': (str,), # noqa: E501
|
||||||
|
}
|
||||||
|
|
||||||
|
@cached_property
|
||||||
|
def discriminator():
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
attribute_map = {
|
||||||
|
'show_link_button': 'showLinkButton', # noqa: E501
|
||||||
|
'description': 'description', # noqa: E501
|
||||||
|
}
|
||||||
|
|
||||||
|
read_only_vars = {
|
||||||
|
}
|
||||||
|
|
||||||
|
_composed_schemas = {}
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
@convert_js_args_to_python_args
|
||||||
|
def _from_openapi_data(cls, *args, **kwargs): # noqa: E501
|
||||||
|
"""AvailableJobSettingEvalInfo - a model defined in OpenAPI
|
||||||
|
|
||||||
|
Args:
|
||||||
|
|
||||||
|
Keyword Args:
|
||||||
|
show_link_button (bool): Enables the 'eval on submit' toggle button behavior for this setting. A toggle button will be shown in Blender's submission interface. When toggled on, the `eval` expression will determine the setting's value. Manually editing the setting is then no longer possible, and instead of an input field, the 'description' string is shown. An example use is the to-be-rendered frame range, which by default automatically follows the scene range, but can be overridden manually when desired. . defaults to False # noqa: E501
|
||||||
|
description (str): Description of what the 'eval' expression is doing. It is also used as placeholder text to show when the manual input field is hidden (because eval-on-submit has been toggled on by the user). . defaults to "" # noqa: E501
|
||||||
|
_check_type (bool): if True, values for parameters in openapi_types
|
||||||
|
will be type checked and a TypeError will be
|
||||||
|
raised if the wrong type is input.
|
||||||
|
Defaults to True
|
||||||
|
_path_to_item (tuple/list): This is a list of keys or values to
|
||||||
|
drill down to the model in received_data
|
||||||
|
when deserializing a response
|
||||||
|
_spec_property_naming (bool): True if the variable names in the input data
|
||||||
|
are serialized names, as specified in the OpenAPI document.
|
||||||
|
False if the variable names in the input data
|
||||||
|
are pythonic names, e.g. snake case (default)
|
||||||
|
_configuration (Configuration): the instance to use when
|
||||||
|
deserializing a file_type parameter.
|
||||||
|
If passed, type conversion is attempted
|
||||||
|
If omitted no type conversion is done.
|
||||||
|
_visited_composed_classes (tuple): This stores a tuple of
|
||||||
|
classes that we have traveled through so that
|
||||||
|
if we see that class again we will not use its
|
||||||
|
discriminator again.
|
||||||
|
When traveling through a discriminator, the
|
||||||
|
composed schema that is
|
||||||
|
is traveled through is added to this set.
|
||||||
|
For example if Animal has a discriminator
|
||||||
|
petType and we pass in "Dog", and the class Dog
|
||||||
|
allOf includes Animal, we move through Animal
|
||||||
|
once using the discriminator, and pick Dog.
|
||||||
|
Then in Dog, we will make an instance of the
|
||||||
|
Animal class but this time we won't travel
|
||||||
|
through its discriminator because we passed in
|
||||||
|
_visited_composed_classes = (Animal,)
|
||||||
|
"""
|
||||||
|
|
||||||
|
show_link_button = kwargs.get('show_link_button', False)
|
||||||
|
description = kwargs.get('description', "")
|
||||||
|
_check_type = kwargs.pop('_check_type', True)
|
||||||
|
_spec_property_naming = kwargs.pop('_spec_property_naming', False)
|
||||||
|
_path_to_item = kwargs.pop('_path_to_item', ())
|
||||||
|
_configuration = kwargs.pop('_configuration', None)
|
||||||
|
_visited_composed_classes = kwargs.pop('_visited_composed_classes', ())
|
||||||
|
|
||||||
|
self = super(OpenApiModel, cls).__new__(cls)
|
||||||
|
|
||||||
|
if args:
|
||||||
|
raise ApiTypeError(
|
||||||
|
"Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % (
|
||||||
|
args,
|
||||||
|
self.__class__.__name__,
|
||||||
|
),
|
||||||
|
path_to_item=_path_to_item,
|
||||||
|
valid_classes=(self.__class__,),
|
||||||
|
)
|
||||||
|
|
||||||
|
self._data_store = {}
|
||||||
|
self._check_type = _check_type
|
||||||
|
self._spec_property_naming = _spec_property_naming
|
||||||
|
self._path_to_item = _path_to_item
|
||||||
|
self._configuration = _configuration
|
||||||
|
self._visited_composed_classes = _visited_composed_classes + (self.__class__,)
|
||||||
|
|
||||||
|
self.show_link_button = show_link_button
|
||||||
|
self.description = description
|
||||||
|
for var_name, var_value in kwargs.items():
|
||||||
|
if var_name not in self.attribute_map and \
|
||||||
|
self._configuration is not None and \
|
||||||
|
self._configuration.discard_unknown_keys and \
|
||||||
|
self.additional_properties_type is None:
|
||||||
|
# discard variable.
|
||||||
|
continue
|
||||||
|
setattr(self, var_name, var_value)
|
||||||
|
return self
|
||||||
|
|
||||||
|
required_properties = set([
|
||||||
|
'_data_store',
|
||||||
|
'_check_type',
|
||||||
|
'_spec_property_naming',
|
||||||
|
'_path_to_item',
|
||||||
|
'_configuration',
|
||||||
|
'_visited_composed_classes',
|
||||||
|
])
|
||||||
|
|
||||||
|
@convert_js_args_to_python_args
|
||||||
|
def __init__(self, *args, **kwargs): # noqa: E501
|
||||||
|
"""AvailableJobSettingEvalInfo - a model defined in OpenAPI
|
||||||
|
|
||||||
|
Args:
|
||||||
|
|
||||||
|
Keyword Args:
|
||||||
|
show_link_button (bool): Enables the 'eval on submit' toggle button behavior for this setting. A toggle button will be shown in Blender's submission interface. When toggled on, the `eval` expression will determine the setting's value. Manually editing the setting is then no longer possible, and instead of an input field, the 'description' string is shown. An example use is the to-be-rendered frame range, which by default automatically follows the scene range, but can be overridden manually when desired. . defaults to False # noqa: E501
|
||||||
|
description (str): Description of what the 'eval' expression is doing. It is also used as placeholder text to show when the manual input field is hidden (because eval-on-submit has been toggled on by the user). . defaults to "" # noqa: E501
|
||||||
|
_check_type (bool): if True, values for parameters in openapi_types
|
||||||
|
will be type checked and a TypeError will be
|
||||||
|
raised if the wrong type is input.
|
||||||
|
Defaults to True
|
||||||
|
_path_to_item (tuple/list): This is a list of keys or values to
|
||||||
|
drill down to the model in received_data
|
||||||
|
when deserializing a response
|
||||||
|
_spec_property_naming (bool): True if the variable names in the input data
|
||||||
|
are serialized names, as specified in the OpenAPI document.
|
||||||
|
False if the variable names in the input data
|
||||||
|
are pythonic names, e.g. snake case (default)
|
||||||
|
_configuration (Configuration): the instance to use when
|
||||||
|
deserializing a file_type parameter.
|
||||||
|
If passed, type conversion is attempted
|
||||||
|
If omitted no type conversion is done.
|
||||||
|
_visited_composed_classes (tuple): This stores a tuple of
|
||||||
|
classes that we have traveled through so that
|
||||||
|
if we see that class again we will not use its
|
||||||
|
discriminator again.
|
||||||
|
When traveling through a discriminator, the
|
||||||
|
composed schema that is
|
||||||
|
is traveled through is added to this set.
|
||||||
|
For example if Animal has a discriminator
|
||||||
|
petType and we pass in "Dog", and the class Dog
|
||||||
|
allOf includes Animal, we move through Animal
|
||||||
|
once using the discriminator, and pick Dog.
|
||||||
|
Then in Dog, we will make an instance of the
|
||||||
|
Animal class but this time we won't travel
|
||||||
|
through its discriminator because we passed in
|
||||||
|
_visited_composed_classes = (Animal,)
|
||||||
|
"""
|
||||||
|
|
||||||
|
show_link_button = kwargs.get('show_link_button', False)
|
||||||
|
description = kwargs.get('description', "")
|
||||||
|
_check_type = kwargs.pop('_check_type', True)
|
||||||
|
_spec_property_naming = kwargs.pop('_spec_property_naming', False)
|
||||||
|
_path_to_item = kwargs.pop('_path_to_item', ())
|
||||||
|
_configuration = kwargs.pop('_configuration', None)
|
||||||
|
_visited_composed_classes = kwargs.pop('_visited_composed_classes', ())
|
||||||
|
|
||||||
|
if args:
|
||||||
|
raise ApiTypeError(
|
||||||
|
"Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % (
|
||||||
|
args,
|
||||||
|
self.__class__.__name__,
|
||||||
|
),
|
||||||
|
path_to_item=_path_to_item,
|
||||||
|
valid_classes=(self.__class__,),
|
||||||
|
)
|
||||||
|
|
||||||
|
self._data_store = {}
|
||||||
|
self._check_type = _check_type
|
||||||
|
self._spec_property_naming = _spec_property_naming
|
||||||
|
self._path_to_item = _path_to_item
|
||||||
|
self._configuration = _configuration
|
||||||
|
self._visited_composed_classes = _visited_composed_classes + (self.__class__,)
|
||||||
|
|
||||||
|
self.show_link_button = show_link_button
|
||||||
|
self.description = description
|
||||||
|
for var_name, var_value in kwargs.items():
|
||||||
|
if var_name not in self.attribute_map and \
|
||||||
|
self._configuration is not None and \
|
||||||
|
self._configuration.discard_unknown_keys and \
|
||||||
|
self.additional_properties_type is None:
|
||||||
|
# discard variable.
|
||||||
|
continue
|
||||||
|
setattr(self, var_name, var_value)
|
||||||
|
if var_name in self.read_only_vars:
|
||||||
|
raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate "
|
||||||
|
f"class with read only attributes.")
|
1
addon/flamenco/manager/models/__init__.py
generated
1
addon/flamenco/manager/models/__init__.py
generated
@ -11,6 +11,7 @@
|
|||||||
|
|
||||||
from flamenco.manager.model.assigned_task import AssignedTask
|
from flamenco.manager.model.assigned_task import AssignedTask
|
||||||
from flamenco.manager.model.available_job_setting import AvailableJobSetting
|
from flamenco.manager.model.available_job_setting import AvailableJobSetting
|
||||||
|
from flamenco.manager.model.available_job_setting_eval_info import AvailableJobSettingEvalInfo
|
||||||
from flamenco.manager.model.available_job_setting_subtype import AvailableJobSettingSubtype
|
from flamenco.manager.model.available_job_setting_subtype import AvailableJobSettingSubtype
|
||||||
from flamenco.manager.model.available_job_setting_type import AvailableJobSettingType
|
from flamenco.manager.model.available_job_setting_type import AvailableJobSettingType
|
||||||
from flamenco.manager.model.available_job_setting_visibility import AvailableJobSettingVisibility
|
from flamenco.manager.model.available_job_setting_visibility import AvailableJobSettingVisibility
|
||||||
|
1
addon/flamenco/manager_README.md
generated
1
addon/flamenco/manager_README.md
generated
@ -134,6 +134,7 @@ Class | Method | HTTP request | Description
|
|||||||
|
|
||||||
- [AssignedTask](flamenco/manager/docs/AssignedTask.md)
|
- [AssignedTask](flamenco/manager/docs/AssignedTask.md)
|
||||||
- [AvailableJobSetting](flamenco/manager/docs/AvailableJobSetting.md)
|
- [AvailableJobSetting](flamenco/manager/docs/AvailableJobSetting.md)
|
||||||
|
- [AvailableJobSettingEvalInfo](flamenco/manager/docs/AvailableJobSettingEvalInfo.md)
|
||||||
- [AvailableJobSettingSubtype](flamenco/manager/docs/AvailableJobSettingSubtype.md)
|
- [AvailableJobSettingSubtype](flamenco/manager/docs/AvailableJobSettingSubtype.md)
|
||||||
- [AvailableJobSettingType](flamenco/manager/docs/AvailableJobSettingType.md)
|
- [AvailableJobSettingType](flamenco/manager/docs/AvailableJobSettingType.md)
|
||||||
- [AvailableJobSettingVisibility](flamenco/manager/docs/AvailableJobSettingVisibility.md)
|
- [AvailableJobSettingVisibility](flamenco/manager/docs/AvailableJobSettingVisibility.md)
|
||||||
|
@ -143,6 +143,14 @@ class FLAMENCO_OT_eval_setting(FlamencoOpMixin, bpy.types.Operator):
|
|||||||
setting_key: bpy.props.StringProperty(name="Setting Key") # type: ignore
|
setting_key: bpy.props.StringProperty(name="Setting Key") # type: ignore
|
||||||
setting_eval: bpy.props.StringProperty(name="Python Expression") # type: ignore
|
setting_eval: bpy.props.StringProperty(name="Python Expression") # type: ignore
|
||||||
|
|
||||||
|
eval_description: bpy.props.StringProperty(name="Description", options={"HIDDEN"})
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def description(cls, context, properties):
|
||||||
|
if not properties.eval_description:
|
||||||
|
return "" # Causes bl_description to be shown.
|
||||||
|
return f"Set value to: {properties.eval_description}"
|
||||||
|
|
||||||
def execute(self, context: bpy.types.Context) -> set[str]:
|
def execute(self, context: bpy.types.Context) -> set[str]:
|
||||||
job = job_submission.job_for_scene(context.scene)
|
job = job_submission.job_for_scene(context.scene)
|
||||||
if job is None:
|
if job is None:
|
||||||
|
@ -52,7 +52,7 @@ var cliArgs struct {
|
|||||||
func main() {
|
func main() {
|
||||||
parseCliArgs()
|
parseCliArgs()
|
||||||
if cliArgs.version {
|
if cliArgs.version {
|
||||||
fmt.Println(appinfo.ApplicationVersion)
|
fmt.Println(appinfo.ExtendedVersion())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,7 +4,12 @@ const JOB_TYPE = {
|
|||||||
label: "Simple Blender Render",
|
label: "Simple Blender Render",
|
||||||
settings: [
|
settings: [
|
||||||
// Settings for artists to determine:
|
// Settings for artists to determine:
|
||||||
{ key: "frames", type: "string", required: true, eval: "f'{C.scene.frame_start}-{C.scene.frame_end}'",
|
{ key: "frames", type: "string", required: true,
|
||||||
|
eval: "f'{C.scene.frame_start}-{C.scene.frame_end}'",
|
||||||
|
evalInfo: {
|
||||||
|
showLinkButton: true,
|
||||||
|
description: "Scene frame range",
|
||||||
|
},
|
||||||
description: "Frame range to render. Examples: '47', '1-30', '3, 5-10, 47-327'" },
|
description: "Frame range to render. Examples: '47', '1-30', '3, 5-10, 47-327'" },
|
||||||
{ key: "chunk_size", type: "int32", default: 1, description: "Number of frames to render in one Blender render task",
|
{ key: "chunk_size", type: "int32", default: 1, description: "Number of frames to render in one Blender render task",
|
||||||
visible: "submission" },
|
visible: "submission" },
|
||||||
|
@ -1683,6 +1683,32 @@ components:
|
|||||||
"eval":
|
"eval":
|
||||||
type: string
|
type: string
|
||||||
description: Python expression to be evaluated in order to determine the default value for this setting.
|
description: Python expression to be evaluated in order to determine the default value for this setting.
|
||||||
|
"evalInfo":
|
||||||
|
type: object
|
||||||
|
description: Meta-data for the 'eval' expression.
|
||||||
|
properties:
|
||||||
|
"showLinkButton":
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
description: >
|
||||||
|
Enables the 'eval on submit' toggle button behavior for this setting.
|
||||||
|
A toggle button will be shown in Blender's submission interface.
|
||||||
|
When toggled on, the `eval` expression will determine the setting's
|
||||||
|
value. Manually editing the setting is then no longer possible, and
|
||||||
|
instead of an input field, the 'description' string is shown.
|
||||||
|
|
||||||
|
An example use is the to-be-rendered frame range, which by default
|
||||||
|
automatically follows the scene range, but can be overridden
|
||||||
|
manually when desired.
|
||||||
|
"description":
|
||||||
|
type: string
|
||||||
|
default: ""
|
||||||
|
description: >
|
||||||
|
Description of what the 'eval' expression is doing.
|
||||||
|
It is also used as placeholder text to show when the manual
|
||||||
|
input field is hidden (because eval-on-submit has been toggled
|
||||||
|
on by the user).
|
||||||
|
required: [showLinkButton, description]
|
||||||
"visible":
|
"visible":
|
||||||
$ref: "#/components/schemas/AvailableJobSettingVisibility"
|
$ref: "#/components/schemas/AvailableJobSettingVisibility"
|
||||||
"required":
|
"required":
|
||||||
|
429
pkg/api/openapi_spec.gen.go
generated
429
pkg/api/openapi_spec.gen.go
generated
@ -18,218 +18,223 @@ import (
|
|||||||
// Base64 encoded, gzipped, json marshaled Swagger object
|
// Base64 encoded, gzipped, json marshaled Swagger object
|
||||||
var swaggerSpec = []string{
|
var swaggerSpec = []string{
|
||||||
|
|
||||||
"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",
|
||||||
"XwAAAP//X9irkUUBAQA=",
|
"EtKl68aDcfTXvYNHN9PUytdvQE4JpENKsqBiRab2YrtCcc4tbeZKGlMwV07uDyV5YJ62BfRCakMUyzB7",
|
||||||
|
"PZS+g/2iPBBla3MATlX6SKraEcKExtp1mEMB0rs7ZfvlHU1yPmMaG/i3zpg8CdnzECf2+pcfAc4/v372",
|
||||||
|
"I3GoZActCypEOk5rncBj5tViIigv9F6p2CVnS0+WuMKCf57aE6T+XgwCiKpLT80rVQyOBnuDyAjVJlbH",
|
||||||
|
"zSCoTvMvjymBHUCSSrcQxs9y4s2kIKP9vWKKW/SrO+wNW+0Uxo0qkDox6OPXx82WZLGJTC4WlUBxEwps",
|
||||||
|
"pBp7Nxy4iQkcNrwMayLQnbu3ISg2Y7LbsHdFycKvqDMZOB0TpV4wfT7MAnyizv13EAxt0t7LSahoFs/h",
|
||||||
|
"0vU//fbp/wUAAP//QMYS9PwEAQA=",
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetSwagger returns the content of the embedded swagger specification file
|
// GetSwagger returns the content of the embedded swagger specification file
|
||||||
|
10
pkg/api/openapi_types.gen.go
generated
10
pkg/api/openapi_types.gen.go
generated
@ -174,6 +174,16 @@ type AvailableJobSetting struct {
|
|||||||
// Python expression to be evaluated in order to determine the default value for this setting.
|
// Python expression to be evaluated in order to determine the default value for this setting.
|
||||||
Eval *string `json:"eval,omitempty"`
|
Eval *string `json:"eval,omitempty"`
|
||||||
|
|
||||||
|
// Meta-data for the 'eval' expression.
|
||||||
|
EvalInfo *struct {
|
||||||
|
// Description of what the 'eval' expression is doing. It is also used as placeholder text to show when the manual input field is hidden (because eval-on-submit has been toggled on by the user).
|
||||||
|
Description string `json:"description"`
|
||||||
|
|
||||||
|
// Enables the 'eval on submit' toggle button behavior for this setting. A toggle button will be shown in Blender's submission interface. When toggled on, the `eval` expression will determine the setting's value. Manually editing the setting is then no longer possible, and instead of an input field, the 'description' string is shown.
|
||||||
|
// An example use is the to-be-rendered frame range, which by default automatically follows the scene range, but can be overridden manually when desired.
|
||||||
|
ShowLinkButton bool `json:"showLinkButton"`
|
||||||
|
} `json:"evalInfo,omitempty"`
|
||||||
|
|
||||||
// Identifier for the setting, must be unique within the job type.
|
// Identifier for the setting, must be unique within the job type.
|
||||||
Key string `json:"key"`
|
Key string `json:"key"`
|
||||||
|
|
||||||
|
7
web/app/src/manager-api/index.js
generated
7
web/app/src/manager-api/index.js
generated
@ -15,6 +15,7 @@
|
|||||||
import ApiClient from './ApiClient';
|
import ApiClient from './ApiClient';
|
||||||
import AssignedTask from './model/AssignedTask';
|
import AssignedTask from './model/AssignedTask';
|
||||||
import AvailableJobSetting from './model/AvailableJobSetting';
|
import AvailableJobSetting from './model/AvailableJobSetting';
|
||||||
|
import AvailableJobSettingEvalInfo from './model/AvailableJobSettingEvalInfo';
|
||||||
import AvailableJobSettingSubtype from './model/AvailableJobSettingSubtype';
|
import AvailableJobSettingSubtype from './model/AvailableJobSettingSubtype';
|
||||||
import AvailableJobSettingType from './model/AvailableJobSettingType';
|
import AvailableJobSettingType from './model/AvailableJobSettingType';
|
||||||
import AvailableJobSettingVisibility from './model/AvailableJobSettingVisibility';
|
import AvailableJobSettingVisibility from './model/AvailableJobSettingVisibility';
|
||||||
@ -144,6 +145,12 @@ export {
|
|||||||
*/
|
*/
|
||||||
AvailableJobSetting,
|
AvailableJobSetting,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The AvailableJobSettingEvalInfo model constructor.
|
||||||
|
* @property {module:model/AvailableJobSettingEvalInfo}
|
||||||
|
*/
|
||||||
|
AvailableJobSettingEvalInfo,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The AvailableJobSettingSubtype model constructor.
|
* The AvailableJobSettingSubtype model constructor.
|
||||||
* @property {module:model/AvailableJobSettingSubtype}
|
* @property {module:model/AvailableJobSettingSubtype}
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import ApiClient from '../ApiClient';
|
import ApiClient from '../ApiClient';
|
||||||
|
import AvailableJobSettingEvalInfo from './AvailableJobSettingEvalInfo';
|
||||||
import AvailableJobSettingSubtype from './AvailableJobSettingSubtype';
|
import AvailableJobSettingSubtype from './AvailableJobSettingSubtype';
|
||||||
import AvailableJobSettingType from './AvailableJobSettingType';
|
import AvailableJobSettingType from './AvailableJobSettingType';
|
||||||
import AvailableJobSettingVisibility from './AvailableJobSettingVisibility';
|
import AvailableJobSettingVisibility from './AvailableJobSettingVisibility';
|
||||||
@ -79,6 +80,9 @@ class AvailableJobSetting {
|
|||||||
if (data.hasOwnProperty('eval')) {
|
if (data.hasOwnProperty('eval')) {
|
||||||
obj['eval'] = ApiClient.convertToType(data['eval'], 'String');
|
obj['eval'] = ApiClient.convertToType(data['eval'], 'String');
|
||||||
}
|
}
|
||||||
|
if (data.hasOwnProperty('evalInfo')) {
|
||||||
|
obj['evalInfo'] = AvailableJobSettingEvalInfo.constructFromObject(data['evalInfo']);
|
||||||
|
}
|
||||||
if (data.hasOwnProperty('visible')) {
|
if (data.hasOwnProperty('visible')) {
|
||||||
obj['visible'] = AvailableJobSettingVisibility.constructFromObject(data['visible']);
|
obj['visible'] = AvailableJobSettingVisibility.constructFromObject(data['visible']);
|
||||||
}
|
}
|
||||||
@ -141,6 +145,11 @@ AvailableJobSetting.prototype['default'] = undefined;
|
|||||||
*/
|
*/
|
||||||
AvailableJobSetting.prototype['eval'] = undefined;
|
AvailableJobSetting.prototype['eval'] = undefined;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @member {module:model/AvailableJobSettingEvalInfo} evalInfo
|
||||||
|
*/
|
||||||
|
AvailableJobSetting.prototype['evalInfo'] = undefined;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @member {module:model/AvailableJobSettingVisibility} visible
|
* @member {module:model/AvailableJobSettingVisibility} visible
|
||||||
*/
|
*/
|
||||||
|
88
web/app/src/manager-api/model/AvailableJobSettingEvalInfo.js
generated
Normal file
88
web/app/src/manager-api/model/AvailableJobSettingEvalInfo.js
generated
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
/**
|
||||||
|
* Flamenco manager
|
||||||
|
* Render Farm manager API
|
||||||
|
*
|
||||||
|
* The version of the OpenAPI document: 1.0.0
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
||||||
|
* https://openapi-generator.tech
|
||||||
|
* Do not edit the class manually.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
import ApiClient from '../ApiClient';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The AvailableJobSettingEvalInfo model module.
|
||||||
|
* @module model/AvailableJobSettingEvalInfo
|
||||||
|
* @version 0.0.0
|
||||||
|
*/
|
||||||
|
class AvailableJobSettingEvalInfo {
|
||||||
|
/**
|
||||||
|
* Constructs a new <code>AvailableJobSettingEvalInfo</code>.
|
||||||
|
* Meta-data for the 'eval' expression.
|
||||||
|
* @alias module:model/AvailableJobSettingEvalInfo
|
||||||
|
* @param showLinkButton {Boolean} Enables the 'eval on submit' toggle button behavior for this setting. A toggle button will be shown in Blender's submission interface. When toggled on, the `eval` expression will determine the setting's value. Manually editing the setting is then no longer possible, and instead of an input field, the 'description' string is shown. An example use is the to-be-rendered frame range, which by default automatically follows the scene range, but can be overridden manually when desired.
|
||||||
|
* @param description {String} Description of what the 'eval' expression is doing. It is also used as placeholder text to show when the manual input field is hidden (because eval-on-submit has been toggled on by the user).
|
||||||
|
*/
|
||||||
|
constructor(showLinkButton, description) {
|
||||||
|
|
||||||
|
AvailableJobSettingEvalInfo.initialize(this, showLinkButton, description);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes the fields of this object.
|
||||||
|
* This method is used by the constructors of any subclasses, in order to implement multiple inheritance (mix-ins).
|
||||||
|
* Only for internal use.
|
||||||
|
*/
|
||||||
|
static initialize(obj, showLinkButton, description) {
|
||||||
|
obj['showLinkButton'] = showLinkButton || false;
|
||||||
|
obj['description'] = description || '';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs a <code>AvailableJobSettingEvalInfo</code> from a plain JavaScript object, optionally creating a new instance.
|
||||||
|
* Copies all relevant properties from <code>data</code> to <code>obj</code> if supplied or a new instance if not.
|
||||||
|
* @param {Object} data The plain JavaScript object bearing properties of interest.
|
||||||
|
* @param {module:model/AvailableJobSettingEvalInfo} obj Optional instance to populate.
|
||||||
|
* @return {module:model/AvailableJobSettingEvalInfo} The populated <code>AvailableJobSettingEvalInfo</code> instance.
|
||||||
|
*/
|
||||||
|
static constructFromObject(data, obj) {
|
||||||
|
if (data) {
|
||||||
|
obj = obj || new AvailableJobSettingEvalInfo();
|
||||||
|
|
||||||
|
if (data.hasOwnProperty('showLinkButton')) {
|
||||||
|
obj['showLinkButton'] = ApiClient.convertToType(data['showLinkButton'], 'Boolean');
|
||||||
|
}
|
||||||
|
if (data.hasOwnProperty('description')) {
|
||||||
|
obj['description'] = ApiClient.convertToType(data['description'], 'String');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enables the 'eval on submit' toggle button behavior for this setting. A toggle button will be shown in Blender's submission interface. When toggled on, the `eval` expression will determine the setting's value. Manually editing the setting is then no longer possible, and instead of an input field, the 'description' string is shown. An example use is the to-be-rendered frame range, which by default automatically follows the scene range, but can be overridden manually when desired.
|
||||||
|
* @member {Boolean} showLinkButton
|
||||||
|
* @default false
|
||||||
|
*/
|
||||||
|
AvailableJobSettingEvalInfo.prototype['showLinkButton'] = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Description of what the 'eval' expression is doing. It is also used as placeholder text to show when the manual input field is hidden (because eval-on-submit has been toggled on by the user).
|
||||||
|
* @member {String} description
|
||||||
|
* @default ''
|
||||||
|
*/
|
||||||
|
AvailableJobSettingEvalInfo.prototype['description'] = '';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
export default AvailableJobSettingEvalInfo;
|
||||||
|
|
@ -16,7 +16,35 @@ SocketIO messages have an *event name* and *room name*.
|
|||||||
- **Manager** typically sends to all clients in a specific *room*. Which client
|
- **Manager** typically sends to all clients in a specific *room*. Which client
|
||||||
has joined which room is determined by the Manager as well. By default every
|
has joined which room is determined by the Manager as well. By default every
|
||||||
client joins the "job updates" and "chat" rooms. This is done in the
|
client joins the "job updates" and "chat" rooms. This is done in the
|
||||||
`OnConnection` handler defined in `registerSIOEventHandlers()`.
|
`OnConnection` handler defined in `registerSIOEventHandlers()`. Clients can
|
||||||
|
send messages to the Manager to change which rooms they are in.
|
||||||
- Received messages (regardless of by whom) are handled based only on their
|
- Received messages (regardless of by whom) are handled based only on their
|
||||||
*event name*. The *room name* only determines *which* client receives those
|
*event name*. The *room name* only determines *which client* receives those
|
||||||
messages.
|
messages.
|
||||||
|
|
||||||
|
## Technical Details
|
||||||
|
|
||||||
|
The following files & directories are relevant to the SocketIO broadcasting
|
||||||
|
system on the Manager/backend side:
|
||||||
|
|
||||||
|
`internal/manager/webupdates`
|
||||||
|
: package for the SocketIO broadcasting system
|
||||||
|
|
||||||
|
`internal/manager/webupdates/sio_rooms.go`
|
||||||
|
: contains the list of predefined SocketIO *rooms* and *event types*. Note that
|
||||||
|
there are more rooms than listed in that file; there are dynamic room name
|
||||||
|
like `job-fa48930a-105c-4125-a7f7-0aa1651dcd57` that cannot be listed there as
|
||||||
|
constants.
|
||||||
|
|
||||||
|
`internal/manager/webupdates/job_updates.go`
|
||||||
|
: sending job-related updates.
|
||||||
|
|
||||||
|
`internal/manager/webupdates/worker_updates.go`
|
||||||
|
: sending worker-related updates.
|
||||||
|
|
||||||
|
`pkg/api/flamenco-openapi.yaml`
|
||||||
|
: the OpenAPI specification also includes the structures sent over SocketIO.
|
||||||
|
Search for `SocketIOJobUpdate`; the rest is defined in its vicinity.
|
||||||
|
|
||||||
|
For a relatively simple example of a job update broadcast, see
|
||||||
|
`func (f *Flamenco) SetJobPriority(...)` in `internal/manager/api_impl/jobs.go`.
|
||||||
|
Loading…
Reference in New Issue
Block a user