diff --git a/addon/flamenco/manager/__init__.py b/addon/flamenco/manager/__init__.py index 343d9f7a..d5dc34b4 100644 --- a/addon/flamenco/manager/__init__.py +++ b/addon/flamenco/manager/__init__.py @@ -10,7 +10,7 @@ """ -__version__ = "b535dfed" +__version__ = "a32261e1" # 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 c3280e4e..0d4a2df8 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/b535dfed (Blender add-on)' + self.user_agent = 'Flamenco/a32261e1 (Blender add-on)' def __enter__(self): return self diff --git a/addon/flamenco/manager/configuration.py b/addon/flamenco/manager/configuration.py index 5b7e31c3..08520d2c 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: b535dfed".\ + "SDK Package Version: a32261e1".\ format(env=sys.platform, pyversion=sys.version) def get_host_settings(self): diff --git a/addon/flamenco/manager/docs/SocketIOSubscriptionType.md b/addon/flamenco/manager/docs/SocketIOSubscriptionType.md index 7d77b87c..49cabcd9 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. | defaults to "job", must be one of ["job", ] +**value** | **str** | What kind of thing to subscribe to / unsubscribe from. | must be one of ["job", "tasklog", ] [[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/docs/SocketIOTaskLogUpdate.md b/addon/flamenco/manager/docs/SocketIOTaskLogUpdate.md new file mode 100644 index 00000000..aa60a320 --- /dev/null +++ b/addon/flamenco/manager/docs/SocketIOTaskLogUpdate.md @@ -0,0 +1,14 @@ +# SocketIOTaskLogUpdate + +Task log chunk, sent to a SocketIO room dedicated to a single task, to avoid sending too many updates. + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**task_id** | **str** | UUID of the Task | +**log** | **str** | Chunk of the task log. May contain multiple lines of text. | +**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_subscription_type.py b/addon/flamenco/manager/model/socket_io_subscription_type.py index e7986611..b11c3902 100644 --- a/addon/flamenco/manager/model/socket_io_subscription_type.py +++ b/addon/flamenco/manager/model/socket_io_subscription_type.py @@ -53,6 +53,7 @@ class SocketIOSubscriptionType(ModelSimple): allowed_values = { ('value',): { 'JOB': "job", + 'TASKLOG': "tasklog", }, } @@ -104,10 +105,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.. if omitted defaults to "job", must be one of ["job", ] # noqa: E501 + args[0] (str): What kind of thing to subscribe to / unsubscribe from.., must be one of ["job", "tasklog", ] # noqa: E501 Keyword Args: - value (str): What kind of thing to subscribe to / unsubscribe from.. if omitted defaults to "job", must be one of ["job", ] # noqa: E501 + value (str): What kind of thing to subscribe to / unsubscribe from.., must be one of ["job", "tasklog", ] # 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. @@ -148,7 +149,11 @@ class SocketIOSubscriptionType(ModelSimple): args = list(args) value = args.pop(0) else: - value = "job" + raise ApiTypeError( + "value is required, but not passed in args or kwargs and doesn't have default", + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) _check_type = kwargs.pop('_check_type', True) _spec_property_naming = kwargs.pop('_spec_property_naming', False) @@ -190,10 +195,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.. if omitted defaults to "job", must be one of ["job", ] # noqa: E501 + args[0] (str): What kind of thing to subscribe to / unsubscribe from.., must be one of ["job", "tasklog", ] # noqa: E501 Keyword Args: - value (str): What kind of thing to subscribe to / unsubscribe from.. if omitted defaults to "job", must be one of ["job", ] # noqa: E501 + value (str): What kind of thing to subscribe to / unsubscribe from.., must be one of ["job", "tasklog", ] # 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. @@ -236,7 +241,11 @@ class SocketIOSubscriptionType(ModelSimple): args = list(args) value = args.pop(0) else: - value = "job" + raise ApiTypeError( + "value is required, but not passed in args or kwargs and doesn't have default", + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) _check_type = kwargs.pop('_check_type', True) _spec_property_naming = kwargs.pop('_spec_property_naming', False) diff --git a/addon/flamenco/manager/model/socket_io_task_log_update.py b/addon/flamenco/manager/model/socket_io_task_log_update.py new file mode 100644 index 00000000..cd95908b --- /dev/null +++ b/addon/flamenco/manager/model/socket_io_task_log_update.py @@ -0,0 +1,267 @@ +""" + 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 + + + +class SocketIOTaskLogUpdate(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 + """ + 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. + """ + return { + 'task_id': (str,), # noqa: E501 + 'log': (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'task_id': 'task_id', # noqa: E501 + 'log': 'log', # noqa: E501 + } + + read_only_vars = { + } + + _composed_schemas = {} + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, task_id, log, *args, **kwargs): # noqa: E501 + """SocketIOTaskLogUpdate - a model defined in OpenAPI + + Args: + task_id (str): UUID of the Task + log (str): Chunk of the task log. May contain multiple lines of text. + + 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.task_id = task_id + self.log = log + 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, task_id, log, *args, **kwargs): # noqa: E501 + """SocketIOTaskLogUpdate - a model defined in OpenAPI + + Args: + task_id (str): UUID of the Task + log (str): Chunk of the task log. May contain multiple lines of text. + + 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.task_id = task_id + self.log = log + 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 720dd7d1..1ccb7a85 100644 --- a/addon/flamenco/manager/models/__init__.py +++ b/addon/flamenco/manager/models/__init__.py @@ -44,6 +44,7 @@ from flamenco.manager.model.socket_io_job_update import SocketIOJobUpdate 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_log_update import SocketIOTaskLogUpdate 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 diff --git a/addon/flamenco/manager_README.md b/addon/flamenco/manager_README.md index 8bf21c54..882d38f5 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: b535dfed +- Package version: a32261e1 - Build package: org.openapitools.codegen.languages.PythonClientCodegen For more information, please visit [https://flamenco.io/](https://flamenco.io/) @@ -133,6 +133,7 @@ Class | Method | HTTP request | Description - [SocketIOSubscription](flamenco/manager/docs/SocketIOSubscription.md) - [SocketIOSubscriptionOperation](flamenco/manager/docs/SocketIOSubscriptionOperation.md) - [SocketIOSubscriptionType](flamenco/manager/docs/SocketIOSubscriptionType.md) + - [SocketIOTaskLogUpdate](flamenco/manager/docs/SocketIOTaskLogUpdate.md) - [SocketIOTaskUpdate](flamenco/manager/docs/SocketIOTaskUpdate.md) - [SubmittedJob](flamenco/manager/docs/SubmittedJob.md) - [Task](flamenco/manager/docs/Task.md) diff --git a/pkg/api/openapi_spec.gen.go b/pkg/api/openapi_spec.gen.go index 557a2758..81ad9f83 100644 --- a/pkg/api/openapi_spec.gen.go +++ b/pkg/api/openapi_spec.gen.go @@ -18,128 +18,130 @@ import ( // Base64 encoded, gzipped, json marshaled Swagger object var swaggerSpec = []string{ - "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", + "+98AAAD//7kw6+xfhwAA", } // 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 98602782..96a01bae 100644 --- a/pkg/api/openapi_types.gen.go +++ b/pkg/api/openapi_types.gen.go @@ -92,6 +92,8 @@ const ( // Defines values for SocketIOSubscriptionType. const ( SocketIOSubscriptionTypeJob SocketIOSubscriptionType = "job" + + SocketIOSubscriptionTypeTasklog SocketIOSubscriptionType = "tasklog" ) // Defines values for TaskStatus. @@ -420,6 +422,15 @@ type SocketIOSubscriptionOperation string // What kind of thing to subscribe to / unsubscribe from. type SocketIOSubscriptionType string +// Task log chunk, sent to a SocketIO room dedicated to a single task, to avoid sending too many updates. +type SocketIOTaskLogUpdate struct { + // Chunk of the task log. May contain multiple lines of text. + Log string `json:"log"` + + // UUID of the Task + TaskId string `json:"task_id"` +} + // Subset of a Task, sent over SocketIO when a task changes. For new tasks, `previous_status` will be excluded. type SocketIOTaskUpdate struct { Activity string `json:"activity"` diff --git a/web/app/src/manager-api/ApiClient.js b/web/app/src/manager-api/ApiClient.js index c2a3dd7e..4f27f1cb 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/b535dfed / webbrowser' + 'User-Agent': 'Flamenco/a32261e1 / webbrowser' }; /** diff --git a/web/app/src/manager-api/index.js b/web/app/src/manager-api/index.js index a13244f0..0246b5f2 100644 --- a/web/app/src/manager-api/index.js +++ b/web/app/src/manager-api/index.js @@ -46,6 +46,7 @@ import SocketIOJobUpdate from './model/SocketIOJobUpdate'; import SocketIOSubscription from './model/SocketIOSubscription'; import SocketIOSubscriptionOperation from './model/SocketIOSubscriptionOperation'; import SocketIOSubscriptionType from './model/SocketIOSubscriptionType'; +import SocketIOTaskLogUpdate from './model/SocketIOTaskLogUpdate'; import SocketIOTaskUpdate from './model/SocketIOTaskUpdate'; import SubmittedJob from './model/SubmittedJob'; import Task from './model/Task'; @@ -301,6 +302,12 @@ export { */ SocketIOSubscriptionType, + /** + * The SocketIOTaskLogUpdate model constructor. + * @property {module:model/SocketIOTaskLogUpdate} + */ + SocketIOTaskLogUpdate, + /** * The SocketIOTaskUpdate model constructor. * @property {module:model/SocketIOTaskUpdate} diff --git a/web/app/src/manager-api/model/SocketIOSubscriptionType.js b/web/app/src/manager-api/model/SocketIOSubscriptionType.js index b3f2b536..31bdfa9e 100644 --- a/web/app/src/manager-api/model/SocketIOSubscriptionType.js +++ b/web/app/src/manager-api/model/SocketIOSubscriptionType.js @@ -26,6 +26,13 @@ export default class SocketIOSubscriptionType { "job" = "job"; + /** + * value: "tasklog" + * @const + */ + "tasklog" = "tasklog"; + + /** * Returns a SocketIOSubscriptionType enum value from a Javascript object name. diff --git a/web/app/src/manager-api/model/SocketIOTaskLogUpdate.js b/web/app/src/manager-api/model/SocketIOTaskLogUpdate.js new file mode 100644 index 00000000..457d405c --- /dev/null +++ b/web/app/src/manager-api/model/SocketIOTaskLogUpdate.js @@ -0,0 +1,86 @@ +/** + * 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'; + +/** + * The SocketIOTaskLogUpdate model module. + * @module model/SocketIOTaskLogUpdate + * @version 0.0.0 + */ +class SocketIOTaskLogUpdate { + /** + * Constructs a new SocketIOTaskLogUpdate. + * Task log chunk, sent to a SocketIO room dedicated to a single task, to avoid sending too many updates. + * @alias module:model/SocketIOTaskLogUpdate + * @param taskId {String} UUID of the Task + * @param log {String} Chunk of the task log. May contain multiple lines of text. + */ + constructor(taskId, log) { + + SocketIOTaskLogUpdate.initialize(this, taskId, log); + } + + /** + * 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, taskId, log) { + obj['task_id'] = taskId; + obj['log'] = log; + } + + /** + * Constructs a SocketIOTaskLogUpdate 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/SocketIOTaskLogUpdate} obj Optional instance to populate. + * @return {module:model/SocketIOTaskLogUpdate} The populated SocketIOTaskLogUpdate instance. + */ + static constructFromObject(data, obj) { + if (data) { + obj = obj || new SocketIOTaskLogUpdate(); + + if (data.hasOwnProperty('task_id')) { + obj['task_id'] = ApiClient.convertToType(data['task_id'], 'String'); + } + if (data.hasOwnProperty('log')) { + obj['log'] = ApiClient.convertToType(data['log'], 'String'); + } + } + return obj; + } + + +} + +/** + * UUID of the Task + * @member {String} task_id + */ +SocketIOTaskLogUpdate.prototype['task_id'] = undefined; + +/** + * Chunk of the task log. May contain multiple lines of text. + * @member {String} log + */ +SocketIOTaskLogUpdate.prototype['log'] = undefined; + + + + + + +export default SocketIOTaskLogUpdate; +