diff --git a/addon/flamenco/manager/__init__.py b/addon/flamenco/manager/__init__.py
index 594f4d2e..6f7791e8 100644
--- a/addon/flamenco/manager/__init__.py
+++ b/addon/flamenco/manager/__init__.py
@@ -10,7 +10,7 @@
"""
-__version__ = "ccea8869"
+__version__ = "8607827c"
# 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 9d5e817c..0cadc392 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/ccea8869 (Blender add-on)'
+ self.user_agent = 'Flamenco/8607827c (Blender add-on)'
def __enter__(self):
return self
diff --git a/addon/flamenco/manager/configuration.py b/addon/flamenco/manager/configuration.py
index 7b2aff2f..ae5a34fd 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: ccea8869".\
+ "SDK Package Version: 8607827c".\
format(env=sys.platform, pyversion=sys.version)
def get_host_settings(self):
diff --git a/addon/flamenco/manager/docs/SocketIOWorkerUpdate.md b/addon/flamenco/manager/docs/SocketIOWorkerUpdate.md
new file mode 100644
index 00000000..4ba2da12
--- /dev/null
+++ b/addon/flamenco/manager/docs/SocketIOWorkerUpdate.md
@@ -0,0 +1,19 @@
+# SocketIOWorkerUpdate
+
+Subset of a Worker, sent over SocketIO when a worker changes. For new workers, `previous_status` will be excluded.
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**id** | **str** | UUID of the Worker |
+**nickname** | **str** | Name of the worker |
+**updated** | **datetime** | Timestamp of last update |
+**status** | [**WorkerStatus**](WorkerStatus.md) | |
+**version** | **str** | |
+**previous_status** | [**WorkerStatus**](WorkerStatus.md) | | [optional]
+**status_requested** | [**WorkerStatus**](WorkerStatus.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_worker_update.py b/addon/flamenco/manager/model/socket_io_worker_update.py
new file mode 100644
index 00000000..afa56452
--- /dev/null
+++ b/addon/flamenco/manager/model/socket_io_worker_update.py
@@ -0,0 +1,299 @@
+"""
+ 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.worker_status import WorkerStatus
+ globals()['WorkerStatus'] = WorkerStatus
+
+
+class SocketIOWorkerUpdate(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
+ 'nickname': (str,), # noqa: E501
+ 'updated': (datetime,), # noqa: E501
+ 'status': (WorkerStatus,), # noqa: E501
+ 'version': (str,), # noqa: E501
+ 'previous_status': (WorkerStatus,), # noqa: E501
+ 'status_requested': (WorkerStatus,), # noqa: E501
+ }
+
+ @cached_property
+ def discriminator():
+ return None
+
+
+ attribute_map = {
+ 'id': 'id', # noqa: E501
+ 'nickname': 'nickname', # noqa: E501
+ 'updated': 'updated', # noqa: E501
+ 'status': 'status', # noqa: E501
+ 'version': 'version', # noqa: E501
+ 'previous_status': 'previous_status', # noqa: E501
+ 'status_requested': 'status_requested', # noqa: E501
+ }
+
+ read_only_vars = {
+ }
+
+ _composed_schemas = {}
+
+ @classmethod
+ @convert_js_args_to_python_args
+ def _from_openapi_data(cls, id, nickname, updated, status, version, *args, **kwargs): # noqa: E501
+ """SocketIOWorkerUpdate - a model defined in OpenAPI
+
+ Args:
+ id (str): UUID of the Worker
+ nickname (str): Name of the worker
+ updated (datetime): Timestamp of last update
+ status (WorkerStatus):
+ version (str):
+
+ 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 (WorkerStatus): [optional] # noqa: E501
+ status_requested (WorkerStatus): [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.nickname = nickname
+ self.updated = updated
+ self.status = status
+ self.version = version
+ 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, nickname, updated, status, version, *args, **kwargs): # noqa: E501
+ """SocketIOWorkerUpdate - a model defined in OpenAPI
+
+ Args:
+ id (str): UUID of the Worker
+ nickname (str): Name of the worker
+ updated (datetime): Timestamp of last update
+ status (WorkerStatus):
+ version (str):
+
+ 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 (WorkerStatus): [optional] # noqa: E501
+ status_requested (WorkerStatus): [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.nickname = nickname
+ self.updated = updated
+ self.status = status
+ self.version = version
+ 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 6db3db68..5e1e49e9 100644
--- a/addon/flamenco/manager/models/__init__.py
+++ b/addon/flamenco/manager/models/__init__.py
@@ -46,6 +46,7 @@ from flamenco.manager.model.socket_io_subscription_operation import SocketIOSubs
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.socket_io_worker_update import SocketIOWorkerUpdate
from flamenco.manager.model.submitted_job import SubmittedJob
from flamenco.manager.model.task import Task
from flamenco.manager.model.task_status import TaskStatus
diff --git a/addon/flamenco/manager_README.md b/addon/flamenco/manager_README.md
index f1b4059c..8539271f 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: ccea8869
+- Package version: 8607827c
- Build package: org.openapitools.codegen.languages.PythonClientCodegen
For more information, please visit [https://flamenco.io/](https://flamenco.io/)
@@ -138,6 +138,7 @@ Class | Method | HTTP request | Description
- [SocketIOSubscriptionType](flamenco/manager/docs/SocketIOSubscriptionType.md)
- [SocketIOTaskLogUpdate](flamenco/manager/docs/SocketIOTaskLogUpdate.md)
- [SocketIOTaskUpdate](flamenco/manager/docs/SocketIOTaskUpdate.md)
+ - [SocketIOWorkerUpdate](flamenco/manager/docs/SocketIOWorkerUpdate.md)
- [SubmittedJob](flamenco/manager/docs/SubmittedJob.md)
- [Task](flamenco/manager/docs/Task.md)
- [TaskStatus](flamenco/manager/docs/TaskStatus.md)
diff --git a/pkg/api/openapi_spec.gen.go b/pkg/api/openapi_spec.gen.go
index c463bda9..cf81364d 100644
--- a/pkg/api/openapi_spec.gen.go
+++ b/pkg/api/openapi_spec.gen.go
@@ -18,135 +18,137 @@ import (
// Base64 encoded, gzipped, json marshaled Swagger object
var swaggerSpec = []string{
- "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",
+ "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",
+ "AAA=",
}
// 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 5780def6..4fcfc4e3 100644
--- a/pkg/api/openapi_types.gen.go
+++ b/pkg/api/openapi_types.gen.go
@@ -447,6 +447,22 @@ type SocketIOTaskUpdate struct {
Updated time.Time `json:"updated"`
}
+// Subset of a Worker, sent over SocketIO when a worker changes. For new workers, `previous_status` will be excluded.
+type SocketIOWorkerUpdate struct {
+ // UUID of the Worker
+ Id string `json:"id"`
+
+ // Name of the worker
+ Nickname string `json:"nickname"`
+ PreviousStatus *WorkerStatus `json:"previous_status,omitempty"`
+ Status WorkerStatus `json:"status"`
+ StatusRequested *WorkerStatus `json:"status_requested,omitempty"`
+
+ // Timestamp of last update
+ Updated time.Time `json:"updated"`
+ Version string `json:"version"`
+}
+
// 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 bbab3fc5..9070e707 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/ccea8869 / webbrowser'
+ 'User-Agent': 'Flamenco/8607827c / webbrowser'
};
/**
diff --git a/web/app/src/manager-api/index.js b/web/app/src/manager-api/index.js
index d058074f..2e9e21f0 100644
--- a/web/app/src/manager-api/index.js
+++ b/web/app/src/manager-api/index.js
@@ -48,6 +48,7 @@ import SocketIOSubscriptionOperation from './model/SocketIOSubscriptionOperation
import SocketIOSubscriptionType from './model/SocketIOSubscriptionType';
import SocketIOTaskLogUpdate from './model/SocketIOTaskLogUpdate';
import SocketIOTaskUpdate from './model/SocketIOTaskUpdate';
+import SocketIOWorkerUpdate from './model/SocketIOWorkerUpdate';
import SubmittedJob from './model/SubmittedJob';
import Task from './model/Task';
import TaskStatus from './model/TaskStatus';
@@ -318,6 +319,12 @@ export {
*/
SocketIOTaskUpdate,
+ /**
+ * The SocketIOWorkerUpdate model constructor.
+ * @property {module:model/SocketIOWorkerUpdate}
+ */
+ SocketIOWorkerUpdate,
+
/**
* The SubmittedJob model constructor.
* @property {module:model/SubmittedJob}
diff --git a/web/app/src/manager-api/model/SocketIOWorkerUpdate.js b/web/app/src/manager-api/model/SocketIOWorkerUpdate.js
new file mode 100644
index 00000000..350e7936
--- /dev/null
+++ b/web/app/src/manager-api/model/SocketIOWorkerUpdate.js
@@ -0,0 +1,134 @@
+/**
+ * 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 WorkerStatus from './WorkerStatus';
+
+/**
+ * The SocketIOWorkerUpdate model module.
+ * @module model/SocketIOWorkerUpdate
+ * @version 0.0.0
+ */
+class SocketIOWorkerUpdate {
+ /**
+ * Constructs a new SocketIOWorkerUpdate
.
+ * Subset of a Worker, sent over SocketIO when a worker changes. For new workers, `previous_status` will be excluded.
+ * @alias module:model/SocketIOWorkerUpdate
+ * @param id {String} UUID of the Worker
+ * @param nickname {String} Name of the worker
+ * @param updated {Date} Timestamp of last update
+ * @param status {module:model/WorkerStatus}
+ * @param version {String}
+ */
+ constructor(id, nickname, updated, status, version) {
+
+ SocketIOWorkerUpdate.initialize(this, id, nickname, updated, status, version);
+ }
+
+ /**
+ * 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, nickname, updated, status, version) {
+ obj['id'] = id;
+ obj['nickname'] = nickname;
+ obj['updated'] = updated;
+ obj['status'] = status;
+ obj['version'] = version;
+ }
+
+ /**
+ * Constructs a SocketIOWorkerUpdate
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/SocketIOWorkerUpdate} obj Optional instance to populate.
+ * @return {module:model/SocketIOWorkerUpdate} The populated SocketIOWorkerUpdate
instance.
+ */
+ static constructFromObject(data, obj) {
+ if (data) {
+ obj = obj || new SocketIOWorkerUpdate();
+
+ if (data.hasOwnProperty('id')) {
+ obj['id'] = ApiClient.convertToType(data['id'], 'String');
+ }
+ if (data.hasOwnProperty('nickname')) {
+ obj['nickname'] = ApiClient.convertToType(data['nickname'], 'String');
+ }
+ if (data.hasOwnProperty('updated')) {
+ obj['updated'] = ApiClient.convertToType(data['updated'], 'Date');
+ }
+ if (data.hasOwnProperty('status')) {
+ obj['status'] = WorkerStatus.constructFromObject(data['status']);
+ }
+ if (data.hasOwnProperty('previous_status')) {
+ obj['previous_status'] = WorkerStatus.constructFromObject(data['previous_status']);
+ }
+ if (data.hasOwnProperty('status_requested')) {
+ obj['status_requested'] = WorkerStatus.constructFromObject(data['status_requested']);
+ }
+ if (data.hasOwnProperty('version')) {
+ obj['version'] = ApiClient.convertToType(data['version'], 'String');
+ }
+ }
+ return obj;
+ }
+
+
+}
+
+/**
+ * UUID of the Worker
+ * @member {String} id
+ */
+SocketIOWorkerUpdate.prototype['id'] = undefined;
+
+/**
+ * Name of the worker
+ * @member {String} nickname
+ */
+SocketIOWorkerUpdate.prototype['nickname'] = undefined;
+
+/**
+ * Timestamp of last update
+ * @member {Date} updated
+ */
+SocketIOWorkerUpdate.prototype['updated'] = undefined;
+
+/**
+ * @member {module:model/WorkerStatus} status
+ */
+SocketIOWorkerUpdate.prototype['status'] = undefined;
+
+/**
+ * @member {module:model/WorkerStatus} previous_status
+ */
+SocketIOWorkerUpdate.prototype['previous_status'] = undefined;
+
+/**
+ * @member {module:model/WorkerStatus} status_requested
+ */
+SocketIOWorkerUpdate.prototype['status_requested'] = undefined;
+
+/**
+ * @member {String} version
+ */
+SocketIOWorkerUpdate.prototype['version'] = undefined;
+
+
+
+
+
+
+export default SocketIOWorkerUpdate;
+