From a6ac331612a15f91362dc2cdad7382f41b111e72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Mon, 14 Mar 2022 18:44:39 +0100 Subject: [PATCH] Allow Python evaluation for computing job settings in the addon --- addon/flamenco/gui.py | 10 +- addon/flamenco/job_types_propgroup.py | 10 ++ addon/flamenco/manager/__init__.py | 2 +- addon/flamenco/manager/api_client.py | 2 +- addon/flamenco/manager/configuration.py | 2 +- .../manager/docs/AvailableJobSetting.md | 1 + .../manager/model/available_job_setting.py | 4 + addon/flamenco/manager_README.md | 2 +- addon/flamenco/operators.py | 16 +++ .../scripts/simple_blender_render.js | 7 +- pkg/api/flamenco-manager.yaml | 3 + pkg/api/openapi_spec.gen.go | 117 +++++++++--------- pkg/api/openapi_types.gen.go | 3 + 13 files changed, 113 insertions(+), 66 deletions(-) diff --git a/addon/flamenco/gui.py b/addon/flamenco/gui.py index 9b1703a2..cc68d9d9 100644 --- a/addon/flamenco/gui.py +++ b/addon/flamenco/gui.py @@ -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 diff --git a/addon/flamenco/job_types_propgroup.py b/addon/flamenco/job_types_propgroup.py index 8f2b8480..78a88638 100644 --- a/addon/flamenco/job_types_propgroup.py +++ b/addon/flamenco/job_types_propgroup.py @@ -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 diff --git a/addon/flamenco/manager/__init__.py b/addon/flamenco/manager/__init__.py index 9cba0ba7..50e98009 100644 --- a/addon/flamenco/manager/__init__.py +++ b/addon/flamenco/manager/__init__.py @@ -10,7 +10,7 @@ """ -__version__ = "b969e4f7-dirty" +__version__ = "4196460c-dirty" # import ApiClient from flamenco.manager.api_client import ApiClient diff --git a/addon/flamenco/manager/api_client.py b/addon/flamenco/manager/api_client.py index 99b6c9bd..8240e09e 100644 --- a/addon/flamenco/manager/api_client.py +++ b/addon/flamenco/manager/api_client.py @@ -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 diff --git a/addon/flamenco/manager/configuration.py b/addon/flamenco/manager/configuration.py index c12bcd63..58a76d2b 100644 --- a/addon/flamenco/manager/configuration.py +++ b/addon/flamenco/manager/configuration.py @@ -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): diff --git a/addon/flamenco/manager/docs/AvailableJobSetting.md b/addon/flamenco/manager/docs/AvailableJobSetting.md index b155c2c7..86cd669d 100644 --- a/addon/flamenco/manager/docs/AvailableJobSetting.md +++ b/addon/flamenco/manager/docs/AvailableJobSetting.md @@ -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 diff --git a/addon/flamenco/manager/model/available_job_setting.py b/addon/flamenco/manager/model/available_job_setting.py index 848a944b..d99d7bee 100644 --- a/addon/flamenco/manager/model/available_job_setting.py +++ b/addon/flamenco/manager/model/available_job_setting.py @@ -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 diff --git a/addon/flamenco/manager_README.md b/addon/flamenco/manager_README.md index 6ce7733f..ea5ea2f1 100644 --- a/addon/flamenco/manager_README.md +++ b/addon/flamenco/manager_README.md @@ -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/) diff --git a/addon/flamenco/operators.py b/addon/flamenco/operators.py index dd14ab98..f7d99349 100644 --- a/addon/flamenco/operators.py +++ b/addon/flamenco/operators.py @@ -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) diff --git a/internal/manager/job_compilers/scripts/simple_blender_render.js b/internal/manager/job_compilers/scripts/simple_blender_render.js index 21299b04..ea892abb 100644 --- a/internal/manager/job_compilers/scripts/simple_blender_render.js +++ b/internal/manager/job_compilers/scripts/simple_blender_render.js @@ -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 }, ] }; diff --git a/pkg/api/flamenco-manager.yaml b/pkg/api/flamenco-manager.yaml index d9dd58bf..9f8693de 100644 --- a/pkg/api/flamenco-manager.yaml +++ b/pkg/api/flamenco-manager.yaml @@ -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: > diff --git a/pkg/api/openapi_spec.gen.go b/pkg/api/openapi_spec.gen.go index d4ab8046..780344b1 100644 --- a/pkg/api/openapi_spec.gen.go +++ b/pkg/api/openapi_spec.gen.go @@ -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 diff --git a/pkg/api/openapi_types.gen.go b/pkg/api/openapi_types.gen.go index d97177c4..c480b40b 100644 --- a/pkg/api/openapi_types.gen.go +++ b/pkg/api/openapi_types.gen.go @@ -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"`