From 222d618ef6797f71964a213e91177ed274e6c820 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Tue, 3 May 2022 11:10:57 +0200 Subject: [PATCH] OAPI: generate code --- addon/flamenco/manager/__init__.py | 2 +- addon/flamenco/manager/api_client.py | 2 +- addon/flamenco/manager/configuration.py | 2 +- .../manager/docs/SocketIOTaskUpdate.md | 18 ++ .../manager/model/socket_io_task_update.py | 295 ++++++++++++++++++ addon/flamenco/manager/models/__init__.py | 1 + addon/flamenco/manager_README.md | 3 +- pkg/api/openapi_spec.gen.go | 221 ++++++------- pkg/api/openapi_types.gen.go | 15 + web/app/src/manager-api/ApiClient.js | 2 +- web/app/src/manager-api/index.js | 7 + .../manager-api/model/SocketIOTaskUpdate.js | 126 ++++++++ 12 files changed, 579 insertions(+), 115 deletions(-) create mode 100644 addon/flamenco/manager/docs/SocketIOTaskUpdate.md create mode 100644 addon/flamenco/manager/model/socket_io_task_update.py create mode 100644 web/app/src/manager-api/model/SocketIOTaskUpdate.js diff --git a/addon/flamenco/manager/__init__.py b/addon/flamenco/manager/__init__.py index 5fe97149..775e21f8 100644 --- a/addon/flamenco/manager/__init__.py +++ b/addon/flamenco/manager/__init__.py @@ -10,7 +10,7 @@ """ -__version__ = "24941142-dirty" +__version__ = "a3752f31" # 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 e6ce0d34..297aff0c 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/24941142-dirty (Blender add-on)' + self.user_agent = 'Flamenco/a3752f31 (Blender add-on)' def __enter__(self): return self diff --git a/addon/flamenco/manager/configuration.py b/addon/flamenco/manager/configuration.py index 92678623..9fff19cd 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: 24941142-dirty".\ + "SDK Package Version: a3752f31".\ format(env=sys.platform, pyversion=sys.version) def get_host_settings(self): diff --git a/addon/flamenco/manager/docs/SocketIOTaskUpdate.md b/addon/flamenco/manager/docs/SocketIOTaskUpdate.md new file mode 100644 index 00000000..065a7632 --- /dev/null +++ b/addon/flamenco/manager/docs/SocketIOTaskUpdate.md @@ -0,0 +1,18 @@ +# SocketIOTaskUpdate + +Subset of a Task, sent over SocketIO when a task changes. For new tasks, `previous_status` will be excluded. + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **str** | UUID of the Task | +**job_id** | **str** | | +**name** | **str** | Name of the task | +**updated** | **datetime** | Timestamp of last update | +**status** | [**TaskStatus**](TaskStatus.md) | | +**previous_status** | [**TaskStatus**](TaskStatus.md) | | [optional] +**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/socket_io_task_update.py b/addon/flamenco/manager/model/socket_io_task_update.py new file mode 100644 index 00000000..54bfa22b --- /dev/null +++ b/addon/flamenco/manager/model/socket_io_task_update.py @@ -0,0 +1,295 @@ +""" + 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 SocketIOTaskUpdate(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 { + 'id': (str,), # noqa: E501 + 'job_id': (str,), # noqa: E501 + 'name': (str,), # noqa: E501 + 'updated': (datetime,), # noqa: E501 + 'status': (TaskStatus,), # noqa: E501 + 'previous_status': (TaskStatus,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'id': 'id', # noqa: E501 + 'job_id': 'job_id', # noqa: E501 + 'name': 'name', # noqa: E501 + 'updated': 'updated', # noqa: E501 + 'status': 'status', # noqa: E501 + 'previous_status': 'previous_status', # noqa: E501 + } + + read_only_vars = { + } + + _composed_schemas = {} + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, id, job_id, name, updated, status, *args, **kwargs): # noqa: E501 + """SocketIOTaskUpdate - a model defined in OpenAPI + + Args: + id (str): UUID of the Task + job_id (str): + name (str): Name of the task + updated (datetime): Timestamp of last update + status (TaskStatus): + + 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,) + previous_status (TaskStatus): [optional] # noqa: E501 + """ + + _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.id = id + self.job_id = job_id + self.name = name + self.updated = updated + self.status = status + 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, id, job_id, name, updated, status, *args, **kwargs): # noqa: E501 + """SocketIOTaskUpdate - a model defined in OpenAPI + + Args: + id (str): UUID of the Task + job_id (str): + name (str): Name of the task + updated (datetime): Timestamp of last update + status (TaskStatus): + + 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,) + previous_status (TaskStatus): [optional] # noqa: E501 + """ + + _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.id = id + self.job_id = job_id + self.name = name + self.updated = updated + self.status = status + 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 9242c903..277bcf82 100644 --- a/addon/flamenco/manager/models/__init__.py +++ b/addon/flamenco/manager/models/__init__.py @@ -42,6 +42,7 @@ from flamenco.manager.model.shaman_single_file_status import ShamanSingleFileSta from flamenco.manager.model.socket_io_subscription import SocketIOSubscription from flamenco.manager.model.socket_io_subscription_operation import SocketIOSubscriptionOperation from flamenco.manager.model.socket_io_subscription_type import SocketIOSubscriptionType +from flamenco.manager.model.socket_io_task_update import SocketIOTaskUpdate from flamenco.manager.model.submitted_job import SubmittedJob from flamenco.manager.model.task_status import TaskStatus from flamenco.manager.model.task_summary import TaskSummary diff --git a/addon/flamenco/manager_README.md b/addon/flamenco/manager_README.md index ed0aefa4..9c09e6ef 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: 24941142-dirty +- Package version: a3752f31 - Build package: org.openapitools.codegen.languages.PythonClientCodegen For more information, please visit [https://flamenco.io/](https://flamenco.io/) @@ -126,6 +126,7 @@ Class | Method | HTTP request | Description - [SocketIOSubscription](flamenco/manager/docs/SocketIOSubscription.md) - [SocketIOSubscriptionOperation](flamenco/manager/docs/SocketIOSubscriptionOperation.md) - [SocketIOSubscriptionType](flamenco/manager/docs/SocketIOSubscriptionType.md) + - [SocketIOTaskUpdate](flamenco/manager/docs/SocketIOTaskUpdate.md) - [SubmittedJob](flamenco/manager/docs/SubmittedJob.md) - [TaskStatus](flamenco/manager/docs/TaskStatus.md) - [TaskSummary](flamenco/manager/docs/TaskSummary.md) diff --git a/pkg/api/openapi_spec.gen.go b/pkg/api/openapi_spec.gen.go index 9b6f6409..cbe97cdf 100644 --- a/pkg/api/openapi_spec.gen.go +++ b/pkg/api/openapi_spec.gen.go @@ -18,116 +18,117 @@ import ( // Base64 encoded, gzipped, json marshaled Swagger object var swaggerSpec = []string{ - "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", - "r8s3l/8TAAD//35BcIAGcgAA", + "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", + "TtOa39Pr6s3V/wQAAP//F69kymh0AAA=", } // 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 5e195e45..95345689 100644 --- a/pkg/api/openapi_types.gen.go +++ b/pkg/api/openapi_types.gen.go @@ -400,6 +400,21 @@ type SocketIOSubscriptionOperation string // What kind of thing to subscribe to / unsubscribe from. type SocketIOSubscriptionType string +// Subset of a Task, sent over SocketIO when a task changes. For new tasks, `previous_status` will be excluded. +type SocketIOTaskUpdate struct { + // UUID of the Task + Id string `json:"id"` + JobId string `json:"job_id"` + + // Name of the task + Name string `json:"name"` + PreviousStatus *TaskStatus `json:"previous_status,omitempty"` + Status TaskStatus `json:"status"` + + // Timestamp of last update + Updated time.Time `json:"updated"` +} + // Job definition submitted to Flamenco. type SubmittedJob struct { // Arbitrary metadata strings. More complex structures can be modeled by using `a.b.c` notation for the key. diff --git a/web/app/src/manager-api/ApiClient.js b/web/app/src/manager-api/ApiClient.js index 32132122..0cd4f3ff 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/24941142-dirty / webbrowser' + 'User-Agent': 'Flamenco/a3752f31 / webbrowser' }; /** diff --git a/web/app/src/manager-api/index.js b/web/app/src/manager-api/index.js index aed0d18b..9ba5a4f3 100644 --- a/web/app/src/manager-api/index.js +++ b/web/app/src/manager-api/index.js @@ -44,6 +44,7 @@ import ShamanSingleFileStatus from './model/ShamanSingleFileStatus'; import SocketIOSubscription from './model/SocketIOSubscription'; import SocketIOSubscriptionOperation from './model/SocketIOSubscriptionOperation'; import SocketIOSubscriptionType from './model/SocketIOSubscriptionType'; +import SocketIOTaskUpdate from './model/SocketIOTaskUpdate'; import SubmittedJob from './model/SubmittedJob'; import TaskStatus from './model/TaskStatus'; import TaskSummary from './model/TaskSummary'; @@ -283,6 +284,12 @@ export { */ SocketIOSubscriptionType, + /** + * The SocketIOTaskUpdate model constructor. + * @property {module:model/SocketIOTaskUpdate} + */ + SocketIOTaskUpdate, + /** * The SubmittedJob model constructor. * @property {module:model/SubmittedJob} diff --git a/web/app/src/manager-api/model/SocketIOTaskUpdate.js b/web/app/src/manager-api/model/SocketIOTaskUpdate.js new file mode 100644 index 00000000..25638f1c --- /dev/null +++ b/web/app/src/manager-api/model/SocketIOTaskUpdate.js @@ -0,0 +1,126 @@ +/** + * 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 SocketIOTaskUpdate model module. + * @module model/SocketIOTaskUpdate + * @version 0.0.0 + */ +class SocketIOTaskUpdate { + /** + * Constructs a new SocketIOTaskUpdate. + * Subset of a Task, sent over SocketIO when a task changes. For new tasks, `previous_status` will be excluded. + * @alias module:model/SocketIOTaskUpdate + * @param id {String} UUID of the Task + * @param jobId {String} + * @param name {String} Name of the task + * @param updated {Date} Timestamp of last update + * @param status {module:model/TaskStatus} + */ + constructor(id, jobId, name, updated, status) { + + SocketIOTaskUpdate.initialize(this, id, jobId, name, updated, status); + } + + /** + * 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, id, jobId, name, updated, status) { + obj['id'] = id; + obj['job_id'] = jobId; + obj['name'] = name; + obj['updated'] = updated; + obj['status'] = status; + } + + /** + * Constructs a SocketIOTaskUpdate 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/SocketIOTaskUpdate} obj Optional instance to populate. + * @return {module:model/SocketIOTaskUpdate} The populated SocketIOTaskUpdate instance. + */ + static constructFromObject(data, obj) { + if (data) { + obj = obj || new SocketIOTaskUpdate(); + + if (data.hasOwnProperty('id')) { + obj['id'] = ApiClient.convertToType(data['id'], 'String'); + } + if (data.hasOwnProperty('job_id')) { + obj['job_id'] = ApiClient.convertToType(data['job_id'], 'String'); + } + if (data.hasOwnProperty('name')) { + obj['name'] = ApiClient.convertToType(data['name'], 'String'); + } + if (data.hasOwnProperty('updated')) { + obj['updated'] = ApiClient.convertToType(data['updated'], 'Date'); + } + if (data.hasOwnProperty('status')) { + obj['status'] = TaskStatus.constructFromObject(data['status']); + } + if (data.hasOwnProperty('previous_status')) { + obj['previous_status'] = TaskStatus.constructFromObject(data['previous_status']); + } + } + return obj; + } + + +} + +/** + * UUID of the Task + * @member {String} id + */ +SocketIOTaskUpdate.prototype['id'] = undefined; + +/** + * @member {String} job_id + */ +SocketIOTaskUpdate.prototype['job_id'] = undefined; + +/** + * Name of the task + * @member {String} name + */ +SocketIOTaskUpdate.prototype['name'] = undefined; + +/** + * Timestamp of last update + * @member {Date} updated + */ +SocketIOTaskUpdate.prototype['updated'] = undefined; + +/** + * @member {module:model/TaskStatus} status + */ +SocketIOTaskUpdate.prototype['status'] = undefined; + +/** + * @member {module:model/TaskStatus} previous_status + */ +SocketIOTaskUpdate.prototype['previous_status'] = undefined; + + + + + + +export default SocketIOTaskUpdate; +