diff --git a/addon/flamenco/manager/docs/EventLifeCycle.md b/addon/flamenco/manager/docs/EventLifeCycle.md new file mode 100644 index 00000000..e95f864a --- /dev/null +++ b/addon/flamenco/manager/docs/EventLifeCycle.md @@ -0,0 +1,13 @@ +# EventLifeCycle + +Flamenco life-cycle event, for things like shutting down, starting up, etc. + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**type** | [**LifeCycleEventType**](LifeCycleEventType.md) | | +**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/docs/LifeCycleEventType.md b/addon/flamenco/manager/docs/LifeCycleEventType.md new file mode 100644 index 00000000..a9cbe4bc --- /dev/null +++ b/addon/flamenco/manager/docs/LifeCycleEventType.md @@ -0,0 +1,11 @@ +# LifeCycleEventType + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**value** | **str** | | must be one of ["manager-startup", "manager-shutdown", ] + +[[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/event_life_cycle.py b/addon/flamenco/manager/model/event_life_cycle.py new file mode 100644 index 00000000..91068547 --- /dev/null +++ b/addon/flamenco/manager/model/event_life_cycle.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 + + +def lazy_import(): + from flamenco.manager.model.life_cycle_event_type import LifeCycleEventType + globals()['LifeCycleEventType'] = LifeCycleEventType + + +class EventLifeCycle(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 { + 'type': (LifeCycleEventType,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'type': 'type', # noqa: E501 + } + + read_only_vars = { + } + + _composed_schemas = {} + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, type, *args, **kwargs): # noqa: E501 + """EventLifeCycle - a model defined in OpenAPI + + Args: + type (LifeCycleEventType): + + 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.type = type + 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, type, *args, **kwargs): # noqa: E501 + """EventLifeCycle - a model defined in OpenAPI + + Args: + type (LifeCycleEventType): + + 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.type = type + 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/model/life_cycle_event_type.py b/addon/flamenco/manager/model/life_cycle_event_type.py new file mode 100644 index 00000000..90b6e572 --- /dev/null +++ b/addon/flamenco/manager/model/life_cycle_event_type.py @@ -0,0 +1,282 @@ +""" + 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 LifeCycleEventType(ModelSimple): + """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. + 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 = { + ('value',): { + 'STARTUP': "manager-startup", + 'SHUTDOWN': "manager-shutdown", + }, + } + + validations = { + } + + additional_properties_type = None + + _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 { + 'value': (str,), + } + + @cached_property + def discriminator(): + return None + + + attribute_map = {} + + read_only_vars = set() + + _composed_schemas = None + + 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, *args, **kwargs): + """LifeCycleEventType - a model defined in OpenAPI + + Note that value can be passed either in args or in kwargs, but not in both. + + Args: + args[0] (str):, must be one of ["manager-startup", "manager-shutdown", ] # noqa: E501 + + Keyword Args: + value (str):, must be one of ["manager-startup", "manager-shutdown", ] # 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. + 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,) + """ + # required up here when default value is not given + _path_to_item = kwargs.pop('_path_to_item', ()) + + if 'value' in kwargs: + value = kwargs.pop('value') + elif args: + args = list(args) + value = args.pop(0) + else: + 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) + _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.value = value + if kwargs: + raise ApiTypeError( + "Invalid named arguments=%s passed to %s. Remove those invalid named arguments." % ( + kwargs, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): + """LifeCycleEventType - a model defined in OpenAPI + + Note that value can be passed either in args or in kwargs, but not in both. + + Args: + args[0] (str):, must be one of ["manager-startup", "manager-shutdown", ] # noqa: E501 + + Keyword Args: + value (str):, must be one of ["manager-startup", "manager-shutdown", ] # 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. + 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,) + """ + # required up here when default value is not given + _path_to_item = kwargs.pop('_path_to_item', ()) + + self = super(OpenApiModel, cls).__new__(cls) + + if 'value' in kwargs: + value = kwargs.pop('value') + elif args: + args = list(args) + value = args.pop(0) + else: + 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) + _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.value = value + if kwargs: + raise ApiTypeError( + "Invalid named arguments=%s passed to %s. Remove those invalid named arguments." % ( + kwargs, + self.__class__.__name__, + ), + path_to_item=_path_to_item, + valid_classes=(self.__class__,), + ) + + return self diff --git a/addon/flamenco/manager/models/__init__.py b/addon/flamenco/manager/models/__init__.py index ed68bc2e..b2675225 100644 --- a/addon/flamenco/manager/models/__init__.py +++ b/addon/flamenco/manager/models/__init__.py @@ -24,6 +24,7 @@ from flamenco.manager.model.command import Command from flamenco.manager.model.error import Error from flamenco.manager.model.event_job_update import EventJobUpdate from flamenco.manager.model.event_last_rendered_update import EventLastRenderedUpdate +from flamenco.manager.model.event_life_cycle import EventLifeCycle from flamenco.manager.model.event_task_log_update import EventTaskLogUpdate from flamenco.manager.model.event_task_update import EventTaskUpdate from flamenco.manager.model.event_worker_tag_update import EventWorkerTagUpdate @@ -45,6 +46,7 @@ from flamenco.manager.model.job_storage_info import JobStorageInfo from flamenco.manager.model.job_tasks_summary import JobTasksSummary from flamenco.manager.model.jobs_query import JobsQuery from flamenco.manager.model.jobs_query_result import JobsQueryResult +from flamenco.manager.model.life_cycle_event_type import LifeCycleEventType from flamenco.manager.model.manager_configuration import ManagerConfiguration from flamenco.manager.model.manager_variable import ManagerVariable from flamenco.manager.model.manager_variable_audience import ManagerVariableAudience diff --git a/addon/flamenco/manager_README.md b/addon/flamenco/manager_README.md index f611473b..a301cf12 100644 --- a/addon/flamenco/manager_README.md +++ b/addon/flamenco/manager_README.md @@ -149,6 +149,7 @@ Class | Method | HTTP request | Description - [Error](flamenco/manager/docs/Error.md) - [EventJobUpdate](flamenco/manager/docs/EventJobUpdate.md) - [EventLastRenderedUpdate](flamenco/manager/docs/EventLastRenderedUpdate.md) + - [EventLifeCycle](flamenco/manager/docs/EventLifeCycle.md) - [EventTaskLogUpdate](flamenco/manager/docs/EventTaskLogUpdate.md) - [EventTaskUpdate](flamenco/manager/docs/EventTaskUpdate.md) - [EventWorkerTagUpdate](flamenco/manager/docs/EventWorkerTagUpdate.md) @@ -170,6 +171,7 @@ Class | Method | HTTP request | Description - [JobTasksSummary](flamenco/manager/docs/JobTasksSummary.md) - [JobsQuery](flamenco/manager/docs/JobsQuery.md) - [JobsQueryResult](flamenco/manager/docs/JobsQueryResult.md) + - [LifeCycleEventType](flamenco/manager/docs/LifeCycleEventType.md) - [ManagerConfiguration](flamenco/manager/docs/ManagerConfiguration.md) - [ManagerVariable](flamenco/manager/docs/ManagerVariable.md) - [ManagerVariableAudience](flamenco/manager/docs/ManagerVariableAudience.md) diff --git a/pkg/api/openapi_spec.gen.go b/pkg/api/openapi_spec.gen.go index 153bb18f..47cc6901 100644 --- a/pkg/api/openapi_spec.gen.go +++ b/pkg/api/openapi_spec.gen.go @@ -61,187 +61,189 @@ var swaggerSpec = []string{ "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", + "/xMAAP//yoC45FYOAQA=", } // 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 57657224..5590d81b 100644 --- a/pkg/api/openapi_types.gen.go +++ b/pkg/api/openapi_types.gen.go @@ -76,6 +76,13 @@ const ( JobStatusUnderConstruction JobStatus = "under-construction" ) +// Defines values for LifeCycleEventType. +const ( + LifeCycleEventTypeManagerShutdown LifeCycleEventType = "manager-shutdown" + + LifeCycleEventTypeManagerStartup LifeCycleEventType = "manager-startup" +) + // Defines values for ManagerVariableAudience. const ( ManagerVariableAudienceUsers ManagerVariableAudience = "users" @@ -299,6 +306,11 @@ type EventLastRenderedUpdate struct { Thumbnail JobLastRenderedImageInfo `json:"thumbnail"` } +// Flamenco life-cycle event, for things like shutting down, starting up, etc. +type EventLifeCycle struct { + Type LifeCycleEventType `json:"type"` +} + // Task log chunk, sent to a MQTT topic/SocketIO room dedicated to a single task, to avoid sending too many updates. type EventTaskLogUpdate struct { // Chunk of the task log. May contain multiple lines of text. @@ -488,6 +500,9 @@ type JobsQueryResult struct { Jobs []Job `json:"jobs"` } +// LifeCycleEventType defines model for LifeCycleEventType. +type LifeCycleEventType string + // ManagerConfiguration defines model for ManagerConfiguration. type ManagerConfiguration struct { // Whether this is considered the first time the Manager runs. This is determined by a few factors, like a non-existent configuration file or certain settings being empty while they shouldn't be. diff --git a/web/app/src/manager-api/index.js b/web/app/src/manager-api/index.js index 505901cd..4f78c0db 100644 --- a/web/app/src/manager-api/index.js +++ b/web/app/src/manager-api/index.js @@ -27,6 +27,7 @@ import Command from './model/Command'; import Error from './model/Error'; import EventJobUpdate from './model/EventJobUpdate'; import EventLastRenderedUpdate from './model/EventLastRenderedUpdate'; +import EventLifeCycle from './model/EventLifeCycle'; import EventTaskLogUpdate from './model/EventTaskLogUpdate'; import EventTaskUpdate from './model/EventTaskUpdate'; import EventWorkerTagUpdate from './model/EventWorkerTagUpdate'; @@ -45,6 +46,7 @@ import JobStorageInfo from './model/JobStorageInfo'; import JobTasksSummary from './model/JobTasksSummary'; import JobsQuery from './model/JobsQuery'; import JobsQueryResult from './model/JobsQueryResult'; +import LifeCycleEventType from './model/LifeCycleEventType'; import ManagerConfiguration from './model/ManagerConfiguration'; import ManagerVariable from './model/ManagerVariable'; import ManagerVariableAudience from './model/ManagerVariableAudience'; @@ -219,6 +221,12 @@ export { */ EventLastRenderedUpdate, + /** + * The EventLifeCycle model constructor. + * @property {module:model/EventLifeCycle} + */ + EventLifeCycle, + /** * The EventTaskLogUpdate model constructor. * @property {module:model/EventTaskLogUpdate} @@ -327,6 +335,12 @@ export { */ JobsQueryResult, + /** + * The LifeCycleEventType model constructor. + * @property {module:model/LifeCycleEventType} + */ + LifeCycleEventType, + /** * The ManagerConfiguration model constructor. * @property {module:model/ManagerConfiguration} diff --git a/web/app/src/manager-api/model/EventLifeCycle.js b/web/app/src/manager-api/model/EventLifeCycle.js new file mode 100644 index 00000000..eafe13e2 --- /dev/null +++ b/web/app/src/manager-api/model/EventLifeCycle.js @@ -0,0 +1,75 @@ +/** + * 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 LifeCycleEventType from './LifeCycleEventType'; + +/** + * The EventLifeCycle model module. + * @module model/EventLifeCycle + * @version 0.0.0 + */ +class EventLifeCycle { + /** + * Constructs a new EventLifeCycle. + * Flamenco life-cycle event, for things like shutting down, starting up, etc. + * @alias module:model/EventLifeCycle + * @param type {module:model/LifeCycleEventType} + */ + constructor(type) { + + EventLifeCycle.initialize(this, type); + } + + /** + * 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, type) { + obj['type'] = type; + } + + /** + * Constructs a EventLifeCycle 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/EventLifeCycle} obj Optional instance to populate. + * @return {module:model/EventLifeCycle} The populated EventLifeCycle instance. + */ + static constructFromObject(data, obj) { + if (data) { + obj = obj || new EventLifeCycle(); + + if (data.hasOwnProperty('type')) { + obj['type'] = LifeCycleEventType.constructFromObject(data['type']); + } + } + return obj; + } + + +} + +/** + * @member {module:model/LifeCycleEventType} type + */ +EventLifeCycle.prototype['type'] = undefined; + + + + + + +export default EventLifeCycle; + diff --git a/web/app/src/manager-api/model/LifeCycleEventType.js b/web/app/src/manager-api/model/LifeCycleEventType.js new file mode 100644 index 00000000..4c923353 --- /dev/null +++ b/web/app/src/manager-api/model/LifeCycleEventType.js @@ -0,0 +1,46 @@ +/** + * 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'; +/** +* Enum class LifeCycleEventType. +* @enum {} +* @readonly +*/ +export default class LifeCycleEventType { + + /** + * value: "manager-startup" + * @const + */ + "startup" = "manager-startup"; + + + /** + * value: "manager-shutdown" + * @const + */ + "shutdown" = "manager-shutdown"; + + + + /** + * Returns a LifeCycleEventType enum value from a Javascript object name. + * @param {Object} data The plain JavaScript object containing the name of the enum value. + * @return {module:model/LifeCycleEventType} The enum LifeCycleEventType value. + */ + static constructFromObject(object) { + return object; + } +} +