From 801fa20f12f88cc2b1145a0024be1000d01cb9a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Fri, 1 Jul 2022 12:32:42 +0200 Subject: [PATCH] OAPI: regenerate code --- addon/flamenco/manager/__init__.py | 2 +- addon/flamenco/manager/api/jobs_api.py | 114 +++++++ addon/flamenco/manager/api_client.py | 8 +- addon/flamenco/manager/configuration.py | 2 +- addon/flamenco/manager/docs/JobsApi.md | 63 ++++ .../manager/docs/SocketIOSubscriptionType.md | 2 +- .../model/socket_io_subscription_type.py | 9 +- addon/flamenco/manager_README.md | 12 +- internal/worker/mocks/client.gen.go | 20 ++ pkg/api/openapi_client.gen.go | 102 ++++++ pkg/api/openapi_server.gen.go | 13 + pkg/api/openapi_spec.gen.go | 293 +++++++++--------- pkg/api/openapi_types.gen.go | 2 + web/app/src/manager-api/ApiClient.js | 2 +- web/app/src/manager-api/manager/JobsApi.js | 39 +++ .../model/SocketIOSubscriptionType.js | 7 + 16 files changed, 526 insertions(+), 164 deletions(-) diff --git a/addon/flamenco/manager/__init__.py b/addon/flamenco/manager/__init__.py index 749d142d..44625841 100644 --- a/addon/flamenco/manager/__init__.py +++ b/addon/flamenco/manager/__init__.py @@ -10,7 +10,7 @@ """ -__version__ = "cca81558" +__version__ = "60f3f548" # 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 dc4125ef..6988e86a 100644 --- a/addon/flamenco/manager/api/jobs_api.py +++ b/addon/flamenco/manager/api/jobs_api.py @@ -47,6 +47,48 @@ class JobsApi(object): if api_client is None: api_client = ApiClient() self.api_client = api_client + self.fetch_global_last_rendered_info_endpoint = _Endpoint( + settings={ + 'response_type': (JobLastRenderedImageInfo,), + 'auth': [], + 'endpoint_path': '/api/jobs/last-rendered', + 'operation_id': 'fetch_global_last_rendered_info', + 'http_method': 'GET', + 'servers': None, + }, + params_map={ + 'all': [ + ], + 'required': [], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + }, + 'attribute_map': { + }, + 'location_map': { + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [ + 'application/json' + ], + 'content_type': [], + }, + api_client=api_client + ) self.fetch_job_endpoint = _Endpoint( settings={ 'response_type': (Job,), @@ -701,6 +743,78 @@ class JobsApi(object): api_client=api_client ) + def fetch_global_last_rendered_info( + self, + **kwargs + ): + """Get the URL that serves the last-rendered images. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.fetch_global_last_rendered_info(async_req=True) + >>> result = thread.get() + + + 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: + JobLastRenderedImageInfo + 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') + return self.fetch_global_last_rendered_info_endpoint.call_with_http_info(**kwargs) + def fetch_job( self, job_id, diff --git a/addon/flamenco/manager/api_client.py b/addon/flamenco/manager/api_client.py index d217e94e..ee23fb4d 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/cca81558 (Blender add-on)' + self.user_agent = 'Flamenco/60f3f548 (Blender add-on)' def __enter__(self): return self @@ -774,10 +774,10 @@ class Endpoint(object): Example: api_instance = JobsApi() - api_instance.fetch_job # this is an instance of the class Endpoint - api_instance.fetch_job() # this invokes api_instance.fetch_job.__call__() + api_instance.fetch_global_last_rendered_info # this is an instance of the class Endpoint + api_instance.fetch_global_last_rendered_info() # this invokes api_instance.fetch_global_last_rendered_info.__call__() which then invokes the callable functions stored in that endpoint at - api_instance.fetch_job.callable or self.callable in this class + api_instance.fetch_global_last_rendered_info.callable or self.callable in this class """ return self.callable(self, *args, **kwargs) diff --git a/addon/flamenco/manager/configuration.py b/addon/flamenco/manager/configuration.py index 4cf8ddae..83bd24f6 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: cca81558".\ + "SDK Package Version: 60f3f548".\ 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 523c6104..e9569bbb 100644 --- a/addon/flamenco/manager/docs/JobsApi.md +++ b/addon/flamenco/manager/docs/JobsApi.md @@ -4,6 +4,7 @@ All URIs are relative to *http://localhost* Method | HTTP request | Description ------------- | ------------- | ------------- +[**fetch_global_last_rendered_info**](JobsApi.md#fetch_global_last_rendered_info) | **GET** /api/jobs/last-rendered | Get the URL that serves the last-rendered images. [**fetch_job**](JobsApi.md#fetch_job) | **GET** /api/jobs/{job_id} | Fetch info about the job. [**fetch_job_blocklist**](JobsApi.md#fetch_job_blocklist) | **GET** /api/jobs/{job_id}/blocklist | Fetch the list of workers that are blocked from doing certain task types on this job. [**fetch_job_last_rendered_info**](JobsApi.md#fetch_job_last_rendered_info) | **GET** /api/jobs/{job_id}/last-rendered | Get the URL that serves the last-rendered images of this job. @@ -19,6 +20,68 @@ Method | HTTP request | Description [**submit_job**](JobsApi.md#submit_job) | **POST** /api/jobs | Submit a new job for Flamenco Manager to execute. +# **fetch_global_last_rendered_info** +> JobLastRenderedImageInfo fetch_global_last_rendered_info() + +Get the URL that serves the last-rendered images. + +### Example + + +```python +import time +import flamenco.manager +from flamenco.manager.api import jobs_api +from flamenco.manager.model.job_last_rendered_image_info import JobLastRenderedImageInfo +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) + + # example, this endpoint has no required or optional parameters + try: + # Get the URL that serves the last-rendered images. + api_response = api_instance.fetch_global_last_rendered_info() + pprint(api_response) + except flamenco.manager.ApiException as e: + print("Exception when calling JobsApi->fetch_global_last_rendered_info: %s\n" % e) +``` + + +### Parameters +This endpoint does not need any parameter. + +### Return type + +[**JobLastRenderedImageInfo**](JobLastRenderedImageInfo.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Normal response. | - | +**204** | This job doesn't have any last-rendered image. | - | + +[[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) + # **fetch_job** > Job fetch_job(job_id) diff --git a/addon/flamenco/manager/docs/SocketIOSubscriptionType.md b/addon/flamenco/manager/docs/SocketIOSubscriptionType.md index f8747b33..576185e1 100644 --- a/addon/flamenco/manager/docs/SocketIOSubscriptionType.md +++ b/addon/flamenco/manager/docs/SocketIOSubscriptionType.md @@ -5,7 +5,7 @@ What kind of thing to subscribe to / unsubscribe from. ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**value** | **str** | What kind of thing to subscribe to / unsubscribe from. | must be one of ["allJobs", "allWorkers", "job", "tasklog", ] +**value** | **str** | What kind of thing to subscribe to / unsubscribe from. | must be one of ["allJobs", "allWorkers", "job", "tasklog", "allLastRendered", ] [[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/socket_io_subscription_type.py b/addon/flamenco/manager/model/socket_io_subscription_type.py index d01084a1..b03c30f7 100644 --- a/addon/flamenco/manager/model/socket_io_subscription_type.py +++ b/addon/flamenco/manager/model/socket_io_subscription_type.py @@ -56,6 +56,7 @@ class SocketIOSubscriptionType(ModelSimple): 'ALLWORKERS': "allWorkers", 'JOB': "job", 'TASKLOG': "tasklog", + 'ALLLASTRENDERED': "allLastRendered", }, } @@ -107,10 +108,10 @@ class SocketIOSubscriptionType(ModelSimple): Note that value can be passed either in args or in kwargs, but not in both. Args: - args[0] (str): What kind of thing to subscribe to / unsubscribe from.., must be one of ["allJobs", "allWorkers", "job", "tasklog", ] # noqa: E501 + args[0] (str): What kind of thing to subscribe to / unsubscribe from.., must be one of ["allJobs", "allWorkers", "job", "tasklog", "allLastRendered", ] # noqa: E501 Keyword Args: - value (str): What kind of thing to subscribe to / unsubscribe from.., must be one of ["allJobs", "allWorkers", "job", "tasklog", ] # noqa: E501 + value (str): What kind of thing to subscribe to / unsubscribe from.., must be one of ["allJobs", "allWorkers", "job", "tasklog", "allLastRendered", ] # 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. @@ -197,10 +198,10 @@ class SocketIOSubscriptionType(ModelSimple): Note that value can be passed either in args or in kwargs, but not in both. Args: - args[0] (str): What kind of thing to subscribe to / unsubscribe from.., must be one of ["allJobs", "allWorkers", "job", "tasklog", ] # noqa: E501 + args[0] (str): What kind of thing to subscribe to / unsubscribe from.., must be one of ["allJobs", "allWorkers", "job", "tasklog", "allLastRendered", ] # noqa: E501 Keyword Args: - value (str): What kind of thing to subscribe to / unsubscribe from.., must be one of ["allJobs", "allWorkers", "job", "tasklog", ] # noqa: E501 + value (str): What kind of thing to subscribe to / unsubscribe from.., must be one of ["allJobs", "allWorkers", "job", "tasklog", "allLastRendered", ] # 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. diff --git a/addon/flamenco/manager_README.md b/addon/flamenco/manager_README.md index d7dcd5de..5d2acc15 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: cca81558 +- Package version: 60f3f548 - Build package: org.openapitools.codegen.languages.PythonClientCodegen For more information, please visit [https://flamenco.io/](https://flamenco.io/) @@ -57,14 +57,13 @@ configuration = flamenco.manager.Configuration( with flamenco.manager.ApiClient(configuration) as api_client: # Create an instance of the API class api_instance = jobs_api.JobsApi(api_client) - job_id = "job_id_example" # str | - + try: - # Fetch info about the job. - api_response = api_instance.fetch_job(job_id) + # Get the URL that serves the last-rendered images. + api_response = api_instance.fetch_global_last_rendered_info() pprint(api_response) except flamenco.manager.ApiException as e: - print("Exception when calling JobsApi->fetch_job: %s\n" % e) + print("Exception when calling JobsApi->fetch_global_last_rendered_info: %s\n" % e) ``` ## Documentation for API Endpoints @@ -73,6 +72,7 @@ All URIs are relative to *http://localhost* Class | Method | HTTP request | Description ------------ | ------------- | ------------- | ------------- +*JobsApi* | [**fetch_global_last_rendered_info**](flamenco/manager/docs/JobsApi.md#fetch_global_last_rendered_info) | **GET** /api/jobs/last-rendered | Get the URL that serves the last-rendered images. *JobsApi* | [**fetch_job**](flamenco/manager/docs/JobsApi.md#fetch_job) | **GET** /api/jobs/{job_id} | Fetch info about the job. *JobsApi* | [**fetch_job_blocklist**](flamenco/manager/docs/JobsApi.md#fetch_job_blocklist) | **GET** /api/jobs/{job_id}/blocklist | Fetch the list of workers that are blocked from doing certain task types on this job. *JobsApi* | [**fetch_job_last_rendered_info**](flamenco/manager/docs/JobsApi.md#fetch_job_last_rendered_info) | **GET** /api/jobs/{job_id}/last-rendered | Get the URL that serves the last-rendered images of this job. diff --git a/internal/worker/mocks/client.gen.go b/internal/worker/mocks/client.gen.go index 45fa7f04..176c91bc 100644 --- a/internal/worker/mocks/client.gen.go +++ b/internal/worker/mocks/client.gen.go @@ -36,6 +36,26 @@ func (m *MockFlamencoClient) EXPECT() *MockFlamencoClientMockRecorder { return m.recorder } +// FetchGlobalLastRenderedInfoWithResponse mocks base method. +func (m *MockFlamencoClient) FetchGlobalLastRenderedInfoWithResponse(arg0 context.Context, arg1 ...api.RequestEditorFn) (*api.FetchGlobalLastRenderedInfoResponse, error) { + m.ctrl.T.Helper() + varargs := []interface{}{arg0} + for _, a := range arg1 { + varargs = append(varargs, a) + } + ret := m.ctrl.Call(m, "FetchGlobalLastRenderedInfoWithResponse", varargs...) + ret0, _ := ret[0].(*api.FetchGlobalLastRenderedInfoResponse) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// FetchGlobalLastRenderedInfoWithResponse indicates an expected call of FetchGlobalLastRenderedInfoWithResponse. +func (mr *MockFlamencoClientMockRecorder) FetchGlobalLastRenderedInfoWithResponse(arg0 interface{}, arg1 ...interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + varargs := append([]interface{}{arg0}, arg1...) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FetchGlobalLastRenderedInfoWithResponse", reflect.TypeOf((*MockFlamencoClient)(nil).FetchGlobalLastRenderedInfoWithResponse), varargs...) +} + // FetchJobBlocklistWithResponse mocks base method. func (m *MockFlamencoClient) FetchJobBlocklistWithResponse(arg0 context.Context, arg1 string, arg2 ...api.RequestEditorFn) (*api.FetchJobBlocklistResponse, error) { m.ctrl.T.Helper() diff --git a/pkg/api/openapi_client.gen.go b/pkg/api/openapi_client.gen.go index 3f12852c..43f21508 100644 --- a/pkg/api/openapi_client.gen.go +++ b/pkg/api/openapi_client.gen.go @@ -98,6 +98,9 @@ type ClientInterface interface { SubmitJob(ctx context.Context, body SubmitJobJSONRequestBody, reqEditors ...RequestEditorFn) (*http.Response, error) + // FetchGlobalLastRenderedInfo request + FetchGlobalLastRenderedInfo(ctx context.Context, reqEditors ...RequestEditorFn) (*http.Response, error) + // QueryJobs request with any body QueryJobsWithBody(ctx context.Context, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error) @@ -244,6 +247,18 @@ func (c *Client) SubmitJob(ctx context.Context, body SubmitJobJSONRequestBody, r return c.Client.Do(req) } +func (c *Client) FetchGlobalLastRenderedInfo(ctx context.Context, reqEditors ...RequestEditorFn) (*http.Response, error) { + req, err := NewFetchGlobalLastRenderedInfoRequest(c.Server) + 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) QueryJobsWithBody(ctx context.Context, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*http.Response, error) { req, err := NewQueryJobsRequestWithBody(c.Server, contentType, body) if err != nil { @@ -791,6 +806,33 @@ func NewSubmitJobRequestWithBody(server string, contentType string, body io.Read return req, nil } +// NewFetchGlobalLastRenderedInfoRequest generates requests for FetchGlobalLastRenderedInfo +func NewFetchGlobalLastRenderedInfoRequest(server string) (*http.Request, error) { + var err error + + serverURL, err := url.Parse(server) + if err != nil { + return nil, err + } + + operationPath := fmt.Sprintf("/api/jobs/last-rendered") + if operationPath[0] == '/' { + operationPath = "." + operationPath + } + + queryURL, err := serverURL.Parse(operationPath) + if err != nil { + return nil, err + } + + req, err := http.NewRequest("GET", queryURL.String(), nil) + if err != nil { + return nil, err + } + + return req, nil +} + // NewQueryJobsRequest calls the generic QueryJobs builder with application/json body func NewQueryJobsRequest(server string, body QueryJobsJSONRequestBody) (*http.Request, error) { var bodyReader io.Reader @@ -1927,6 +1969,9 @@ type ClientWithResponsesInterface interface { SubmitJobWithResponse(ctx context.Context, body SubmitJobJSONRequestBody, reqEditors ...RequestEditorFn) (*SubmitJobResponse, error) + // FetchGlobalLastRenderedInfo request + FetchGlobalLastRenderedInfoWithResponse(ctx context.Context, reqEditors ...RequestEditorFn) (*FetchGlobalLastRenderedInfoResponse, error) + // QueryJobs request with any body QueryJobsWithBodyWithResponse(ctx context.Context, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*QueryJobsResponse, error) @@ -2082,6 +2127,28 @@ func (r SubmitJobResponse) StatusCode() int { return 0 } +type FetchGlobalLastRenderedInfoResponse struct { + Body []byte + HTTPResponse *http.Response + JSON200 *JobLastRenderedImageInfo +} + +// Status returns HTTPResponse.Status +func (r FetchGlobalLastRenderedInfoResponse) Status() string { + if r.HTTPResponse != nil { + return r.HTTPResponse.Status + } + return http.StatusText(0) +} + +// StatusCode returns HTTPResponse.StatusCode +func (r FetchGlobalLastRenderedInfoResponse) StatusCode() int { + if r.HTTPResponse != nil { + return r.HTTPResponse.StatusCode + } + return 0 +} + type QueryJobsResponse struct { Body []byte HTTPResponse *http.Response @@ -2765,6 +2832,15 @@ func (c *ClientWithResponses) SubmitJobWithResponse(ctx context.Context, body Su return ParseSubmitJobResponse(rsp) } +// FetchGlobalLastRenderedInfoWithResponse request returning *FetchGlobalLastRenderedInfoResponse +func (c *ClientWithResponses) FetchGlobalLastRenderedInfoWithResponse(ctx context.Context, reqEditors ...RequestEditorFn) (*FetchGlobalLastRenderedInfoResponse, error) { + rsp, err := c.FetchGlobalLastRenderedInfo(ctx, reqEditors...) + if err != nil { + return nil, err + } + return ParseFetchGlobalLastRenderedInfoResponse(rsp) +} + // QueryJobsWithBodyWithResponse request with arbitrary body returning *QueryJobsResponse func (c *ClientWithResponses) QueryJobsWithBodyWithResponse(ctx context.Context, contentType string, body io.Reader, reqEditors ...RequestEditorFn) (*QueryJobsResponse, error) { rsp, err := c.QueryJobsWithBody(ctx, contentType, body, reqEditors...) @@ -3173,6 +3249,32 @@ func ParseSubmitJobResponse(rsp *http.Response) (*SubmitJobResponse, error) { return response, nil } +// ParseFetchGlobalLastRenderedInfoResponse parses an HTTP response from a FetchGlobalLastRenderedInfoWithResponse call +func ParseFetchGlobalLastRenderedInfoResponse(rsp *http.Response) (*FetchGlobalLastRenderedInfoResponse, error) { + bodyBytes, err := ioutil.ReadAll(rsp.Body) + defer func() { _ = rsp.Body.Close() }() + if err != nil { + return nil, err + } + + response := &FetchGlobalLastRenderedInfoResponse{ + Body: bodyBytes, + HTTPResponse: rsp, + } + + switch { + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 200: + var dest JobLastRenderedImageInfo + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON200 = &dest + + } + + return response, nil +} + // ParseQueryJobsResponse parses an HTTP response from a QueryJobsWithResponse call func ParseQueryJobsResponse(rsp *http.Response) (*QueryJobsResponse, error) { bodyBytes, err := ioutil.ReadAll(rsp.Body) diff --git a/pkg/api/openapi_server.gen.go b/pkg/api/openapi_server.gen.go index c3819537..ff1e775a 100644 --- a/pkg/api/openapi_server.gen.go +++ b/pkg/api/openapi_server.gen.go @@ -19,6 +19,9 @@ type ServerInterface interface { // Submit a new job for Flamenco Manager to execute. // (POST /api/jobs) SubmitJob(ctx echo.Context) error + // Get the URL that serves the last-rendered images. + // (GET /api/jobs/last-rendered) + FetchGlobalLastRenderedInfo(ctx echo.Context) error // Fetch list of jobs. // (POST /api/jobs/query) QueryJobs(ctx echo.Context) error @@ -132,6 +135,15 @@ func (w *ServerInterfaceWrapper) SubmitJob(ctx echo.Context) error { return err } +// FetchGlobalLastRenderedInfo converts echo context to params. +func (w *ServerInterfaceWrapper) FetchGlobalLastRenderedInfo(ctx echo.Context) error { + var err error + + // Invoke the callback with all the unmarshalled arguments + err = w.Handler.FetchGlobalLastRenderedInfo(ctx) + return err +} + // QueryJobs converts echo context to params. func (w *ServerInterfaceWrapper) QueryJobs(ctx echo.Context) error { var err error @@ -609,6 +621,7 @@ func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL router.GET(baseURL+"/api/configuration", wrapper.GetConfiguration) router.POST(baseURL+"/api/jobs", wrapper.SubmitJob) + router.GET(baseURL+"/api/jobs/last-rendered", wrapper.FetchGlobalLastRenderedInfo) router.POST(baseURL+"/api/jobs/query", wrapper.QueryJobs) router.GET(baseURL+"/api/jobs/type/:typeName", wrapper.GetJobType) router.GET(baseURL+"/api/jobs/types", wrapper.GetJobTypes) diff --git a/pkg/api/openapi_spec.gen.go b/pkg/api/openapi_spec.gen.go index 206af998..697e5a95 100644 --- a/pkg/api/openapi_spec.gen.go +++ b/pkg/api/openapi_spec.gen.go @@ -18,152 +18,153 @@ import ( // Base64 encoded, gzipped, json marshaled Swagger object var swaggerSpec = []string{ - "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", - "upWZ3Nx4Ds8g1++v/38AAAD//9NI25umqQAA", + "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", + "0o91qwAA", } // 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 021844dc..28ad3ad2 100644 --- a/pkg/api/openapi_types.gen.go +++ b/pkg/api/openapi_types.gen.go @@ -93,6 +93,8 @@ const ( const ( SocketIOSubscriptionTypeAllJobs SocketIOSubscriptionType = "allJobs" + SocketIOSubscriptionTypeAllLastRendered SocketIOSubscriptionType = "allLastRendered" + SocketIOSubscriptionTypeAllWorkers SocketIOSubscriptionType = "allWorkers" SocketIOSubscriptionTypeJob SocketIOSubscriptionType = "job" diff --git a/web/app/src/manager-api/ApiClient.js b/web/app/src/manager-api/ApiClient.js index 9dae2ed2..d8c03b6a 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/cca81558 / webbrowser' + 'User-Agent': 'Flamenco/60f3f548 / webbrowser' }; /** diff --git a/web/app/src/manager-api/manager/JobsApi.js b/web/app/src/manager-api/manager/JobsApi.js index 2a9e500d..c57cb9a2 100644 --- a/web/app/src/manager-api/manager/JobsApi.js +++ b/web/app/src/manager-api/manager/JobsApi.js @@ -47,6 +47,45 @@ export default class JobsApi { + /** + * Get the URL that serves the last-rendered images. + * @return {Promise} a {@link https://www.promisejs.org/|Promise}, with an object containing data of type {@link module:model/JobLastRenderedImageInfo} and HTTP response + */ + fetchGlobalLastRenderedInfoWithHttpInfo() { + let postBody = null; + + let pathParams = { + }; + let queryParams = { + }; + let headerParams = { + }; + let formParams = { + }; + + let authNames = []; + let contentTypes = []; + let accepts = ['application/json']; + let returnType = JobLastRenderedImageInfo; + return this.apiClient.callApi( + '/api/jobs/last-rendered', 'GET', + pathParams, queryParams, headerParams, formParams, postBody, + authNames, contentTypes, accepts, returnType, null + ); + } + + /** + * Get the URL that serves the last-rendered images. + * @return {Promise} a {@link https://www.promisejs.org/|Promise}, with data of type {@link module:model/JobLastRenderedImageInfo} + */ + fetchGlobalLastRenderedInfo() { + return this.fetchGlobalLastRenderedInfoWithHttpInfo() + .then(function(response_and_data) { + return response_and_data.data; + }); + } + + /** * Fetch info about the job. * @param {String} jobId diff --git a/web/app/src/manager-api/model/SocketIOSubscriptionType.js b/web/app/src/manager-api/model/SocketIOSubscriptionType.js index f780061e..36656047 100644 --- a/web/app/src/manager-api/model/SocketIOSubscriptionType.js +++ b/web/app/src/manager-api/model/SocketIOSubscriptionType.js @@ -47,6 +47,13 @@ export default class SocketIOSubscriptionType { "tasklog" = "tasklog"; + /** + * value: "allLastRendered" + * @const + */ + "allLastRendered" = "allLastRendered"; + + /** * Returns a SocketIOSubscriptionType enum value from a Javascript object name.