Allow Python evaluation for computing job settings in the addon

This commit is contained in:
Sybren A. Stüvel 2022-03-14 18:44:39 +01:00
parent 4196460c29
commit a6ac331612
13 changed files with 113 additions and 66 deletions

View File

@ -47,7 +47,15 @@ class FLAMENCO_PT_job_submission(bpy.types.Panel):
for setting in job_type.settings:
if not setting.get("visible", True):
continue
layout.prop(propgroup, setting.key)
row = layout.row(align=True)
row.prop(propgroup, setting.key)
setting_eval = setting.get("eval", "")
if setting_eval:
props = row.operator(
"flamenco.eval_setting", text="", icon="SCRIPTPLUGINS"
)
props.setting_key = setting.key
props.setting_eval = setting_eval
def draw_flamenco_status(
self, context: bpy.types.Context, layout: bpy.types.UILayout

View File

@ -47,6 +47,16 @@ class JobTypePropertyGroup:
return js
def eval_setting(
self, context: bpy.types.Context, setting_key: str, setting_eval: str
) -> None:
eval_globals = {
"bpy": bpy,
"C": context,
}
value = eval(setting_eval, eval_globals, {})
setattr(self, setting_key, value)
# Mapping from AvailableJobType.setting.type to a callable that converts a value
# to the appropriate type. This is necessary due to the ambiguity between floats

View File

@ -10,7 +10,7 @@
"""
__version__ = "b969e4f7-dirty"
__version__ = "4196460c-dirty"
# import ApiClient
from flamenco.manager.api_client import ApiClient

View File

@ -76,7 +76,7 @@ class ApiClient(object):
self.default_headers[header_name] = header_value
self.cookie = cookie
# Set default User-Agent.
self.user_agent = 'Flamenco/b969e4f7-dirty (Blender add-on)'
self.user_agent = 'Flamenco/4196460c-dirty (Blender add-on)'
def __enter__(self):
return self

View File

@ -404,7 +404,7 @@ conf = flamenco.manager.Configuration(
"OS: {env}\n"\
"Python Version: {pyversion}\n"\
"Version of the API: 1.0.0\n"\
"SDK Package Version: b969e4f7-dirty".\
"SDK Package Version: 4196460c-dirty".\
format(env=sys.platform, pyversion=sys.version)
def get_host_settings(self):

View File

@ -11,6 +11,7 @@ Name | Type | Description | Notes
**choices** | **[str]** | When given, limit the valid values to these choices. Only usable with string type. | [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]
**eval** | **str** | Python expression to be evaluated in order to determine the default value for this setting. | [optional]
**visible** | **bool** | Whether to show this setting in the UI of a job submitter (like a Blender add-on). Set to `false` when it is an internal setting that shouldn't be shown to end users. | [optional] if omitted the server will use the default value of True
**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

View File

@ -95,6 +95,7 @@ class AvailableJobSetting(ModelNormal):
'choices': ([str],), # 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
'eval': (str,), # noqa: E501
'visible': (bool,), # noqa: E501
'required': (bool,), # noqa: E501
'editable': (bool,), # noqa: E501
@ -112,6 +113,7 @@ class AvailableJobSetting(ModelNormal):
'choices': 'choices', # noqa: E501
'description': 'description', # noqa: E501
'default': 'default', # noqa: E501
'eval': 'eval', # noqa: E501
'visible': 'visible', # noqa: E501
'required': 'required', # noqa: E501
'editable': 'editable', # noqa: E501
@ -166,6 +168,7 @@ class AvailableJobSetting(ModelNormal):
choices ([str]): When given, limit the valid values to these choices. Only usable with string type.. [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
eval (str): Python expression to be evaluated in order to determine the default value for this setting.. [optional] # noqa: E501
visible (bool): Whether to show this setting in the UI of a job submitter (like a Blender add-on). Set to `false` when it is an internal setting that shouldn't be shown to end users. . [optional] if omitted the server will use the default value of True # 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
@ -260,6 +263,7 @@ class AvailableJobSetting(ModelNormal):
choices ([str]): When given, limit the valid values to these choices. Only usable with string type.. [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
eval (str): Python expression to be evaluated in order to determine the default value for this setting.. [optional] # noqa: E501
visible (bool): Whether to show this setting in the UI of a job submitter (like a Blender add-on). Set to `false` when it is an internal setting that shouldn't be shown to end users. . [optional] if omitted the server will use the default value of True # 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

View File

@ -4,7 +4,7 @@ Render Farm manager API
The `flamenco.manager` package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project:
- API version: 1.0.0
- Package version: b969e4f7-dirty
- Package version: 4196460c-dirty
- Build package: org.openapitools.codegen.languages.PythonClientCodegen
For more information, please visit [https://flamenco.io/](https://flamenco.io/)

View File

@ -105,6 +105,21 @@ class FLAMENCO_OT_ping_manager(FlamencoOpMixin, bpy.types.Operator):
return {"FINISHED"}
class FLAMENCO_OT_eval_setting(FlamencoOpMixin, bpy.types.Operator):
bl_idname = "flamenco.eval_setting"
bl_label = "Flamenco: Evalutate Setting Value"
bl_description = "Automatically determine a suitable value"
bl_options = {"REGISTER", "INTERNAL"} # No UNDO.
setting_key: bpy.props.StringProperty(name="Setting Key") # type: ignore
setting_eval: bpy.props.StringProperty(name="Python Expression") # type: ignore
def execute(self, context: bpy.types.Context) -> set[str]:
propgroup = context.scene.flamenco_job_settings
propgroup.eval_setting(context, self.setting_key, self.setting_eval)
return {"FINISHED"}
class FLAMENCO_OT_submit_job(FlamencoOpMixin, bpy.types.Operator):
bl_idname = "flamenco.submit_job"
bl_label = "Flamenco: Submit Job"
@ -269,6 +284,7 @@ class FLAMENCO_OT_submit_job(FlamencoOpMixin, bpy.types.Operator):
classes = (
FLAMENCO_OT_fetch_job_types,
FLAMENCO_OT_ping_manager,
FLAMENCO_OT_eval_setting,
FLAMENCO_OT_submit_job,
)
register, unregister = bpy.utils.register_classes_factory(classes)

View File

@ -6,9 +6,9 @@ const JOB_TYPE = {
{ key: "blender_cmd", type: "string", default: "{blender}", visible: false },
{ key: "blendfile", type: "string", required: true, description: "Path of the Blend file to render", visible: false },
{ key: "chunk_size", type: "int32", default: 1, description: "Number of frames to render in one Blender render task" },
{ key: "frames", type: "string", required: true },
{ key: "frames", type: "string", required: true, eval: "f'{C.scene.frame_start}-{C.scene.frame_end}'"},
{ key: "render_output", type: "string", subtype: "hashed_file_path", required: true },
{ key: "fps", type: "int32" },
{ key: "fps", type: "float", eval: "C.scene.render.fps / C.scene.render.fps_base" },
{ key: "extract_audio", type: "bool", default: true },
{
key: "images_or_video",
@ -16,8 +16,9 @@ const JOB_TYPE = {
required: true,
choices: ["images", "video"],
visible: false,
eval: "'video' if C.scene.render.image_settings.file_format in {'FFMPEG', 'AVI_RAW', 'AVI_JPEG'} else 'image'"
},
{ key: "format", type: "string", required: true },
{ key: "format", type: "string", required: true, eval: "C.scene.render.image_settings.file_format" },
{ key: "output_file_extension", type: "string", required: true },
]
};

View File

@ -407,6 +407,9 @@ components:
description: The description/tooltip shown in the user interface.
"default":
description: The default value shown to the user when determining this setting.
"eval":
type: string
description: Python expression to be evaluated in order to determine the default value for this setting.
"visible":
type: boolean
description: >

View File

@ -18,64 +18,65 @@ import (
// Base64 encoded, gzipped, json marshaled Swagger object
var swaggerSpec = []string{
"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",
}
// GetSwagger returns the content of the embedded swagger specification file

View File

@ -129,6 +129,9 @@ type AvailableJobSetting struct {
// Whether to allow editing this setting after the job has been submitted. Would imply deleting all existing tasks for this job, and recompiling it.
Editable *bool `json:"editable,omitempty"`
// Python expression to be evaluated in order to determine the default value for this setting.
Eval *string `json:"eval,omitempty"`
// Identifier for the setting, must be unique within the job type.
Key string `json:"key"`