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