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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",
+ "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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;
+