From 7b1b6030d3f263dbe65a27dd21ea2b2c4adb1745 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Thu, 5 May 2022 16:04:45 +0200 Subject: [PATCH] OAPI: regenerate code --- addon/flamenco/manager/__init__.py | 2 +- addon/flamenco/manager/api/jobs_api.py | 138 +++++++++ addon/flamenco/manager/api_client.py | 2 +- addon/flamenco/manager/configuration.py | 2 +- addon/flamenco/manager/docs/JobsApi.md | 72 +++++ .../flamenco/manager/docs/TaskStatusChange.md | 13 + .../manager/model/task_status_change.py | 273 ++++++++++++++++++ addon/flamenco/manager/models/__init__.py | 1 + addon/flamenco/manager_README.md | 5 +- internal/worker/mocks/client.gen.go | 40 +++ pkg/api/openapi_client.gen.go | 146 ++++++++++ pkg/api/openapi_server.gen.go | 20 ++ pkg/api/openapi_spec.gen.go | 228 +++++++-------- pkg/api/openapi_types.gen.go | 13 + web/app/src/manager-api/ApiClient.js | 2 +- web/app/src/manager-api/index.js | 7 + web/app/src/manager-api/manager/JobsApi.js | 51 ++++ .../src/manager-api/model/TaskStatusChange.js | 85 ++++++ 18 files changed, 982 insertions(+), 118 deletions(-) create mode 100644 addon/flamenco/manager/docs/TaskStatusChange.md create mode 100644 addon/flamenco/manager/model/task_status_change.py create mode 100644 web/app/src/manager-api/model/TaskStatusChange.js diff --git a/addon/flamenco/manager/__init__.py b/addon/flamenco/manager/__init__.py index 37348c6a..77d2585a 100644 --- a/addon/flamenco/manager/__init__.py +++ b/addon/flamenco/manager/__init__.py @@ -10,7 +10,7 @@ """ -__version__ = "adba7217" +__version__ = "9985860c" # import ApiClient from flamenco.manager.api_client import ApiClient diff --git a/addon/flamenco/manager/api/jobs_api.py b/addon/flamenco/manager/api/jobs_api.py index a1a5d724..d27435ae 100644 --- a/addon/flamenco/manager/api/jobs_api.py +++ b/addon/flamenco/manager/api/jobs_api.py @@ -31,6 +31,7 @@ from flamenco.manager.model.jobs_query import JobsQuery from flamenco.manager.model.jobs_query_result import JobsQueryResult from flamenco.manager.model.submitted_job import SubmittedJob from flamenco.manager.model.task import Task +from flamenco.manager.model.task_status_change import TaskStatusChange class JobsApi(object): @@ -388,6 +389,62 @@ class JobsApi(object): }, api_client=api_client ) + self.set_task_status_endpoint = _Endpoint( + settings={ + 'response_type': None, + 'auth': [], + 'endpoint_path': '/api/tasks/{task_id}/setstatus', + 'operation_id': 'set_task_status', + 'http_method': 'POST', + 'servers': None, + }, + params_map={ + 'all': [ + 'task_id', + 'task_status_change', + ], + 'required': [ + 'task_id', + 'task_status_change', + ], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + 'task_id': + (str,), + 'task_status_change': + (TaskStatusChange,), + }, + 'attribute_map': { + 'task_id': 'task_id', + }, + 'location_map': { + 'task_id': 'path', + 'task_status_change': 'body', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [ + 'application/json' + ], + 'content_type': [ + 'application/json' + ] + }, + api_client=api_client + ) self.submit_job_endpoint = _Endpoint( settings={ 'response_type': (Job,), @@ -977,6 +1034,87 @@ class JobsApi(object): job_status_change return self.set_job_status_endpoint.call_with_http_info(**kwargs) + def set_task_status( + self, + task_id, + task_status_change, + **kwargs + ): + """set_task_status # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.set_task_status(task_id, task_status_change, async_req=True) + >>> result = thread.get() + + Args: + task_id (str): + task_status_change (TaskStatusChange): The status change to request. + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (int/float/tuple): timeout setting for this request. If + one number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _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) + _content_type (str/None): force body content-type. + Default is None and content-type will be predicted by allowed + content-types and body. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + None + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_spec_property_naming'] = kwargs.get( + '_spec_property_naming', False + ) + kwargs['_content_type'] = kwargs.get( + '_content_type') + kwargs['_host_index'] = kwargs.get('_host_index') + kwargs['task_id'] = \ + task_id + kwargs['task_status_change'] = \ + task_status_change + return self.set_task_status_endpoint.call_with_http_info(**kwargs) + def submit_job( self, submitted_job, diff --git a/addon/flamenco/manager/api_client.py b/addon/flamenco/manager/api_client.py index 58aa2d2a..888c0dce 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/adba7217 (Blender add-on)' + self.user_agent = 'Flamenco/9985860c (Blender add-on)' def __enter__(self): return self diff --git a/addon/flamenco/manager/configuration.py b/addon/flamenco/manager/configuration.py index a0df5a4a..5b58645d 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: adba7217".\ + "SDK Package Version: 9985860c".\ format(env=sys.platform, pyversion=sys.version) def get_host_settings(self): diff --git a/addon/flamenco/manager/docs/JobsApi.md b/addon/flamenco/manager/docs/JobsApi.md index f3f90f4b..a8f37b56 100644 --- a/addon/flamenco/manager/docs/JobsApi.md +++ b/addon/flamenco/manager/docs/JobsApi.md @@ -11,6 +11,7 @@ Method | HTTP request | Description [**get_job_types**](JobsApi.md#get_job_types) | **GET** /api/jobs/types | Get list of job types and their parameters. [**query_jobs**](JobsApi.md#query_jobs) | **POST** /api/jobs/query | Fetch list of jobs. [**set_job_status**](JobsApi.md#set_job_status) | **POST** /api/jobs/{job_id}/setstatus | +[**set_task_status**](JobsApi.md#set_task_status) | **POST** /api/tasks/{task_id}/setstatus | [**submit_job**](JobsApi.md#submit_job) | **POST** /api/jobs | Submit a new job for Flamenco Manager to execute. @@ -491,6 +492,77 @@ No authorization required [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) +# **set_task_status** +> set_task_status(task_id, task_status_change) + + + +### Example + + +```python +import time +import flamenco.manager +from flamenco.manager.api import jobs_api +from flamenco.manager.model.task_status_change import TaskStatusChange +from flamenco.manager.model.error import Error +from pprint import pprint +# Defining the host is optional and defaults to http://localhost +# See configuration.py for a list of all supported configuration parameters. +configuration = flamenco.manager.Configuration( + host = "http://localhost" +) + + +# Enter a context with an instance of the API client +with flamenco.manager.ApiClient() as api_client: + # Create an instance of the API class + api_instance = jobs_api.JobsApi(api_client) + task_id = "task_id_example" # str | + task_status_change = TaskStatusChange( + status=TaskStatus("active"), + reason="reason_example", + ) # TaskStatusChange | The status change to request. + + # example passing only required values which don't have defaults set + try: + api_instance.set_task_status(task_id, task_status_change) + except flamenco.manager.ApiException as e: + print("Exception when calling JobsApi->set_task_status: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **task_id** | **str**| | + **task_status_change** | [**TaskStatusChange**](TaskStatusChange.md)| The status change to request. | + +### Return type + +void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | Status change was accepted. | - | +**422** | The requested status change is not valid for the current status of the task. | - | +**0** | Unexpected error. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + # **submit_job** > Job submit_job(submitted_job) diff --git a/addon/flamenco/manager/docs/TaskStatusChange.md b/addon/flamenco/manager/docs/TaskStatusChange.md new file mode 100644 index 00000000..afb4c5f0 --- /dev/null +++ b/addon/flamenco/manager/docs/TaskStatusChange.md @@ -0,0 +1,13 @@ +# TaskStatusChange + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**status** | [**TaskStatus**](TaskStatus.md) | | +**reason** | **str** | The reason for this status change. | +**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) + + diff --git a/addon/flamenco/manager/model/task_status_change.py b/addon/flamenco/manager/model/task_status_change.py new file mode 100644 index 00000000..0703e1d1 --- /dev/null +++ b/addon/flamenco/manager/model/task_status_change.py @@ -0,0 +1,273 @@ +""" + 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 + + +def lazy_import(): + from flamenco.manager.model.task_status import TaskStatus + globals()['TaskStatus'] = TaskStatus + + +class TaskStatusChange(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 + """ + lazy_import() + 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. + """ + lazy_import() + return { + 'status': (TaskStatus,), # noqa: E501 + 'reason': (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'status': 'status', # noqa: E501 + 'reason': 'reason', # noqa: E501 + } + + read_only_vars = { + } + + _composed_schemas = {} + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, status, reason, *args, **kwargs): # noqa: E501 + """TaskStatusChange - a model defined in OpenAPI + + Args: + status (TaskStatus): + reason (str): The reason for this status change. + + Keyword Args: + _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,) + """ + + _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.status = status + self.reason = reason + 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, status, reason, *args, **kwargs): # noqa: E501 + """TaskStatusChange - a model defined in OpenAPI + + Args: + status (TaskStatus): + reason (str): The reason for this status change. + + Keyword Args: + _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,) + """ + + _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.status = status + self.reason = reason + 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.") diff --git a/addon/flamenco/manager/models/__init__.py b/addon/flamenco/manager/models/__init__.py index a1163f2e..9a958df2 100644 --- a/addon/flamenco/manager/models/__init__.py +++ b/addon/flamenco/manager/models/__init__.py @@ -46,6 +46,7 @@ from flamenco.manager.model.socket_io_task_update import SocketIOTaskUpdate from flamenco.manager.model.submitted_job import SubmittedJob from flamenco.manager.model.task import Task from flamenco.manager.model.task_status import TaskStatus +from flamenco.manager.model.task_status_change import TaskStatusChange from flamenco.manager.model.task_summary import TaskSummary from flamenco.manager.model.task_update import TaskUpdate from flamenco.manager.model.task_worker import TaskWorker diff --git a/addon/flamenco/manager_README.md b/addon/flamenco/manager_README.md index 9fa36242..869bb356 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: adba7217 +- Package version: 9985860c - Build package: org.openapitools.codegen.languages.PythonClientCodegen For more information, please visit [https://flamenco.io/](https://flamenco.io/) @@ -42,6 +42,7 @@ from flamenco.manager.model.jobs_query import JobsQuery from flamenco.manager.model.jobs_query_result import JobsQueryResult from flamenco.manager.model.submitted_job import SubmittedJob from flamenco.manager.model.task import Task +from flamenco.manager.model.task_status_change import TaskStatusChange # Defining the host is optional and defaults to http://localhost # See configuration.py for a list of all supported configuration parameters. configuration = flamenco.manager.Configuration( @@ -77,6 +78,7 @@ Class | Method | HTTP request | Description *JobsApi* | [**get_job_types**](flamenco/manager/docs/JobsApi.md#get_job_types) | **GET** /api/jobs/types | Get list of job types and their parameters. *JobsApi* | [**query_jobs**](flamenco/manager/docs/JobsApi.md#query_jobs) | **POST** /api/jobs/query | Fetch list of jobs. *JobsApi* | [**set_job_status**](flamenco/manager/docs/JobsApi.md#set_job_status) | **POST** /api/jobs/{job_id}/setstatus | +*JobsApi* | [**set_task_status**](flamenco/manager/docs/JobsApi.md#set_task_status) | **POST** /api/tasks/{task_id}/setstatus | *JobsApi* | [**submit_job**](flamenco/manager/docs/JobsApi.md#submit_job) | **POST** /api/jobs | Submit a new job for Flamenco Manager to execute. *MetaApi* | [**get_configuration**](flamenco/manager/docs/MetaApi.md#get_configuration) | **GET** /api/configuration | Get the configuration of this Manager. *MetaApi* | [**get_version**](flamenco/manager/docs/MetaApi.md#get_version) | **GET** /api/version | Get the Flamenco version of this Manager @@ -132,6 +134,7 @@ Class | Method | HTTP request | Description - [SubmittedJob](flamenco/manager/docs/SubmittedJob.md) - [Task](flamenco/manager/docs/Task.md) - [TaskStatus](flamenco/manager/docs/TaskStatus.md) + - [TaskStatusChange](flamenco/manager/docs/TaskStatusChange.md) - [TaskSummary](flamenco/manager/docs/TaskSummary.md) - [TaskUpdate](flamenco/manager/docs/TaskUpdate.md) - [TaskWorker](flamenco/manager/docs/TaskWorker.md) diff --git a/internal/worker/mocks/client.gen.go b/internal/worker/mocks/client.gen.go index 3992d85c..f4ecf42a 100644 --- a/internal/worker/mocks/client.gen.go +++ b/internal/worker/mocks/client.gen.go @@ -316,6 +316,46 @@ func (mr *MockFlamencoClientMockRecorder) SetJobStatusWithResponse(arg0, arg1, a return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetJobStatusWithResponse", reflect.TypeOf((*MockFlamencoClient)(nil).SetJobStatusWithResponse), varargs...) } +// SetTaskStatusWithBodyWithResponse mocks base method. +func (m *MockFlamencoClient) SetTaskStatusWithBodyWithResponse(arg0 context.Context, arg1, arg2 string, arg3 io.Reader, arg4 ...api.RequestEditorFn) (*api.SetTaskStatusResponse, error) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0, arg1, arg2, arg3} + for _, a := range arg4 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "SetTaskStatusWithBodyWithResponse", varargs...) + ret0, _ := ret[0].(*api.SetTaskStatusResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// SetTaskStatusWithBodyWithResponse indicates an expected call of SetTaskStatusWithBodyWithResponse. +func (mr *MockFlamencoClientMockRecorder) SetTaskStatusWithBodyWithResponse(arg0, arg1, arg2, arg3 interface{}, arg4 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0, arg1, arg2, arg3}, arg4...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetTaskStatusWithBodyWithResponse", reflect.TypeOf((*MockFlamencoClient)(nil).SetTaskStatusWithBodyWithResponse), varargs...) +} + +// SetTaskStatusWithResponse mocks base method. +func (m *MockFlamencoClient) SetTaskStatusWithResponse(arg0 context.Context, arg1 string, arg2 api.SetTaskStatusJSONRequestBody, arg3 ...api.RequestEditorFn) (*api.SetTaskStatusResponse, error) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0, arg1, arg2} + for _, a := range arg3 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "SetTaskStatusWithResponse", varargs...) + ret0, _ := ret[0].(*api.SetTaskStatusResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// SetTaskStatusWithResponse indicates an expected call of SetTaskStatusWithResponse. +func (mr *MockFlamencoClientMockRecorder) SetTaskStatusWithResponse(arg0, arg1, arg2 interface{}, arg3 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0, arg1, arg2}, arg3...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetTaskStatusWithResponse", reflect.TypeOf((*MockFlamencoClient)(nil).SetTaskStatusWithResponse), varargs...) +} + // ShamanCheckoutRequirementsWithBodyWithResponse mocks base method. func (m *MockFlamencoClient) ShamanCheckoutRequirementsWithBodyWithResponse(arg0 context.Context, arg1 string, arg2 io.Reader, arg3 ...api.RequestEditorFn) (*api.ShamanCheckoutRequirementsResponse, error) { m.ctrl.T.Helper() diff --git a/pkg/api/openapi_client.gen.go b/pkg/api/openapi_client.gen.go index 423a805f..a4c410b7 100644 --- a/pkg/api/openapi_client.gen.go +++ b/pkg/api/openapi_client.gen.go @@ -123,6 +123,11 @@ type ClientInterface interface { // FetchTask request FetchTask(ctx context.Context, taskId string, reqEditors ...RequestEditorFn) (*http.Response, error) + // SetTaskStatus request with any body + SetTaskStatusWithBody(ctx context.Context, taskId string, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error) + + SetTaskStatus(ctx context.Context, taskId string, body SetTaskStatusJSONRequestBody, reqEditors ...RequestEditorFn) (*http.Response, error) + // GetVersion request GetVersion(ctx context.Context, reqEditors ...RequestEditorFn) (*http.Response, error) @@ -316,6 +321,30 @@ func (c *Client) FetchTask(ctx context.Context, taskId string, reqEditors ...Req return c.Client.Do(req) } +func (c *Client) SetTaskStatusWithBody(ctx context.Context, taskId string, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewSetTaskStatusRequestWithBody(c.Server, taskId, contentType, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if err := c.applyEditors(ctx, req, reqEditors); err != nil { + return nil, err + } + return c.Client.Do(req) +} + +func (c *Client) SetTaskStatus(ctx context.Context, taskId string, body SetTaskStatusJSONRequestBody, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewSetTaskStatusRequest(c.Server, taskId, body) + if err != nil { + return nil, err + } + req = req.WithContext(ctx) + if err := c.applyEditors(ctx, req, reqEditors); err != nil { + return nil, err + } + return c.Client.Do(req) +} + func (c *Client) GetVersion(ctx context.Context, reqEditors ...RequestEditorFn) (*http.Response, error) { req, err := NewGetVersionRequest(c.Server) if err != nil { @@ -849,6 +878,53 @@ func NewFetchTaskRequest(server string, taskId string) (*http.Request, error) { return req, nil } +// NewSetTaskStatusRequest calls the generic SetTaskStatus builder with application/json body +func NewSetTaskStatusRequest(server string, taskId string, body SetTaskStatusJSONRequestBody) (*http.Request, error) { + var bodyReader io.Reader + buf, err := json.Marshal(body) + if err != nil { + return nil, err + } + bodyReader = bytes.NewReader(buf) + return NewSetTaskStatusRequestWithBody(server, taskId, "application/json", bodyReader) +} + +// NewSetTaskStatusRequestWithBody generates requests for SetTaskStatus with any type of body +func NewSetTaskStatusRequestWithBody(server string, taskId string, contentType string, body io.Reader) (*http.Request, error) { + var err error + + var pathParam0 string + + pathParam0, err = runtime.StyleParamWithLocation("simple", false, "task_id", runtime.ParamLocationPath, taskId) + if err != nil { + return nil, err + } + + serverURL, err := url.Parse(server) + if err != nil { + return nil, err + } + + operationPath := fmt.Sprintf("/api/tasks/%s/setstatus", pathParam0) + if operationPath[0] == '/' { + operationPath = "." + operationPath + } + + queryURL, err := serverURL.Parse(operationPath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("POST", queryURL.String(), body) + if err != nil { + return nil, err + } + + req.Header.Add("Content-Type", contentType) + + return req, nil +} + // NewGetVersionRequest generates requests for GetVersion func NewGetVersionRequest(server string) (*http.Request, error) { var err error @@ -1386,6 +1462,11 @@ type ClientWithResponsesInterface interface { // FetchTask request FetchTaskWithResponse(ctx context.Context, taskId string, reqEditors ...RequestEditorFn) (*FetchTaskResponse, error) + // SetTaskStatus request with any body + SetTaskStatusWithBodyWithResponse(ctx context.Context, taskId string, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*SetTaskStatusResponse, error) + + SetTaskStatusWithResponse(ctx context.Context, taskId string, body SetTaskStatusJSONRequestBody, reqEditors ...RequestEditorFn) (*SetTaskStatusResponse, error) + // GetVersion request GetVersionWithResponse(ctx context.Context, reqEditors ...RequestEditorFn) (*GetVersionResponse, error) @@ -1637,6 +1718,28 @@ func (r FetchTaskResponse) StatusCode() int { return 0 } +type SetTaskStatusResponse struct { + Body []byte + HTTPResponse *http.Response + JSONDefault *Error +} + +// Status returns HTTPResponse.Status +func (r SetTaskStatusResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r SetTaskStatusResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + type GetVersionResponse struct { Body []byte HTTPResponse *http.Response @@ -2016,6 +2119,23 @@ func (c *ClientWithResponses) FetchTaskWithResponse(ctx context.Context, taskId return ParseFetchTaskResponse(rsp) } +// SetTaskStatusWithBodyWithResponse request with arbitrary body returning *SetTaskStatusResponse +func (c *ClientWithResponses) SetTaskStatusWithBodyWithResponse(ctx context.Context, taskId string, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*SetTaskStatusResponse, error) { + rsp, err := c.SetTaskStatusWithBody(ctx, taskId, contentType, body, reqEditors...) + if err != nil { + return nil, err + } + return ParseSetTaskStatusResponse(rsp) +} + +func (c *ClientWithResponses) SetTaskStatusWithResponse(ctx context.Context, taskId string, body SetTaskStatusJSONRequestBody, reqEditors ...RequestEditorFn) (*SetTaskStatusResponse, error) { + rsp, err := c.SetTaskStatus(ctx, taskId, body, reqEditors...) + if err != nil { + return nil, err + } + return ParseSetTaskStatusResponse(rsp) +} + // GetVersionWithResponse request returning *GetVersionResponse func (c *ClientWithResponses) GetVersionWithResponse(ctx context.Context, reqEditors ...RequestEditorFn) (*GetVersionResponse, error) { rsp, err := c.GetVersion(ctx, reqEditors...) @@ -2434,6 +2554,32 @@ func ParseFetchTaskResponse(rsp *http.Response) (*FetchTaskResponse, error) { return response, nil } +// ParseSetTaskStatusResponse parses an HTTP response from a SetTaskStatusWithResponse call +func ParseSetTaskStatusResponse(rsp *http.Response) (*SetTaskStatusResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer func() { _ = rsp.Body.Close() }() + if err != nil { + return nil, err + } + + response := &SetTaskStatusResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && true: + var dest Error + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSONDefault = &dest + + } + + return response, nil +} + // ParseGetVersionResponse parses an HTTP response from a GetVersionWithResponse call func ParseGetVersionResponse(rsp *http.Response) (*GetVersionResponse, error) { bodyBytes, err := ioutil.ReadAll(rsp.Body) diff --git a/pkg/api/openapi_server.gen.go b/pkg/api/openapi_server.gen.go index d12756ca..c11f604a 100644 --- a/pkg/api/openapi_server.gen.go +++ b/pkg/api/openapi_server.gen.go @@ -40,6 +40,9 @@ type ServerInterface interface { // Fetch a single task. // (GET /api/tasks/{task_id}) FetchTask(ctx echo.Context, taskId string) error + + // (POST /api/tasks/{task_id}/setstatus) + SetTaskStatus(ctx echo.Context, taskId string) error // Get the Flamenco version of this Manager // (GET /api/version) GetVersion(ctx echo.Context) error @@ -200,6 +203,22 @@ func (w *ServerInterfaceWrapper) FetchTask(ctx echo.Context) error { return err } +// SetTaskStatus converts echo context to params. +func (w *ServerInterfaceWrapper) SetTaskStatus(ctx echo.Context) error { + var err error + // ------------- Path parameter "task_id" ------------- + var taskId string + + err = runtime.BindStyledParameterWithLocation("simple", false, "task_id", runtime.ParamLocationPath, ctx.Param("task_id"), &taskId) + if err != nil { + return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter task_id: %s", err)) + } + + // Invoke the callback with all the unmarshalled arguments + err = w.Handler.SetTaskStatus(ctx, taskId) + return err +} + // GetVersion converts echo context to params. func (w *ServerInterfaceWrapper) GetVersion(ctx echo.Context) error { var err error @@ -429,6 +448,7 @@ func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL router.POST(baseURL+"/api/jobs/:job_id/setstatus", wrapper.SetJobStatus) router.GET(baseURL+"/api/jobs/:job_id/tasks", wrapper.FetchJobTasks) router.GET(baseURL+"/api/tasks/:task_id", wrapper.FetchTask) + router.POST(baseURL+"/api/tasks/:task_id/setstatus", wrapper.SetTaskStatus) router.GET(baseURL+"/api/version", wrapper.GetVersion) router.POST(baseURL+"/api/worker/register-worker", wrapper.RegisterWorker) router.POST(baseURL+"/api/worker/sign-off", wrapper.SignOff) diff --git a/pkg/api/openapi_spec.gen.go b/pkg/api/openapi_spec.gen.go index 532f3b60..09d3d46a 100644 --- a/pkg/api/openapi_spec.gen.go +++ b/pkg/api/openapi_spec.gen.go @@ -18,119 +18,121 @@ 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 7136f158..f03820e0 100644 --- a/pkg/api/openapi_types.gen.go +++ b/pkg/api/openapi_types.gen.go @@ -447,6 +447,13 @@ type Task struct { // TaskStatus defines model for TaskStatus. type TaskStatus string +// TaskStatusChange defines model for TaskStatusChange. +type TaskStatusChange struct { + // The reason for this status change. + Reason string `json:"reason"` + Status TaskStatus `json:"status"` +} + // Just enough information about the task to show in the job's task list. type TaskSummary struct { Id string `json:"id"` @@ -511,6 +518,9 @@ type QueryJobsJSONBody JobsQuery // SetJobStatusJSONBody defines parameters for SetJobStatus. type SetJobStatusJSONBody JobStatusChange +// SetTaskStatusJSONBody defines parameters for SetTaskStatus. +type SetTaskStatusJSONBody TaskStatusChange + // RegisterWorkerJSONBody defines parameters for RegisterWorker. type RegisterWorkerJSONBody WorkerRegistration @@ -547,6 +557,9 @@ type QueryJobsJSONRequestBody QueryJobsJSONBody // SetJobStatusJSONRequestBody defines body for SetJobStatus for application/json ContentType. type SetJobStatusJSONRequestBody SetJobStatusJSONBody +// SetTaskStatusJSONRequestBody defines body for SetTaskStatus for application/json ContentType. +type SetTaskStatusJSONRequestBody SetTaskStatusJSONBody + // RegisterWorkerJSONRequestBody defines body for RegisterWorker for application/json ContentType. type RegisterWorkerJSONRequestBody RegisterWorkerJSONBody diff --git a/web/app/src/manager-api/ApiClient.js b/web/app/src/manager-api/ApiClient.js index a34c9fb3..b3ddeed7 100644 --- a/web/app/src/manager-api/ApiClient.js +++ b/web/app/src/manager-api/ApiClient.js @@ -55,7 +55,7 @@ class ApiClient { * @default {} */ this.defaultHeaders = { - 'User-Agent': 'Flamenco/adba7217 / webbrowser' + 'User-Agent': 'Flamenco/9985860c / webbrowser' }; /** diff --git a/web/app/src/manager-api/index.js b/web/app/src/manager-api/index.js index 860b6f17..4c794f4b 100644 --- a/web/app/src/manager-api/index.js +++ b/web/app/src/manager-api/index.js @@ -48,6 +48,7 @@ import SocketIOTaskUpdate from './model/SocketIOTaskUpdate'; import SubmittedJob from './model/SubmittedJob'; import Task from './model/Task'; import TaskStatus from './model/TaskStatus'; +import TaskStatusChange from './model/TaskStatusChange'; import TaskSummary from './model/TaskSummary'; import TaskUpdate from './model/TaskUpdate'; import TaskWorker from './model/TaskWorker'; @@ -310,6 +311,12 @@ export { */ TaskStatus, + /** + * The TaskStatusChange model constructor. + * @property {module:model/TaskStatusChange} + */ + TaskStatusChange, + /** * The TaskSummary model constructor. * @property {module:model/TaskSummary} diff --git a/web/app/src/manager-api/manager/JobsApi.js b/web/app/src/manager-api/manager/JobsApi.js index 8378f744..273e00ea 100644 --- a/web/app/src/manager-api/manager/JobsApi.js +++ b/web/app/src/manager-api/manager/JobsApi.js @@ -23,6 +23,7 @@ import JobsQuery from '../model/JobsQuery'; import JobsQueryResult from '../model/JobsQueryResult'; import SubmittedJob from '../model/SubmittedJob'; import Task from '../model/Task'; +import TaskStatusChange from '../model/TaskStatusChange'; /** * Jobs service. @@ -362,6 +363,56 @@ export default class JobsApi { } + /** + * @param {String} taskId + * @param {module:model/TaskStatusChange} taskStatusChange The status change to request. + * @return {Promise} a {@link https://www.promisejs.org/|Promise}, with an object containing HTTP response + */ + setTaskStatusWithHttpInfo(taskId, taskStatusChange) { + let postBody = taskStatusChange; + // verify the required parameter 'taskId' is set + if (taskId === undefined || taskId === null) { + throw new Error("Missing the required parameter 'taskId' when calling setTaskStatus"); + } + // verify the required parameter 'taskStatusChange' is set + if (taskStatusChange === undefined || taskStatusChange === null) { + throw new Error("Missing the required parameter 'taskStatusChange' when calling setTaskStatus"); + } + + let pathParams = { + 'task_id': taskId + }; + let queryParams = { + }; + let headerParams = { + }; + let formParams = { + }; + + let authNames = []; + let contentTypes = ['application/json']; + let accepts = ['application/json']; + let returnType = null; + return this.apiClient.callApi( + '/api/tasks/{task_id}/setstatus', 'POST', + pathParams, queryParams, headerParams, formParams, postBody, + authNames, contentTypes, accepts, returnType, null + ); + } + + /** + * @param {String} taskId + * @param {module:model/TaskStatusChange} taskStatusChange The status change to request. + * @return {Promise} a {@link https://www.promisejs.org/|Promise} + */ + setTaskStatus(taskId, taskStatusChange) { + return this.setTaskStatusWithHttpInfo(taskId, taskStatusChange) + .then(function(response_and_data) { + return response_and_data.data; + }); + } + + /** * Submit a new job for Flamenco Manager to execute. * @param {module:model/SubmittedJob} submittedJob Job to submit diff --git a/web/app/src/manager-api/model/TaskStatusChange.js b/web/app/src/manager-api/model/TaskStatusChange.js new file mode 100644 index 00000000..4ef6b4f2 --- /dev/null +++ b/web/app/src/manager-api/model/TaskStatusChange.js @@ -0,0 +1,85 @@ +/** + * 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'; +import TaskStatus from './TaskStatus'; + +/** + * The TaskStatusChange model module. + * @module model/TaskStatusChange + * @version 0.0.0 + */ +class TaskStatusChange { + /** + * Constructs a new TaskStatusChange. + * @alias module:model/TaskStatusChange + * @param status {module:model/TaskStatus} + * @param reason {String} The reason for this status change. + */ + constructor(status, reason) { + + TaskStatusChange.initialize(this, status, reason); + } + + /** + * 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, status, reason) { + obj['status'] = status; + obj['reason'] = reason; + } + + /** + * Constructs a TaskStatusChange from a plain JavaScript object, optionally creating a new instance. + * Copies all relevant properties from data to obj if supplied or a new instance if not. + * @param {Object} data The plain JavaScript object bearing properties of interest. + * @param {module:model/TaskStatusChange} obj Optional instance to populate. + * @return {module:model/TaskStatusChange} The populated TaskStatusChange instance. + */ + static constructFromObject(data, obj) { + if (data) { + obj = obj || new TaskStatusChange(); + + if (data.hasOwnProperty('status')) { + obj['status'] = TaskStatus.constructFromObject(data['status']); + } + if (data.hasOwnProperty('reason')) { + obj['reason'] = ApiClient.convertToType(data['reason'], 'String'); + } + } + return obj; + } + + +} + +/** + * @member {module:model/TaskStatus} status + */ +TaskStatusChange.prototype['status'] = undefined; + +/** + * The reason for this status change. + * @member {String} reason + */ +TaskStatusChange.prototype['reason'] = undefined; + + + + + + +export default TaskStatusChange; +