From b678b909322ae0ba284f45ea73d620f115b3a3bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Mon, 28 Feb 2022 17:40:00 +0100 Subject: [PATCH] Proof of concept to test a generated Python OpenAPI client --- .gitignore | 6 + addon/README.md | 18 + addon/flamenco/__init__.py | 31 + addon/flamenco/manager/__init__.py | 27 + addon/flamenco/manager/api/__init__.py | 3 + addon/flamenco/manager/api/jobs_api.py | 408 ++++ addon/flamenco/manager/api/worker_api.py | 918 ++++++++ addon/flamenco/manager/api_client.py | 866 +++++++ addon/flamenco/manager/apis/__init__.py | 18 + addon/flamenco/manager/configuration.py | 470 ++++ addon/flamenco/manager/docs/AssignedTask.md | 21 + .../manager/docs/AvailableJobSetting.md | 20 + .../docs/AvailableJobSettingSubtype.md | 12 + .../manager/docs/AvailableJobSettingType.md | 12 + .../flamenco/manager/docs/AvailableJobType.md | 15 + .../manager/docs/AvailableJobTypes.md | 13 + addon/flamenco/manager/docs/Command.md | 14 + addon/flamenco/manager/docs/Configuration.md | 14 + .../manager/docs/ConfigurationMeta.md | 12 + addon/flamenco/manager/docs/Error.md | 13 + addon/flamenco/manager/docs/Job.md | 20 + addon/flamenco/manager/docs/JobAllOf.md | 15 + addon/flamenco/manager/docs/JobMetadata.md | 12 + addon/flamenco/manager/docs/JobSettings.md | 11 + addon/flamenco/manager/docs/JobStatus.md | 11 + addon/flamenco/manager/docs/JobsApi.md | 212 ++ .../flamenco/manager/docs/RegisteredWorker.md | 19 + addon/flamenco/manager/docs/SecurityError.md | 12 + addon/flamenco/manager/docs/SubmittedJob.md | 17 + addon/flamenco/manager/docs/TaskStatus.md | 11 + addon/flamenco/manager/docs/TaskUpdate.md | 15 + addon/flamenco/manager/docs/WorkerApi.md | 562 +++++ .../manager/docs/WorkerRegistration.md | 15 + addon/flamenco/manager/docs/WorkerSignOn.md | 14 + .../manager/docs/WorkerStateChange.md | 12 + .../manager/docs/WorkerStateChanged.md | 12 + addon/flamenco/manager/docs/WorkerStatus.md | 11 + addon/flamenco/manager/exceptions.py | 159 ++ addon/flamenco/manager/model/__init__.py | 5 + addon/flamenco/manager/model/assigned_task.py | 317 +++ .../manager/model/available_job_setting.py | 299 +++ .../model/available_job_setting_subtype.py | 284 +++ .../model/available_job_setting_type.py | 284 +++ .../manager/model/available_job_type.py | 279 +++ .../manager/model/available_job_types.py | 267 +++ addon/flamenco/manager/model/command.py | 267 +++ addon/flamenco/manager/model/configuration.py | 273 +++ .../manager/model/configuration_meta.py | 261 +++ addon/flamenco/manager/model/error.py | 267 +++ addon/flamenco/manager/model/job.py | 354 +++ addon/flamenco/manager/model/job_all_of.py | 285 +++ addon/flamenco/manager/model/job_metadata.py | 251 ++ addon/flamenco/manager/model/job_settings.py | 251 ++ addon/flamenco/manager/model/job_status.py | 294 +++ .../manager/model/registered_worker.py | 309 +++ .../flamenco/manager/model/security_error.py | 261 +++ addon/flamenco/manager/model/submitted_job.py | 291 +++ addon/flamenco/manager/model/task_status.py | 288 +++ addon/flamenco/manager/model/task_update.py | 269 +++ .../manager/model/worker_registration.py | 279 +++ .../flamenco/manager/model/worker_sign_on.py | 273 +++ .../manager/model/worker_state_change.py | 267 +++ .../manager/model/worker_state_changed.py | 267 +++ addon/flamenco/manager/model/worker_status.py | 287 +++ addon/flamenco/manager/model_utils.py | 2037 +++++++++++++++++ addon/flamenco/manager/models/__init__.py | 36 + addon/flamenco/manager/rest.py | 346 +++ addon/flamenco/manager/test/__init__.py | 0 .../manager/test/test_assigned_task.py | 39 + .../test/test_available_job_setting.py | 39 + .../test_available_job_setting_subtype.py | 35 + .../test/test_available_job_setting_type.py | 35 + .../manager/test/test_available_job_type.py | 37 + .../manager/test/test_available_job_types.py | 37 + addon/flamenco/manager/test/test_command.py | 35 + .../manager/test/test_configuration.py | 37 + .../manager/test/test_configuration_meta.py | 35 + addon/flamenco/manager/test/test_error.py | 35 + addon/flamenco/manager/test/test_job.py | 45 + .../flamenco/manager/test/test_job_all_of.py | 37 + .../manager/test/test_job_metadata.py | 35 + .../manager/test/test_job_settings.py | 35 + .../flamenco/manager/test/test_job_status.py | 35 + addon/flamenco/manager/test/test_jobs_api.py | 49 + .../manager/test/test_registered_worker.py | 37 + .../manager/test/test_security_error.py | 35 + .../manager/test/test_submitted_job.py | 39 + .../flamenco/manager/test/test_task_status.py | 35 + .../flamenco/manager/test/test_task_update.py | 37 + .../flamenco/manager/test/test_worker_api.py | 76 + .../manager/test/test_worker_registration.py | 35 + .../manager/test/test_worker_sign_on.py | 35 + .../manager/test/test_worker_state_change.py | 37 + .../manager/test/test_worker_state_changed.py | 37 + .../manager/test/test_worker_status.py | 35 + addon/flamenco/manager_README.md | 139 ++ addon/generate-flamenco3-client.sh | 24 + addon/mypy.ini | 14 + addon/oapi_test_generated.py | 39 + addon/openapi-generator-cli.jar | Bin 0 -> 25313249 bytes addon/poetry.lock | 583 +++++ addon/pyproject.toml | 20 + 102 files changed, 15356 insertions(+) create mode 100644 addon/README.md create mode 100644 addon/flamenco/__init__.py create mode 100644 addon/flamenco/manager/__init__.py create mode 100644 addon/flamenco/manager/api/__init__.py create mode 100644 addon/flamenco/manager/api/jobs_api.py create mode 100644 addon/flamenco/manager/api/worker_api.py create mode 100644 addon/flamenco/manager/api_client.py create mode 100644 addon/flamenco/manager/apis/__init__.py create mode 100644 addon/flamenco/manager/configuration.py create mode 100644 addon/flamenco/manager/docs/AssignedTask.md create mode 100644 addon/flamenco/manager/docs/AvailableJobSetting.md create mode 100644 addon/flamenco/manager/docs/AvailableJobSettingSubtype.md create mode 100644 addon/flamenco/manager/docs/AvailableJobSettingType.md create mode 100644 addon/flamenco/manager/docs/AvailableJobType.md create mode 100644 addon/flamenco/manager/docs/AvailableJobTypes.md create mode 100644 addon/flamenco/manager/docs/Command.md create mode 100644 addon/flamenco/manager/docs/Configuration.md create mode 100644 addon/flamenco/manager/docs/ConfigurationMeta.md create mode 100644 addon/flamenco/manager/docs/Error.md create mode 100644 addon/flamenco/manager/docs/Job.md create mode 100644 addon/flamenco/manager/docs/JobAllOf.md create mode 100644 addon/flamenco/manager/docs/JobMetadata.md create mode 100644 addon/flamenco/manager/docs/JobSettings.md create mode 100644 addon/flamenco/manager/docs/JobStatus.md create mode 100644 addon/flamenco/manager/docs/JobsApi.md create mode 100644 addon/flamenco/manager/docs/RegisteredWorker.md create mode 100644 addon/flamenco/manager/docs/SecurityError.md create mode 100644 addon/flamenco/manager/docs/SubmittedJob.md create mode 100644 addon/flamenco/manager/docs/TaskStatus.md create mode 100644 addon/flamenco/manager/docs/TaskUpdate.md create mode 100644 addon/flamenco/manager/docs/WorkerApi.md create mode 100644 addon/flamenco/manager/docs/WorkerRegistration.md create mode 100644 addon/flamenco/manager/docs/WorkerSignOn.md create mode 100644 addon/flamenco/manager/docs/WorkerStateChange.md create mode 100644 addon/flamenco/manager/docs/WorkerStateChanged.md create mode 100644 addon/flamenco/manager/docs/WorkerStatus.md create mode 100644 addon/flamenco/manager/exceptions.py create mode 100644 addon/flamenco/manager/model/__init__.py create mode 100644 addon/flamenco/manager/model/assigned_task.py create mode 100644 addon/flamenco/manager/model/available_job_setting.py create mode 100644 addon/flamenco/manager/model/available_job_setting_subtype.py create mode 100644 addon/flamenco/manager/model/available_job_setting_type.py create mode 100644 addon/flamenco/manager/model/available_job_type.py create mode 100644 addon/flamenco/manager/model/available_job_types.py create mode 100644 addon/flamenco/manager/model/command.py create mode 100644 addon/flamenco/manager/model/configuration.py create mode 100644 addon/flamenco/manager/model/configuration_meta.py create mode 100644 addon/flamenco/manager/model/error.py create mode 100644 addon/flamenco/manager/model/job.py create mode 100644 addon/flamenco/manager/model/job_all_of.py create mode 100644 addon/flamenco/manager/model/job_metadata.py create mode 100644 addon/flamenco/manager/model/job_settings.py create mode 100644 addon/flamenco/manager/model/job_status.py create mode 100644 addon/flamenco/manager/model/registered_worker.py create mode 100644 addon/flamenco/manager/model/security_error.py create mode 100644 addon/flamenco/manager/model/submitted_job.py create mode 100644 addon/flamenco/manager/model/task_status.py create mode 100644 addon/flamenco/manager/model/task_update.py create mode 100644 addon/flamenco/manager/model/worker_registration.py create mode 100644 addon/flamenco/manager/model/worker_sign_on.py create mode 100644 addon/flamenco/manager/model/worker_state_change.py create mode 100644 addon/flamenco/manager/model/worker_state_changed.py create mode 100644 addon/flamenco/manager/model/worker_status.py create mode 100644 addon/flamenco/manager/model_utils.py create mode 100644 addon/flamenco/manager/models/__init__.py create mode 100644 addon/flamenco/manager/rest.py create mode 100644 addon/flamenco/manager/test/__init__.py create mode 100644 addon/flamenco/manager/test/test_assigned_task.py create mode 100644 addon/flamenco/manager/test/test_available_job_setting.py create mode 100644 addon/flamenco/manager/test/test_available_job_setting_subtype.py create mode 100644 addon/flamenco/manager/test/test_available_job_setting_type.py create mode 100644 addon/flamenco/manager/test/test_available_job_type.py create mode 100644 addon/flamenco/manager/test/test_available_job_types.py create mode 100644 addon/flamenco/manager/test/test_command.py create mode 100644 addon/flamenco/manager/test/test_configuration.py create mode 100644 addon/flamenco/manager/test/test_configuration_meta.py create mode 100644 addon/flamenco/manager/test/test_error.py create mode 100644 addon/flamenco/manager/test/test_job.py create mode 100644 addon/flamenco/manager/test/test_job_all_of.py create mode 100644 addon/flamenco/manager/test/test_job_metadata.py create mode 100644 addon/flamenco/manager/test/test_job_settings.py create mode 100644 addon/flamenco/manager/test/test_job_status.py create mode 100644 addon/flamenco/manager/test/test_jobs_api.py create mode 100644 addon/flamenco/manager/test/test_registered_worker.py create mode 100644 addon/flamenco/manager/test/test_security_error.py create mode 100644 addon/flamenco/manager/test/test_submitted_job.py create mode 100644 addon/flamenco/manager/test/test_task_status.py create mode 100644 addon/flamenco/manager/test/test_task_update.py create mode 100644 addon/flamenco/manager/test/test_worker_api.py create mode 100644 addon/flamenco/manager/test/test_worker_registration.py create mode 100644 addon/flamenco/manager/test/test_worker_sign_on.py create mode 100644 addon/flamenco/manager/test/test_worker_state_change.py create mode 100644 addon/flamenco/manager/test/test_worker_state_changed.py create mode 100644 addon/flamenco/manager/test/test_worker_status.py create mode 100644 addon/flamenco/manager_README.md create mode 100755 addon/generate-flamenco3-client.sh create mode 100644 addon/mypy.ini create mode 100755 addon/oapi_test_generated.py create mode 100644 addon/openapi-generator-cli.jar create mode 100644 addon/poetry.lock create mode 100644 addon/pyproject.toml diff --git a/.gitignore b/.gitignore index 2919aec8..f578fc67 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,9 @@ /flamenco-worker-credentials.yaml node_modules/ task-logs/ + +__pycache__ +*.pyc +.mypy_cache/ +.openapi-generator/ +.openapi-generator-ignore diff --git a/addon/README.md b/addon/README.md new file mode 100644 index 00000000..f7c2c95a --- /dev/null +++ b/addon/README.md @@ -0,0 +1,18 @@ +# Flamenco 3 Blender add-on + +## Setting up development environment + +``` +~/workspace/blender-git/build_linux/bin/3.1/python/bin/python3.9 -m venv --upgrade-deps venv +. ./venv/bin/activate +pip install poetry +poetry install +``` + +## Generating the OpenAPI client + +Start Flamenco Manager, then run: + +``` +openapi-python-client generate --url http://localhost:8080/api/openapi3.json +``` diff --git a/addon/flamenco/__init__.py b/addon/flamenco/__init__.py new file mode 100644 index 00000000..04f7d705 --- /dev/null +++ b/addon/flamenco/__init__.py @@ -0,0 +1,31 @@ +# ##### BEGIN GPL LICENSE BLOCK ##### +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# ##### END GPL LICENSE BLOCK ##### + +# + +bl_info = { + "name": "Blender Cloud", + "author": "Sybren A. Stüvel, Francesco Siddi, Inês Almeida, Antony Riakiotakis", + "version": (3, 0), + "blender": (3, 1, 0), + "description": "Flamenco client for Blender.", + "location": "...", + "wiki_url": "...", + "category": "System", + "support": "COMMUNITY", +} diff --git a/addon/flamenco/manager/__init__.py b/addon/flamenco/manager/__init__.py new file mode 100644 index 00000000..3db6a87a --- /dev/null +++ b/addon/flamenco/manager/__init__.py @@ -0,0 +1,27 @@ +# flake8: noqa + +""" + Flamenco manager + + Render Farm manager API # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +__version__ = "3.0" + +# import ApiClient +from flamenco.manager.api_client import ApiClient + +# import Configuration +from flamenco.manager.configuration import Configuration + +# import exceptions +from flamenco.manager.exceptions import OpenApiException +from flamenco.manager.exceptions import ApiAttributeError +from flamenco.manager.exceptions import ApiTypeError +from flamenco.manager.exceptions import ApiValueError +from flamenco.manager.exceptions import ApiKeyError +from flamenco.manager.exceptions import ApiException diff --git a/addon/flamenco/manager/api/__init__.py b/addon/flamenco/manager/api/__init__.py new file mode 100644 index 00000000..e2cf6390 --- /dev/null +++ b/addon/flamenco/manager/api/__init__.py @@ -0,0 +1,3 @@ +# do not import all apis into this module because that uses a lot of memory and stack frames +# if you need the ability to import all apis from one package, import them with +# from flamenco.manager.apis import JobsApi diff --git a/addon/flamenco/manager/api/jobs_api.py b/addon/flamenco/manager/api/jobs_api.py new file mode 100644 index 00000000..5deb7c92 --- /dev/null +++ b/addon/flamenco/manager/api/jobs_api.py @@ -0,0 +1,408 @@ +""" + 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.api_client import ApiClient, Endpoint as _Endpoint +from flamenco.manager.model_utils import ( # noqa: F401 + check_allowed_values, + check_validations, + date, + datetime, + file_type, + none_type, + validate_and_convert_types +) +from flamenco.manager.model.available_job_types import AvailableJobTypes +from flamenco.manager.model.error import Error +from flamenco.manager.model.job import Job +from flamenco.manager.model.submitted_job import SubmittedJob + + +class JobsApi(object): + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient() + self.api_client = api_client + self.fetch_job_endpoint = _Endpoint( + settings={ + 'response_type': (Job,), + 'auth': [], + 'endpoint_path': '/api/jobs/{job_id}', + 'operation_id': 'fetch_job', + 'http_method': 'GET', + 'servers': None, + }, + params_map={ + 'all': [ + 'job_id', + ], + 'required': [ + 'job_id', + ], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + 'job_id': + (str,), + }, + 'attribute_map': { + 'job_id': 'job_id', + }, + 'location_map': { + 'job_id': 'path', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [ + 'application/json' + ], + 'content_type': [], + }, + api_client=api_client + ) + self.get_job_types_endpoint = _Endpoint( + settings={ + 'response_type': (AvailableJobTypes,), + 'auth': [], + 'endpoint_path': '/api/jobs/types', + 'operation_id': 'get_job_types', + 'http_method': 'GET', + 'servers': None, + }, + params_map={ + 'all': [ + ], + 'required': [], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + }, + 'attribute_map': { + }, + 'location_map': { + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [ + 'application/json' + ], + 'content_type': [], + }, + api_client=api_client + ) + self.submit_job_endpoint = _Endpoint( + settings={ + 'response_type': (SubmittedJob,), + 'auth': [], + 'endpoint_path': '/api/jobs', + 'operation_id': 'submit_job', + 'http_method': 'POST', + 'servers': None, + }, + params_map={ + 'all': [ + 'submitted_job', + ], + 'required': [ + 'submitted_job', + ], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + 'submitted_job': + (SubmittedJob,), + }, + 'attribute_map': { + }, + 'location_map': { + 'submitted_job': 'body', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [ + 'application/json' + ], + 'content_type': [ + 'application/json' + ] + }, + api_client=api_client + ) + + def fetch_job( + self, + job_id, + **kwargs + ): + """Fetch info about the job. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.fetch_job(job_id, async_req=True) + >>> result = thread.get() + + Args: + job_id (str): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (int/float/tuple): timeout setting for this request. If + one number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _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) + _content_type (str/None): force body content-type. + Default is None and content-type will be predicted by allowed + content-types and body. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + Job + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_spec_property_naming'] = kwargs.get( + '_spec_property_naming', False + ) + kwargs['_content_type'] = kwargs.get( + '_content_type') + kwargs['_host_index'] = kwargs.get('_host_index') + kwargs['job_id'] = \ + job_id + return self.fetch_job_endpoint.call_with_http_info(**kwargs) + + def get_job_types( + self, + **kwargs + ): + """Get list of job types and their parameters. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_job_types(async_req=True) + >>> result = thread.get() + + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (int/float/tuple): timeout setting for this request. If + one number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _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) + _content_type (str/None): force body content-type. + Default is None and content-type will be predicted by allowed + content-types and body. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + AvailableJobTypes + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_spec_property_naming'] = kwargs.get( + '_spec_property_naming', False + ) + kwargs['_content_type'] = kwargs.get( + '_content_type') + kwargs['_host_index'] = kwargs.get('_host_index') + return self.get_job_types_endpoint.call_with_http_info(**kwargs) + + def submit_job( + self, + submitted_job, + **kwargs + ): + """Submit a new job for Flamenco Manager to execute. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.submit_job(submitted_job, async_req=True) + >>> result = thread.get() + + Args: + submitted_job (SubmittedJob): Job to submit + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (int/float/tuple): timeout setting for this request. If + one number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _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) + _content_type (str/None): force body content-type. + Default is None and content-type will be predicted by allowed + content-types and body. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + SubmittedJob + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_spec_property_naming'] = kwargs.get( + '_spec_property_naming', False + ) + kwargs['_content_type'] = kwargs.get( + '_content_type') + kwargs['_host_index'] = kwargs.get('_host_index') + kwargs['submitted_job'] = \ + submitted_job + return self.submit_job_endpoint.call_with_http_info(**kwargs) + diff --git a/addon/flamenco/manager/api/worker_api.py b/addon/flamenco/manager/api/worker_api.py new file mode 100644 index 00000000..d8aa6955 --- /dev/null +++ b/addon/flamenco/manager/api/worker_api.py @@ -0,0 +1,918 @@ +""" + 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.api_client import ApiClient, Endpoint as _Endpoint +from flamenco.manager.model_utils import ( # noqa: F401 + check_allowed_values, + check_validations, + date, + datetime, + file_type, + none_type, + validate_and_convert_types +) +from flamenco.manager.model.assigned_task import AssignedTask +from flamenco.manager.model.error import Error +from flamenco.manager.model.registered_worker import RegisteredWorker +from flamenco.manager.model.security_error import SecurityError +from flamenco.manager.model.task_update import TaskUpdate +from flamenco.manager.model.worker_registration import WorkerRegistration +from flamenco.manager.model.worker_sign_on import WorkerSignOn +from flamenco.manager.model.worker_state_change import WorkerStateChange +from flamenco.manager.model.worker_state_changed import WorkerStateChanged + + +class WorkerApi(object): + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient() + self.api_client = api_client + self.register_worker_endpoint = _Endpoint( + settings={ + 'response_type': (RegisteredWorker,), + 'auth': [], + 'endpoint_path': '/api/worker/register-worker', + 'operation_id': 'register_worker', + 'http_method': 'POST', + 'servers': None, + }, + params_map={ + 'all': [ + 'worker_registration', + ], + 'required': [ + 'worker_registration', + ], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + 'worker_registration': + (WorkerRegistration,), + }, + 'attribute_map': { + }, + 'location_map': { + 'worker_registration': 'body', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [ + 'application/json' + ], + 'content_type': [ + 'application/json' + ] + }, + api_client=api_client + ) + self.schedule_task_endpoint = _Endpoint( + settings={ + 'response_type': (AssignedTask,), + 'auth': [ + 'worker_auth' + ], + 'endpoint_path': '/api/worker/task', + 'operation_id': 'schedule_task', + 'http_method': 'POST', + 'servers': None, + }, + params_map={ + 'all': [ + ], + 'required': [], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + }, + 'attribute_map': { + }, + 'location_map': { + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [ + 'application/json' + ], + 'content_type': [], + }, + api_client=api_client + ) + self.sign_off_endpoint = _Endpoint( + settings={ + 'response_type': None, + 'auth': [ + 'worker_auth' + ], + 'endpoint_path': '/api/worker/sign-off', + 'operation_id': 'sign_off', + 'http_method': 'POST', + 'servers': None, + }, + params_map={ + 'all': [ + ], + 'required': [], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + }, + 'attribute_map': { + }, + 'location_map': { + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [ + 'application/json' + ], + 'content_type': [], + }, + api_client=api_client + ) + self.sign_on_endpoint = _Endpoint( + settings={ + 'response_type': (WorkerStateChange,), + 'auth': [ + 'worker_auth' + ], + 'endpoint_path': '/api/worker/sign-on', + 'operation_id': 'sign_on', + 'http_method': 'POST', + 'servers': None, + }, + params_map={ + 'all': [ + 'worker_sign_on', + ], + 'required': [ + 'worker_sign_on', + ], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + 'worker_sign_on': + (WorkerSignOn,), + }, + 'attribute_map': { + }, + 'location_map': { + 'worker_sign_on': 'body', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [ + 'application/json' + ], + 'content_type': [ + 'application/json' + ] + }, + api_client=api_client + ) + self.task_update_endpoint = _Endpoint( + settings={ + 'response_type': None, + 'auth': [ + 'worker_auth' + ], + 'endpoint_path': '/api/worker/task/{task_id}', + 'operation_id': 'task_update', + 'http_method': 'POST', + 'servers': None, + }, + params_map={ + 'all': [ + 'task_id', + 'task_update', + ], + 'required': [ + 'task_id', + 'task_update', + ], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + 'task_id': + (str,), + 'task_update': + (TaskUpdate,), + }, + 'attribute_map': { + 'task_id': 'task_id', + }, + 'location_map': { + 'task_id': 'path', + 'task_update': 'body', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [ + 'application/json' + ], + 'content_type': [ + 'application/json' + ] + }, + api_client=api_client + ) + self.worker_state_endpoint = _Endpoint( + settings={ + 'response_type': (WorkerStateChange,), + 'auth': [ + 'worker_auth' + ], + 'endpoint_path': '/api/worker/state', + 'operation_id': 'worker_state', + 'http_method': 'GET', + 'servers': None, + }, + params_map={ + 'all': [ + ], + 'required': [], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + }, + 'attribute_map': { + }, + 'location_map': { + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [ + 'application/json' + ], + 'content_type': [], + }, + api_client=api_client + ) + self.worker_state_changed_endpoint = _Endpoint( + settings={ + 'response_type': None, + 'auth': [ + 'worker_auth' + ], + 'endpoint_path': '/api/worker/state-changed', + 'operation_id': 'worker_state_changed', + 'http_method': 'POST', + 'servers': None, + }, + params_map={ + 'all': [ + 'worker_state_changed', + ], + 'required': [ + 'worker_state_changed', + ], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + 'worker_state_changed': + (WorkerStateChanged,), + }, + 'attribute_map': { + }, + 'location_map': { + 'worker_state_changed': 'body', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [ + 'application/json' + ], + 'content_type': [ + 'application/json' + ] + }, + api_client=api_client + ) + + def register_worker( + self, + worker_registration, + **kwargs + ): + """Register a new worker # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.register_worker(worker_registration, async_req=True) + >>> result = thread.get() + + Args: + worker_registration (WorkerRegistration): Worker to register + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (int/float/tuple): timeout setting for this request. If + one number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _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) + _content_type (str/None): force body content-type. + Default is None and content-type will be predicted by allowed + content-types and body. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + RegisteredWorker + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_spec_property_naming'] = kwargs.get( + '_spec_property_naming', False + ) + kwargs['_content_type'] = kwargs.get( + '_content_type') + kwargs['_host_index'] = kwargs.get('_host_index') + kwargs['worker_registration'] = \ + worker_registration + return self.register_worker_endpoint.call_with_http_info(**kwargs) + + def schedule_task( + self, + **kwargs + ): + """Obtain a new task to execute # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.schedule_task(async_req=True) + >>> result = thread.get() + + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (int/float/tuple): timeout setting for this request. If + one number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _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) + _content_type (str/None): force body content-type. + Default is None and content-type will be predicted by allowed + content-types and body. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + AssignedTask + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_spec_property_naming'] = kwargs.get( + '_spec_property_naming', False + ) + kwargs['_content_type'] = kwargs.get( + '_content_type') + kwargs['_host_index'] = kwargs.get('_host_index') + return self.schedule_task_endpoint.call_with_http_info(**kwargs) + + def sign_off( + self, + **kwargs + ): + """Mark the worker as offline # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.sign_off(async_req=True) + >>> result = thread.get() + + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (int/float/tuple): timeout setting for this request. If + one number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _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) + _content_type (str/None): force body content-type. + Default is None and content-type will be predicted by allowed + content-types and body. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + None + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_spec_property_naming'] = kwargs.get( + '_spec_property_naming', False + ) + kwargs['_content_type'] = kwargs.get( + '_content_type') + kwargs['_host_index'] = kwargs.get('_host_index') + return self.sign_off_endpoint.call_with_http_info(**kwargs) + + def sign_on( + self, + worker_sign_on, + **kwargs + ): + """Authenticate & sign in the worker. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.sign_on(worker_sign_on, async_req=True) + >>> result = thread.get() + + Args: + worker_sign_on (WorkerSignOn): Worker metadata + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (int/float/tuple): timeout setting for this request. If + one number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _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) + _content_type (str/None): force body content-type. + Default is None and content-type will be predicted by allowed + content-types and body. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + WorkerStateChange + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_spec_property_naming'] = kwargs.get( + '_spec_property_naming', False + ) + kwargs['_content_type'] = kwargs.get( + '_content_type') + kwargs['_host_index'] = kwargs.get('_host_index') + kwargs['worker_sign_on'] = \ + worker_sign_on + return self.sign_on_endpoint.call_with_http_info(**kwargs) + + def task_update( + self, + task_id, + task_update, + **kwargs + ): + """Update the task, typically to indicate progress, completion, or failure. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.task_update(task_id, task_update, async_req=True) + >>> result = thread.get() + + Args: + task_id (str): + task_update (TaskUpdate): Task update information + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (int/float/tuple): timeout setting for this request. If + one number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _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) + _content_type (str/None): force body content-type. + Default is None and content-type will be predicted by allowed + content-types and body. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + None + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_spec_property_naming'] = kwargs.get( + '_spec_property_naming', False + ) + kwargs['_content_type'] = kwargs.get( + '_content_type') + kwargs['_host_index'] = kwargs.get('_host_index') + kwargs['task_id'] = \ + task_id + kwargs['task_update'] = \ + task_update + return self.task_update_endpoint.call_with_http_info(**kwargs) + + def worker_state( + self, + **kwargs + ): + """worker_state # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.worker_state(async_req=True) + >>> result = thread.get() + + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (int/float/tuple): timeout setting for this request. If + one number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _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) + _content_type (str/None): force body content-type. + Default is None and content-type will be predicted by allowed + content-types and body. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + WorkerStateChange + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_spec_property_naming'] = kwargs.get( + '_spec_property_naming', False + ) + kwargs['_content_type'] = kwargs.get( + '_content_type') + kwargs['_host_index'] = kwargs.get('_host_index') + return self.worker_state_endpoint.call_with_http_info(**kwargs) + + def worker_state_changed( + self, + worker_state_changed, + **kwargs + ): + """Worker changed state. This could be as acknowledgement of a Manager-requested state change, or in response to worker-local signals. # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.worker_state_changed(worker_state_changed, async_req=True) + >>> result = thread.get() + + Args: + worker_state_changed (WorkerStateChanged): New worker state + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (int/float/tuple): timeout setting for this request. If + one number provided, it will be total request timeout. It can also + be a pair (tuple) of (connection, read) timeouts. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _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) + _content_type (str/None): force body content-type. + Default is None and content-type will be predicted by allowed + content-types and body. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + async_req (bool): execute request asynchronously + + Returns: + None + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_spec_property_naming'] = kwargs.get( + '_spec_property_naming', False + ) + kwargs['_content_type'] = kwargs.get( + '_content_type') + kwargs['_host_index'] = kwargs.get('_host_index') + kwargs['worker_state_changed'] = \ + worker_state_changed + return self.worker_state_changed_endpoint.call_with_http_info(**kwargs) + diff --git a/addon/flamenco/manager/api_client.py b/addon/flamenco/manager/api_client.py new file mode 100644 index 00000000..57637e2c --- /dev/null +++ b/addon/flamenco/manager/api_client.py @@ -0,0 +1,866 @@ +""" + Flamenco manager + + Render Farm manager API # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import json +import atexit +import mimetypes +from multiprocessing.pool import ThreadPool +import io +import os +import re +import typing +from urllib.parse import quote +from urllib3.fields import RequestField + + +from flamenco.manager import rest +from flamenco.manager.configuration import Configuration +from flamenco.manager.exceptions import ApiTypeError, ApiValueError, ApiException +from flamenco.manager.model_utils import ( + ModelNormal, + ModelSimple, + ModelComposed, + check_allowed_values, + check_validations, + date, + datetime, + deserialize_file, + file_type, + model_to_dict, + none_type, + validate_and_convert_types +) + + +class ApiClient(object): + """Generic API client for OpenAPI client library builds. + + OpenAPI generic API client. This client handles the client- + server communication, and is invariant across implementations. Specifics of + the methods and models for each application are generated from the OpenAPI + templates. + + NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + Do not edit the class manually. + + :param configuration: .Configuration object for this client + :param header_name: a header to pass when making calls to the API. + :param header_value: a header value to pass when making calls to + the API. + :param cookie: a cookie to include in the header when making calls + to the API + :param pool_threads: The number of threads to use for async requests + to the API. More threads means more concurrent API requests. + """ + + _pool = None + + def __init__(self, configuration=None, header_name=None, header_value=None, + cookie=None, pool_threads=1): + if configuration is None: + configuration = Configuration.get_default_copy() + self.configuration = configuration + self.pool_threads = pool_threads + + self.rest_client = rest.RESTClientObject(configuration) + self.default_headers = {} + if header_name is not None: + self.default_headers[header_name] = header_value + self.cookie = cookie + # Set default User-Agent. + self.user_agent = 'OpenAPI-Generator/3.0/python' + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_value, traceback): + self.close() + + def close(self): + if self._pool: + self._pool.close() + self._pool.join() + self._pool = None + if hasattr(atexit, 'unregister'): + atexit.unregister(self.close) + + @property + def pool(self): + """Create thread pool on first request + avoids instantiating unused threadpool for blocking clients. + """ + if self._pool is None: + atexit.register(self.close) + self._pool = ThreadPool(self.pool_threads) + return self._pool + + @property + def user_agent(self): + """User agent for this API client""" + return self.default_headers['User-Agent'] + + @user_agent.setter + def user_agent(self, value): + self.default_headers['User-Agent'] = value + + def set_default_header(self, header_name, header_value): + self.default_headers[header_name] = header_value + + def __call_api( + self, + resource_path: str, + method: str, + path_params: typing.Optional[typing.Dict[str, typing.Any]] = None, + query_params: typing.Optional[typing.List[typing.Tuple[str, typing.Any]]] = None, + header_params: typing.Optional[typing.Dict[str, typing.Any]] = None, + body: typing.Optional[typing.Any] = None, + post_params: typing.Optional[typing.List[typing.Tuple[str, typing.Any]]] = None, + files: typing.Optional[typing.Dict[str, typing.List[io.IOBase]]] = None, + response_type: typing.Optional[typing.Tuple[typing.Any]] = None, + auth_settings: typing.Optional[typing.List[str]] = None, + _return_http_data_only: typing.Optional[bool] = None, + collection_formats: typing.Optional[typing.Dict[str, str]] = None, + _preload_content: bool = True, + _request_timeout: typing.Optional[typing.Union[int, float, typing.Tuple]] = None, + _host: typing.Optional[str] = None, + _check_type: typing.Optional[bool] = None, + _content_type: typing.Optional[str] = None + ): + + config = self.configuration + + # header parameters + header_params = header_params or {} + header_params.update(self.default_headers) + if self.cookie: + header_params['Cookie'] = self.cookie + if header_params: + header_params = self.sanitize_for_serialization(header_params) + header_params = dict(self.parameters_to_tuples(header_params, + collection_formats)) + + # path parameters + if path_params: + path_params = self.sanitize_for_serialization(path_params) + path_params = self.parameters_to_tuples(path_params, + collection_formats) + for k, v in path_params: + # specified safe chars, encode everything + resource_path = resource_path.replace( + '{%s}' % k, + quote(str(v), safe=config.safe_chars_for_path_param) + ) + + # query parameters + if query_params: + query_params = self.sanitize_for_serialization(query_params) + query_params = self.parameters_to_tuples(query_params, + collection_formats) + + # post parameters + if post_params or files: + post_params = post_params if post_params else [] + post_params = self.sanitize_for_serialization(post_params) + post_params = self.parameters_to_tuples(post_params, + collection_formats) + post_params.extend(self.files_parameters(files)) + if header_params['Content-Type'].startswith("multipart"): + post_params = self.parameters_to_multipart(post_params, + (dict) ) + + # body + if body: + body = self.sanitize_for_serialization(body) + + # auth setting + self.update_params_for_auth(header_params, query_params, + auth_settings, resource_path, method, body) + + # request url + if _host is None: + url = self.configuration.host + resource_path + else: + # use server/host defined in path or operation instead + url = _host + resource_path + + try: + # perform request and return response + response_data = self.request( + method, url, query_params=query_params, headers=header_params, + post_params=post_params, body=body, + _preload_content=_preload_content, + _request_timeout=_request_timeout) + except ApiException as e: + e.body = e.body.decode('utf-8') + raise e + + self.last_response = response_data + + return_data = response_data + + if not _preload_content: + return (return_data) + return return_data + + # deserialize response data + if response_type: + if response_type != (file_type,): + encoding = "utf-8" + content_type = response_data.getheader('content-type') + if content_type is not None: + match = re.search(r"charset=([a-zA-Z\-\d]+)[\s\;]?", content_type) + if match: + encoding = match.group(1) + response_data.data = response_data.data.decode(encoding) + + return_data = self.deserialize( + response_data, + response_type, + _check_type + ) + else: + return_data = None + + if _return_http_data_only: + return (return_data) + else: + return (return_data, response_data.status, + response_data.getheaders()) + + def parameters_to_multipart(self, params, collection_types): + """Get parameters as list of tuples, formatting as json if value is collection_types + + :param params: Parameters as list of two-tuples + :param dict collection_types: Parameter collection types + :return: Parameters as list of tuple or urllib3.fields.RequestField + """ + new_params = [] + if collection_types is None: + collection_types = (dict) + for k, v in params.items() if isinstance(params, dict) else params: # noqa: E501 + if isinstance(v, collection_types): # v is instance of collection_type, formatting as application/json + v = json.dumps(v, ensure_ascii=False).encode("utf-8") + field = RequestField(k, v) + field.make_multipart(content_type="application/json; charset=utf-8") + new_params.append(field) + else: + new_params.append((k, v)) + return new_params + + @classmethod + def sanitize_for_serialization(cls, obj): + """Prepares data for transmission before it is sent with the rest client + If obj is None, return None. + If obj is str, int, long, float, bool, return directly. + If obj is datetime.datetime, datetime.date + convert to string in iso8601 format. + If obj is list, sanitize each element in the list. + If obj is dict, return the dict. + If obj is OpenAPI model, return the properties dict. + If obj is io.IOBase, return the bytes + :param obj: The data to serialize. + :return: The serialized form of data. + """ + if isinstance(obj, (ModelNormal, ModelComposed)): + return { + key: cls.sanitize_for_serialization(val) for key, val in model_to_dict(obj, serialize=True).items() + } + elif isinstance(obj, io.IOBase): + return cls.get_file_data_and_close_file(obj) + elif isinstance(obj, (str, int, float, none_type, bool)): + return obj + elif isinstance(obj, (datetime, date)): + return obj.isoformat() + elif isinstance(obj, ModelSimple): + return cls.sanitize_for_serialization(obj.value) + elif isinstance(obj, (list, tuple)): + return [cls.sanitize_for_serialization(item) for item in obj] + if isinstance(obj, dict): + return {key: cls.sanitize_for_serialization(val) for key, val in obj.items()} + raise ApiValueError('Unable to prepare type {} for serialization'.format(obj.__class__.__name__)) + + def deserialize(self, response, response_type, _check_type): + """Deserializes response into an object. + + :param response: RESTResponse object to be deserialized. + :param response_type: For the response, a tuple containing: + valid classes + a list containing valid classes (for list schemas) + a dict containing a tuple of valid classes as the value + Example values: + (str,) + (Pet,) + (float, none_type) + ([int, none_type],) + ({str: (bool, str, int, float, date, datetime, str, none_type)},) + :param _check_type: boolean, whether to check the types of the data + received from the server + :type _check_type: bool + + :return: deserialized object. + """ + # handle file downloading + # save response body into a tmp file and return the instance + if response_type == (file_type,): + content_disposition = response.getheader("Content-Disposition") + return deserialize_file(response.data, self.configuration, + content_disposition=content_disposition) + + # fetch data from response object + try: + received_data = json.loads(response.data) + except ValueError: + received_data = response.data + + # store our data under the key of 'received_data' so users have some + # context if they are deserializing a string and the data type is wrong + deserialized_data = validate_and_convert_types( + received_data, + response_type, + ['received_data'], + True, + _check_type, + configuration=self.configuration + ) + return deserialized_data + + def call_api( + self, + resource_path: str, + method: str, + path_params: typing.Optional[typing.Dict[str, typing.Any]] = None, + query_params: typing.Optional[typing.List[typing.Tuple[str, typing.Any]]] = None, + header_params: typing.Optional[typing.Dict[str, typing.Any]] = None, + body: typing.Optional[typing.Any] = None, + post_params: typing.Optional[typing.List[typing.Tuple[str, typing.Any]]] = None, + files: typing.Optional[typing.Dict[str, typing.List[io.IOBase]]] = None, + response_type: typing.Optional[typing.Tuple[typing.Any]] = None, + auth_settings: typing.Optional[typing.List[str]] = None, + async_req: typing.Optional[bool] = None, + _return_http_data_only: typing.Optional[bool] = None, + collection_formats: typing.Optional[typing.Dict[str, str]] = None, + _preload_content: bool = True, + _request_timeout: typing.Optional[typing.Union[int, float, typing.Tuple]] = None, + _host: typing.Optional[str] = None, + _check_type: typing.Optional[bool] = None + ): + """Makes the HTTP request (synchronous) and returns deserialized data. + + To make an async_req request, set the async_req parameter. + + :param resource_path: Path to method endpoint. + :param method: Method to call. + :param path_params: Path parameters in the url. + :param query_params: Query parameters in the url. + :param header_params: Header parameters to be + placed in the request header. + :param body: Request body. + :param post_params dict: Request post form parameters, + for `application/x-www-form-urlencoded`, `multipart/form-data`. + :param auth_settings list: Auth Settings names for the request. + :param response_type: For the response, a tuple containing: + valid classes + a list containing valid classes (for list schemas) + a dict containing a tuple of valid classes as the value + Example values: + (str,) + (Pet,) + (float, none_type) + ([int, none_type],) + ({str: (bool, str, int, float, date, datetime, str, none_type)},) + :param files: key -> field name, value -> a list of open file + objects for `multipart/form-data`. + :type files: dict + :param async_req bool: execute request asynchronously + :type async_req: bool, optional + :param _return_http_data_only: response data without head status code + and headers + :type _return_http_data_only: bool, optional + :param collection_formats: dict of collection formats for path, query, + header, and post parameters. + :type collection_formats: dict, optional + :param _preload_content: if False, the urllib3.HTTPResponse object will + be returned without reading/decoding response + data. Default is True. + :type _preload_content: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _check_type: boolean describing if the data back from the server + should have its type checked. + :type _check_type: bool, optional + :return: + If async_req parameter is True, + the request will be called asynchronously. + The method will return the request thread. + If parameter async_req is False or missing, + then the method will return the response directly. + """ + if not async_req: + return self.__call_api(resource_path, method, + path_params, query_params, header_params, + body, post_params, files, + response_type, auth_settings, + _return_http_data_only, collection_formats, + _preload_content, _request_timeout, _host, + _check_type) + + return self.pool.apply_async(self.__call_api, (resource_path, + method, path_params, + query_params, + header_params, body, + post_params, files, + response_type, + auth_settings, + _return_http_data_only, + collection_formats, + _preload_content, + _request_timeout, + _host, _check_type)) + + def request(self, method, url, query_params=None, headers=None, + post_params=None, body=None, _preload_content=True, + _request_timeout=None): + """Makes the HTTP request using RESTClient.""" + if method == "GET": + return self.rest_client.GET(url, + query_params=query_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + headers=headers) + elif method == "HEAD": + return self.rest_client.HEAD(url, + query_params=query_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + headers=headers) + elif method == "OPTIONS": + return self.rest_client.OPTIONS(url, + query_params=query_params, + headers=headers, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + elif method == "POST": + return self.rest_client.POST(url, + query_params=query_params, + headers=headers, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + elif method == "PUT": + return self.rest_client.PUT(url, + query_params=query_params, + headers=headers, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + elif method == "PATCH": + return self.rest_client.PATCH(url, + query_params=query_params, + headers=headers, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + elif method == "DELETE": + return self.rest_client.DELETE(url, + query_params=query_params, + headers=headers, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + else: + raise ApiValueError( + "http method must be `GET`, `HEAD`, `OPTIONS`," + " `POST`, `PATCH`, `PUT` or `DELETE`." + ) + + def parameters_to_tuples(self, params, collection_formats): + """Get parameters as list of tuples, formatting collections. + + :param params: Parameters as dict or list of two-tuples + :param dict collection_formats: Parameter collection formats + :return: Parameters as list of tuples, collections formatted + """ + new_params = [] + if collection_formats is None: + collection_formats = {} + for k, v in params.items() if isinstance(params, dict) else params: # noqa: E501 + if k in collection_formats: + collection_format = collection_formats[k] + if collection_format == 'multi': + new_params.extend((k, value) for value in v) + else: + if collection_format == 'ssv': + delimiter = ' ' + elif collection_format == 'tsv': + delimiter = '\t' + elif collection_format == 'pipes': + delimiter = '|' + else: # csv is the default + delimiter = ',' + new_params.append( + (k, delimiter.join(str(value) for value in v))) + else: + new_params.append((k, v)) + return new_params + + @staticmethod + def get_file_data_and_close_file(file_instance: io.IOBase) -> bytes: + file_data = file_instance.read() + file_instance.close() + return file_data + + def files_parameters(self, files: typing.Optional[typing.Dict[str, typing.List[io.IOBase]]] = None): + """Builds form parameters. + + :param files: None or a dict with key=param_name and + value is a list of open file objects + :return: List of tuples of form parameters with file data + """ + if files is None: + return [] + + params = [] + for param_name, file_instances in files.items(): + if file_instances is None: + # if the file field is nullable, skip None values + continue + for file_instance in file_instances: + if file_instance is None: + # if the file field is nullable, skip None values + continue + if file_instance.closed is True: + raise ApiValueError( + "Cannot read a closed file. The passed in file_type " + "for %s must be open." % param_name + ) + filename = os.path.basename(file_instance.name) + filedata = self.get_file_data_and_close_file(file_instance) + mimetype = (mimetypes.guess_type(filename)[0] or + 'application/octet-stream') + params.append( + tuple([param_name, tuple([filename, filedata, mimetype])])) + + return params + + def select_header_accept(self, accepts): + """Returns `Accept` based on an array of accepts provided. + + :param accepts: List of headers. + :return: Accept (e.g. application/json). + """ + if not accepts: + return + + accepts = [x.lower() for x in accepts] + + if 'application/json' in accepts: + return 'application/json' + else: + return ', '.join(accepts) + + def select_header_content_type(self, content_types, method=None, body=None): + """Returns `Content-Type` based on an array of content_types provided. + + :param content_types: List of content-types. + :param method: http method (e.g. POST, PATCH). + :param body: http body to send. + :return: Content-Type (e.g. application/json). + """ + if not content_types: + return 'application/json' + + content_types = [x.lower() for x in content_types] + + if (method == 'PATCH' and + 'application/json-patch+json' in content_types and + isinstance(body, list)): + return 'application/json-patch+json' + + if 'application/json' in content_types or '*/*' in content_types: + return 'application/json' + else: + return content_types[0] + + def update_params_for_auth(self, headers, queries, auth_settings, + resource_path, method, body): + """Updates header and query params based on authentication setting. + + :param headers: Header parameters dict to be updated. + :param queries: Query parameters tuple list to be updated. + :param auth_settings: Authentication setting identifiers list. + :param resource_path: A string representation of the HTTP request resource path. + :param method: A string representation of the HTTP request method. + :param body: A object representing the body of the HTTP request. + The object type is the return value of _encoder.default(). + """ + if not auth_settings: + return + + for auth in auth_settings: + auth_setting = self.configuration.auth_settings().get(auth) + if auth_setting: + if auth_setting['in'] == 'cookie': + headers['Cookie'] = auth_setting['value'] + elif auth_setting['in'] == 'header': + if auth_setting['type'] != 'http-signature': + headers[auth_setting['key']] = auth_setting['value'] + elif auth_setting['in'] == 'query': + queries.append((auth_setting['key'], auth_setting['value'])) + else: + raise ApiValueError( + 'Authentication token must be in `query` or `header`' + ) + + +class Endpoint(object): + def __init__(self, settings=None, params_map=None, root_map=None, + headers_map=None, api_client=None, callable=None): + """Creates an endpoint + + Args: + settings (dict): see below key value pairs + 'response_type' (tuple/None): response type + 'auth' (list): a list of auth type keys + 'endpoint_path' (str): the endpoint path + 'operation_id' (str): endpoint string identifier + 'http_method' (str): POST/PUT/PATCH/GET etc + 'servers' (list): list of str servers that this endpoint is at + params_map (dict): see below key value pairs + 'all' (list): list of str endpoint parameter names + 'required' (list): list of required parameter names + 'nullable' (list): list of nullable parameter names + 'enum' (list): list of parameters with enum values + 'validation' (list): list of parameters with validations + root_map + 'validations' (dict): the dict mapping endpoint parameter tuple + paths to their validation dictionaries + 'allowed_values' (dict): the dict mapping endpoint parameter + tuple paths to their allowed_values (enum) dictionaries + 'openapi_types' (dict): param_name to openapi type + 'attribute_map' (dict): param_name to camelCase name + 'location_map' (dict): param_name to 'body', 'file', 'form', + 'header', 'path', 'query' + collection_format_map (dict): param_name to `csv` etc. + headers_map (dict): see below key value pairs + 'accept' (list): list of Accept header strings + 'content_type' (list): list of Content-Type header strings + api_client (ApiClient) api client instance + callable (function): the function which is invoked when the + Endpoint is called + """ + self.settings = settings + self.params_map = params_map + self.params_map['all'].extend([ + 'async_req', + '_host_index', + '_preload_content', + '_request_timeout', + '_return_http_data_only', + '_check_input_type', + '_check_return_type', + '_content_type', + '_spec_property_naming' + ]) + self.params_map['nullable'].extend(['_request_timeout']) + self.validations = root_map['validations'] + self.allowed_values = root_map['allowed_values'] + self.openapi_types = root_map['openapi_types'] + extra_types = { + 'async_req': (bool,), + '_host_index': (none_type, int), + '_preload_content': (bool,), + '_request_timeout': (none_type, float, (float,), [float], int, (int,), [int]), + '_return_http_data_only': (bool,), + '_check_input_type': (bool,), + '_check_return_type': (bool,), + '_spec_property_naming': (bool,), + '_content_type': (none_type, str) + } + self.openapi_types.update(extra_types) + self.attribute_map = root_map['attribute_map'] + self.location_map = root_map['location_map'] + self.collection_format_map = root_map['collection_format_map'] + self.headers_map = headers_map + self.api_client = api_client + self.callable = callable + + def __validate_inputs(self, kwargs): + for param in self.params_map['enum']: + if param in kwargs: + check_allowed_values( + self.allowed_values, + (param,), + kwargs[param] + ) + + for param in self.params_map['validation']: + if param in kwargs: + check_validations( + self.validations, + (param,), + kwargs[param], + configuration=self.api_client.configuration + ) + + if kwargs['_check_input_type'] is False: + return + + for key, value in kwargs.items(): + fixed_val = validate_and_convert_types( + value, + self.openapi_types[key], + [key], + kwargs['_spec_property_naming'], + kwargs['_check_input_type'], + configuration=self.api_client.configuration + ) + kwargs[key] = fixed_val + + def __gather_params(self, kwargs): + params = { + 'body': None, + 'collection_format': {}, + 'file': {}, + 'form': [], + 'header': {}, + 'path': {}, + 'query': [] + } + + for param_name, param_value in kwargs.items(): + param_location = self.location_map.get(param_name) + if param_location is None: + continue + if param_location: + if param_location == 'body': + params['body'] = param_value + continue + base_name = self.attribute_map[param_name] + if (param_location == 'form' and + self.openapi_types[param_name] == (file_type,)): + params['file'][base_name] = [param_value] + elif (param_location == 'form' and + self.openapi_types[param_name] == ([file_type],)): + # param_value is already a list + params['file'][base_name] = param_value + elif param_location in {'form', 'query'}: + param_value_full = (base_name, param_value) + params[param_location].append(param_value_full) + if param_location not in {'form', 'query'}: + params[param_location][base_name] = param_value + collection_format = self.collection_format_map.get(param_name) + if collection_format: + params['collection_format'][base_name] = collection_format + + return params + + def __call__(self, *args, **kwargs): + """ This method is invoked when endpoints are called + Example: + + api_instance = JobsApi() + api_instance.fetch_job # this is an instance of the class Endpoint + api_instance.fetch_job() # this invokes api_instance.fetch_job.__call__() + which then invokes the callable functions stored in that endpoint at + api_instance.fetch_job.callable or self.callable in this class + + """ + return self.callable(self, *args, **kwargs) + + def call_with_http_info(self, **kwargs): + + try: + index = self.api_client.configuration.server_operation_index.get( + self.settings['operation_id'], self.api_client.configuration.server_index + ) if kwargs['_host_index'] is None else kwargs['_host_index'] + server_variables = self.api_client.configuration.server_operation_variables.get( + self.settings['operation_id'], self.api_client.configuration.server_variables + ) + _host = self.api_client.configuration.get_host_from_settings( + index, variables=server_variables, servers=self.settings['servers'] + ) + except IndexError: + if self.settings['servers']: + raise ApiValueError( + "Invalid host index. Must be 0 <= index < %s" % + len(self.settings['servers']) + ) + _host = None + + for key, value in kwargs.items(): + if key not in self.params_map['all']: + raise ApiTypeError( + "Got an unexpected parameter '%s'" + " to method `%s`" % + (key, self.settings['operation_id']) + ) + # only throw this nullable ApiValueError if _check_input_type + # is False, if _check_input_type==True we catch this case + # in self.__validate_inputs + if (key not in self.params_map['nullable'] and value is None + and kwargs['_check_input_type'] is False): + raise ApiValueError( + "Value may not be None for non-nullable parameter `%s`" + " when calling `%s`" % + (key, self.settings['operation_id']) + ) + + for key in self.params_map['required']: + if key not in kwargs.keys(): + raise ApiValueError( + "Missing the required parameter `%s` when calling " + "`%s`" % (key, self.settings['operation_id']) + ) + + self.__validate_inputs(kwargs) + + params = self.__gather_params(kwargs) + + accept_headers_list = self.headers_map['accept'] + if accept_headers_list: + params['header']['Accept'] = self.api_client.select_header_accept( + accept_headers_list) + + if kwargs.get('_content_type'): + params['header']['Content-Type'] = kwargs['_content_type'] + else: + content_type_headers_list = self.headers_map['content_type'] + if content_type_headers_list: + if params['body'] != "": + header_list = self.api_client.select_header_content_type( + content_type_headers_list, self.settings['http_method'], + params['body']) + params['header']['Content-Type'] = header_list + + return self.api_client.call_api( + self.settings['endpoint_path'], self.settings['http_method'], + params['path'], + params['query'], + params['header'], + body=params['body'], + post_params=params['form'], + files=params['file'], + response_type=self.settings['response_type'], + auth_settings=self.settings['auth'], + async_req=kwargs['async_req'], + _check_type=kwargs['_check_return_type'], + _return_http_data_only=kwargs['_return_http_data_only'], + _preload_content=kwargs['_preload_content'], + _request_timeout=kwargs['_request_timeout'], + _host=_host, + collection_formats=params['collection_format']) diff --git a/addon/flamenco/manager/apis/__init__.py b/addon/flamenco/manager/apis/__init__.py new file mode 100644 index 00000000..47770fe6 --- /dev/null +++ b/addon/flamenco/manager/apis/__init__.py @@ -0,0 +1,18 @@ + +# flake8: noqa + +# Import all APIs into this package. +# If you have many APIs here with many many models used in each API this may +# raise a `RecursionError`. +# In order to avoid this, import only the API that you directly need like: +# +# from .api.jobs_api import JobsApi +# +# or import this package, but before doing it, use: +# +# import sys +# sys.setrecursionlimit(n) + +# Import APIs into API package: +from flamenco.manager.api.jobs_api import JobsApi +from flamenco.manager.api.worker_api import WorkerApi diff --git a/addon/flamenco/manager/configuration.py b/addon/flamenco/manager/configuration.py new file mode 100644 index 00000000..f315fa1f --- /dev/null +++ b/addon/flamenco/manager/configuration.py @@ -0,0 +1,470 @@ +""" + Flamenco manager + + Render Farm manager API # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import copy +import logging +import multiprocessing +import sys +import urllib3 + +from http import client as http_client +from flamenco.manager.exceptions import ApiValueError + + +JSON_SCHEMA_VALIDATION_KEYWORDS = { + 'multipleOf', 'maximum', 'exclusiveMaximum', + 'minimum', 'exclusiveMinimum', 'maxLength', + 'minLength', 'pattern', 'maxItems', 'minItems' +} + +class Configuration(object): + """NOTE: This class is auto generated by OpenAPI Generator + + Ref: https://openapi-generator.tech + Do not edit the class manually. + + :param host: Base url + :param api_key: Dict to store API key(s). + Each entry in the dict specifies an API key. + The dict key is the name of the security scheme in the OAS specification. + The dict value is the API key secret. + :param api_key_prefix: Dict to store API prefix (e.g. Bearer) + The dict key is the name of the security scheme in the OAS specification. + The dict value is an API key prefix when generating the auth data. + :param username: Username for HTTP basic authentication + :param password: Password for HTTP basic authentication + :param discard_unknown_keys: Boolean value indicating whether to discard + unknown properties. A server may send a response that includes additional + properties that are not known by the client in the following scenarios: + 1. The OpenAPI document is incomplete, i.e. it does not match the server + implementation. + 2. The client was generated using an older version of the OpenAPI document + and the server has been upgraded since then. + If a schema in the OpenAPI document defines the additionalProperties attribute, + then all undeclared properties received by the server are injected into the + additional properties map. In that case, there are undeclared properties, and + nothing to discard. + :param disabled_client_side_validations (string): Comma-separated list of + JSON schema validation keywords to disable JSON schema structural validation + rules. The following keywords may be specified: multipleOf, maximum, + exclusiveMaximum, minimum, exclusiveMinimum, maxLength, minLength, pattern, + maxItems, minItems. + By default, the validation is performed for data generated locally by the client + and data received from the server, independent of any validation performed by + the server side. If the input data does not satisfy the JSON schema validation + rules specified in the OpenAPI document, an exception is raised. + If disabled_client_side_validations is set, structural validation is + disabled. This can be useful to troubleshoot data validation problem, such as + when the OpenAPI document validation rules do not match the actual API data + received by the server. + :param server_index: Index to servers configuration. + :param server_variables: Mapping with string values to replace variables in + templated server configuration. The validation of enums is performed for + variables with defined enum values before. + :param server_operation_index: Mapping from operation ID to an index to server + configuration. + :param server_operation_variables: Mapping from operation ID to a mapping with + string values to replace variables in templated server configuration. + The validation of enums is performed for variables with defined enum values before. + :param ssl_ca_cert: str - the path to a file of concatenated CA certificates + in PEM format + + :Example: + + HTTP Basic Authentication Example. + Given the following security scheme in the OpenAPI specification: + components: + securitySchemes: + http_basic_auth: + type: http + scheme: basic + + Configure API client with HTTP basic authentication: + +conf = flamenco.manager.Configuration( + username='the-user', + password='the-password', +) + + """ + + _default = None + + def __init__(self, host=None, + api_key=None, api_key_prefix=None, + access_token=None, + username=None, password=None, + discard_unknown_keys=False, + disabled_client_side_validations="", + server_index=None, server_variables=None, + server_operation_index=None, server_operation_variables=None, + ssl_ca_cert=None, + ): + """Constructor + """ + self._base_path = "http://localhost" if host is None else host + """Default Base url + """ + self.server_index = 0 if server_index is None and host is None else server_index + self.server_operation_index = server_operation_index or {} + """Default server index + """ + self.server_variables = server_variables or {} + self.server_operation_variables = server_operation_variables or {} + """Default server variables + """ + self.temp_folder_path = None + """Temp file folder for downloading files + """ + # Authentication Settings + self.access_token = access_token + self.api_key = {} + if api_key: + self.api_key = api_key + """dict to store API key(s) + """ + self.api_key_prefix = {} + if api_key_prefix: + self.api_key_prefix = api_key_prefix + """dict to store API prefix (e.g. Bearer) + """ + self.refresh_api_key_hook = None + """function hook to refresh API key if expired + """ + self.username = username + """Username for HTTP basic authentication + """ + self.password = password + """Password for HTTP basic authentication + """ + self.discard_unknown_keys = discard_unknown_keys + self.disabled_client_side_validations = disabled_client_side_validations + self.logger = {} + """Logging Settings + """ + self.logger["package_logger"] = logging.getLogger("flamenco.manager") + self.logger["urllib3_logger"] = logging.getLogger("urllib3") + self.logger_format = '%(asctime)s %(levelname)s %(message)s' + """Log format + """ + self.logger_stream_handler = None + """Log stream handler + """ + self.logger_file_handler = None + """Log file handler + """ + self.logger_file = None + """Debug file location + """ + self.debug = False + """Debug switch + """ + + self.verify_ssl = True + """SSL/TLS verification + Set this to false to skip verifying SSL certificate when calling API + from https server. + """ + self.ssl_ca_cert = ssl_ca_cert + """Set this to customize the certificate file to verify the peer. + """ + self.cert_file = None + """client certificate file + """ + self.key_file = None + """client key file + """ + self.assert_hostname = None + """Set this to True/False to enable/disable SSL hostname verification. + """ + + self.connection_pool_maxsize = multiprocessing.cpu_count() * 5 + """urllib3 connection pool's maximum number of connections saved + per pool. urllib3 uses 1 connection as default value, but this is + not the best value when you are making a lot of possibly parallel + requests to the same host, which is often the case here. + cpu_count * 5 is used as default value to increase performance. + """ + + self.proxy = None + """Proxy URL + """ + self.no_proxy = None + """bypass proxy for host in the no_proxy list. + """ + self.proxy_headers = None + """Proxy headers + """ + self.safe_chars_for_path_param = '' + """Safe chars for path_param + """ + self.retries = None + """Adding retries to override urllib3 default value 3 + """ + # Enable client side validation + self.client_side_validation = True + + # Options to pass down to the underlying urllib3 socket + self.socket_options = None + + def __deepcopy__(self, memo): + cls = self.__class__ + result = cls.__new__(cls) + memo[id(self)] = result + for k, v in self.__dict__.items(): + if k not in ('logger', 'logger_file_handler'): + setattr(result, k, copy.deepcopy(v, memo)) + # shallow copy of loggers + result.logger = copy.copy(self.logger) + # use setters to configure loggers + result.logger_file = self.logger_file + result.debug = self.debug + return result + + def __setattr__(self, name, value): + object.__setattr__(self, name, value) + if name == 'disabled_client_side_validations': + s = set(filter(None, value.split(','))) + for v in s: + if v not in JSON_SCHEMA_VALIDATION_KEYWORDS: + raise ApiValueError( + "Invalid keyword: '{0}''".format(v)) + self._disabled_client_side_validations = s + + @classmethod + def set_default(cls, default): + """Set default instance of configuration. + + It stores default configuration, which can be + returned by get_default_copy method. + + :param default: object of Configuration + """ + cls._default = copy.deepcopy(default) + + @classmethod + def get_default_copy(cls): + """Return new instance of configuration. + + This method returns newly created, based on default constructor, + object of Configuration class or returns a copy of default + configuration passed by the set_default method. + + :return: The configuration object. + """ + if cls._default is not None: + return copy.deepcopy(cls._default) + return Configuration() + + @property + def logger_file(self): + """The logger file. + + If the logger_file is None, then add stream handler and remove file + handler. Otherwise, add file handler and remove stream handler. + + :param value: The logger_file path. + :type: str + """ + return self.__logger_file + + @logger_file.setter + def logger_file(self, value): + """The logger file. + + If the logger_file is None, then add stream handler and remove file + handler. Otherwise, add file handler and remove stream handler. + + :param value: The logger_file path. + :type: str + """ + self.__logger_file = value + if self.__logger_file: + # If set logging file, + # then add file handler and remove stream handler. + self.logger_file_handler = logging.FileHandler(self.__logger_file) + self.logger_file_handler.setFormatter(self.logger_formatter) + for _, logger in self.logger.items(): + logger.addHandler(self.logger_file_handler) + + @property + def debug(self): + """Debug status + + :param value: The debug status, True or False. + :type: bool + """ + return self.__debug + + @debug.setter + def debug(self, value): + """Debug status + + :param value: The debug status, True or False. + :type: bool + """ + self.__debug = value + if self.__debug: + # if debug status is True, turn on debug logging + for _, logger in self.logger.items(): + logger.setLevel(logging.DEBUG) + # turn on http_client debug + http_client.HTTPConnection.debuglevel = 1 + else: + # if debug status is False, turn off debug logging, + # setting log level to default `logging.WARNING` + for _, logger in self.logger.items(): + logger.setLevel(logging.WARNING) + # turn off http_client debug + http_client.HTTPConnection.debuglevel = 0 + + @property + def logger_format(self): + """The logger format. + + The logger_formatter will be updated when sets logger_format. + + :param value: The format string. + :type: str + """ + return self.__logger_format + + @logger_format.setter + def logger_format(self, value): + """The logger format. + + The logger_formatter will be updated when sets logger_format. + + :param value: The format string. + :type: str + """ + self.__logger_format = value + self.logger_formatter = logging.Formatter(self.__logger_format) + + def get_api_key_with_prefix(self, identifier, alias=None): + """Gets API key (with prefix if set). + + :param identifier: The identifier of apiKey. + :param alias: The alternative identifier of apiKey. + :return: The token for api key authentication. + """ + if self.refresh_api_key_hook is not None: + self.refresh_api_key_hook(self) + key = self.api_key.get(identifier, self.api_key.get(alias) if alias is not None else None) + if key: + prefix = self.api_key_prefix.get(identifier) + if prefix: + return "%s %s" % (prefix, key) + else: + return key + + def get_basic_auth_token(self): + """Gets HTTP basic authentication header (string). + + :return: The token for basic HTTP authentication. + """ + username = "" + if self.username is not None: + username = self.username + password = "" + if self.password is not None: + password = self.password + return urllib3.util.make_headers( + basic_auth=username + ':' + password + ).get('authorization') + + def auth_settings(self): + """Gets Auth Settings dict for api client. + + :return: The Auth Settings information dict. + """ + auth = {} + if self.username is not None and self.password is not None: + auth['worker_auth'] = { + 'type': 'basic', + 'in': 'header', + 'key': 'Authorization', + 'value': self.get_basic_auth_token() + } + return auth + + def to_debug_report(self): + """Gets the essential information for debugging. + + :return: The report for debugging. + """ + return "Python SDK Debug Report:\n"\ + "OS: {env}\n"\ + "Python Version: {pyversion}\n"\ + "Version of the API: 1.0.0\n"\ + "SDK Package Version: 3.0".\ + format(env=sys.platform, pyversion=sys.version) + + def get_host_settings(self): + """Gets an array of host settings + + :return: An array of host settings + """ + return [ + { + 'url': "", + 'description': "No description provided", + } + ] + + def get_host_from_settings(self, index, variables=None, servers=None): + """Gets host URL based on the index and variables + :param index: array index of the host settings + :param variables: hash of variable and the corresponding value + :param servers: an array of host settings or None + :return: URL based on host settings + """ + if index is None: + return self._base_path + + variables = {} if variables is None else variables + servers = self.get_host_settings() if servers is None else servers + + try: + server = servers[index] + except IndexError: + raise ValueError( + "Invalid index {0} when selecting the host settings. " + "Must be less than {1}".format(index, len(servers))) + + url = server['url'] + + # go through variables and replace placeholders + for variable_name, variable in server.get('variables', {}).items(): + used_value = variables.get( + variable_name, variable['default_value']) + + if 'enum_values' in variable \ + and used_value not in variable['enum_values']: + raise ValueError( + "The variable `{0}` in the host URL has invalid value " + "{1}. Must be {2}.".format( + variable_name, variables[variable_name], + variable['enum_values'])) + + url = url.replace("{" + variable_name + "}", used_value) + + return url + + @property + def host(self): + """Return generated host.""" + return self.get_host_from_settings(self.server_index, variables=self.server_variables) + + @host.setter + def host(self, value): + """Fix base path.""" + self._base_path = value + self.server_index = None diff --git a/addon/flamenco/manager/docs/AssignedTask.md b/addon/flamenco/manager/docs/AssignedTask.md new file mode 100644 index 00000000..2588609e --- /dev/null +++ b/addon/flamenco/manager/docs/AssignedTask.md @@ -0,0 +1,21 @@ +# AssignedTask + +AssignedTask is a task as it is received by the Worker. + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**uuid** | **str** | | +**job** | **str** | | +**name** | **str** | | +**status** | [**TaskStatus**](TaskStatus.md) | | +**priority** | **int** | | +**job_priority** | **int** | | +**job_type** | **str** | | +**task_type** | **str** | | +**commands** | [**[Command]**](Command.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/AvailableJobSetting.md b/addon/flamenco/manager/docs/AvailableJobSetting.md new file mode 100644 index 00000000..85d58882 --- /dev/null +++ b/addon/flamenco/manager/docs/AvailableJobSetting.md @@ -0,0 +1,20 @@ +# AvailableJobSetting + +Single setting of a Job types. + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**key** | **str** | Identifier for the setting, must be unique within the job type. | +**type** | [**AvailableJobSettingType**](AvailableJobSettingType.md) | | +**subtype** | [**AvailableJobSettingSubtype**](AvailableJobSettingSubtype.md) | | [optional] +**choices** | **[str]** | When given, limit the valid values to these choices. Only usable with string type. | [optional] +**default** | **bool, date, datetime, dict, float, int, list, str, none_type** | The default value shown to the user when determining this setting. | [optional] +**visible** | **bool** | Whether to show this setting in the UI of a job submitter (like a Blender add-on). Set to `false` when it is an internal setting that shouldn't be shown to end users. | [optional] if omitted the server will use the default value of True +**required** | **bool** | Whether to immediately reject a job definition, of this type, without this particular setting. | [optional] if omitted the server will use the default value of False +**editable** | **bool** | Whether to allow editing this setting after the job has been submitted. Would imply deleting all existing tasks for this job, and recompiling it. | [optional] if omitted the server will use the default value of False +**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/AvailableJobSettingSubtype.md b/addon/flamenco/manager/docs/AvailableJobSettingSubtype.md new file mode 100644 index 00000000..dc44f98b --- /dev/null +++ b/addon/flamenco/manager/docs/AvailableJobSettingSubtype.md @@ -0,0 +1,12 @@ +# AvailableJobSettingSubtype + +Sub-type of the job setting. Currently only available for string types. `HASHED_FILE_PATH` is a directory path + `\"/######\"` appended. + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**value** | **str** | Sub-type of the job setting. Currently only available for string types. `HASHED_FILE_PATH` is a directory path + `\"/######\"` appended. | must be one of ["file_path", "dir_path", "file_name", "hashed_file_path", ] + +[[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/AvailableJobSettingType.md b/addon/flamenco/manager/docs/AvailableJobSettingType.md new file mode 100644 index 00000000..6e2b82e5 --- /dev/null +++ b/addon/flamenco/manager/docs/AvailableJobSettingType.md @@ -0,0 +1,12 @@ +# AvailableJobSettingType + +Type of job setting, must be usable as IDProperty type in Blender. No nested structures (arrays, dictionaries) are supported. + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**value** | **str** | Type of job setting, must be usable as IDProperty type in Blender. No nested structures (arrays, dictionaries) are supported. | must be one of ["string", "int32", "float", "bool", ] + +[[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/AvailableJobType.md b/addon/flamenco/manager/docs/AvailableJobType.md new file mode 100644 index 00000000..11026c80 --- /dev/null +++ b/addon/flamenco/manager/docs/AvailableJobType.md @@ -0,0 +1,15 @@ +# AvailableJobType + +Job type supported by this Manager, and its parameters. + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **str** | | +**label** | **str** | | +**settings** | [**[AvailableJobSetting]**](AvailableJobSetting.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/AvailableJobTypes.md b/addon/flamenco/manager/docs/AvailableJobTypes.md new file mode 100644 index 00000000..8188cc79 --- /dev/null +++ b/addon/flamenco/manager/docs/AvailableJobTypes.md @@ -0,0 +1,13 @@ +# AvailableJobTypes + +List of job types supported by this Manager. + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**job_types** | [**[AvailableJobType]**](AvailableJobType.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/Command.md b/addon/flamenco/manager/docs/Command.md new file mode 100644 index 00000000..b97a7eac --- /dev/null +++ b/addon/flamenco/manager/docs/Command.md @@ -0,0 +1,14 @@ +# Command + +Command represents a single command to execute by the Worker. + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **str** | | +**parameters** | **{str: (bool, date, datetime, dict, float, int, list, str, none_type)}** | | +**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/Configuration.md b/addon/flamenco/manager/docs/Configuration.md new file mode 100644 index 00000000..924e0587 --- /dev/null +++ b/addon/flamenco/manager/docs/Configuration.md @@ -0,0 +1,14 @@ +# Configuration + +Flamenco Manager configuration + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**meta** | [**ConfigurationMeta**](ConfigurationMeta.md) | | +**settings** | **{str: (bool, date, datetime, dict, float, int, list, str, none_type)}** | Key-value pairs for settings. | +**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/ConfigurationMeta.md b/addon/flamenco/manager/docs/ConfigurationMeta.md new file mode 100644 index 00000000..322b81bb --- /dev/null +++ b/addon/flamenco/manager/docs/ConfigurationMeta.md @@ -0,0 +1,12 @@ +# ConfigurationMeta + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**schema_version** | **int** | | +**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/Error.md b/addon/flamenco/manager/docs/Error.md new file mode 100644 index 00000000..30f6c7c7 --- /dev/null +++ b/addon/flamenco/manager/docs/Error.md @@ -0,0 +1,13 @@ +# Error + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**code** | **int** | | +**message** | **str** | | +**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/Job.md b/addon/flamenco/manager/docs/Job.md new file mode 100644 index 00000000..b78e5320 --- /dev/null +++ b/addon/flamenco/manager/docs/Job.md @@ -0,0 +1,20 @@ +# Job + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **str** | | +**type** | **str** | | +**id** | **str** | UUID of the Job | +**created** | **datetime** | Creation timestamp | +**updated** | **datetime** | Creation timestamp | +**status** | [**JobStatus**](JobStatus.md) | | +**priority** | **int** | | defaults to 50 +**settings** | [**JobSettings**](JobSettings.md) | | [optional] +**metadata** | [**JobMetadata**](JobMetadata.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/docs/JobAllOf.md b/addon/flamenco/manager/docs/JobAllOf.md new file mode 100644 index 00000000..5e9b75a5 --- /dev/null +++ b/addon/flamenco/manager/docs/JobAllOf.md @@ -0,0 +1,15 @@ +# JobAllOf + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **str** | UUID of the Job | +**created** | **datetime** | Creation timestamp | +**updated** | **datetime** | Creation timestamp | +**status** | [**JobStatus**](JobStatus.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/JobMetadata.md b/addon/flamenco/manager/docs/JobMetadata.md new file mode 100644 index 00000000..5292e9a7 --- /dev/null +++ b/addon/flamenco/manager/docs/JobMetadata.md @@ -0,0 +1,12 @@ +# JobMetadata + +Arbitrary metadata strings. More complex structures can be modeled by using `a.b.c` notation for the key. + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**any string name** | **str** | 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/JobSettings.md b/addon/flamenco/manager/docs/JobSettings.md new file mode 100644 index 00000000..ec896639 --- /dev/null +++ b/addon/flamenco/manager/docs/JobSettings.md @@ -0,0 +1,11 @@ +# JobSettings + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**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/JobStatus.md b/addon/flamenco/manager/docs/JobStatus.md new file mode 100644 index 00000000..73b55d79 --- /dev/null +++ b/addon/flamenco/manager/docs/JobStatus.md @@ -0,0 +1,11 @@ +# JobStatus + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**value** | **str** | | must be one of ["active", "canceled", "completed", "construction-failed", "failed", "paused", "queued", "archived", "archiving", "cancel-requested", "fail-requested", "requeued", "under-construction", "waiting-for-files", ] + +[[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/JobsApi.md b/addon/flamenco/manager/docs/JobsApi.md new file mode 100644 index 00000000..4b1c58c1 --- /dev/null +++ b/addon/flamenco/manager/docs/JobsApi.md @@ -0,0 +1,212 @@ +# flamenco.manager.JobsApi + +All URIs are relative to *http://localhost* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**fetch_job**](JobsApi.md#fetch_job) | **GET** /api/jobs/{job_id} | Fetch info about the job. +[**get_job_types**](JobsApi.md#get_job_types) | **GET** /api/jobs/types | Get list of job types and their parameters. +[**submit_job**](JobsApi.md#submit_job) | **POST** /api/jobs | Submit a new job for Flamenco Manager to execute. + + +# **fetch_job** +> Job fetch_job(job_id) + +Fetch info about the job. + +### Example + + +```python +import time +import flamenco.manager +from flamenco.manager.api import jobs_api +from flamenco.manager.model.job import Job +from pprint import pprint +# Defining the host is optional and defaults to http://localhost +# See configuration.py for a list of all supported configuration parameters. +configuration = flamenco.manager.Configuration( + host = "http://localhost" +) + + +# Enter a context with an instance of the API client +with flamenco.manager.ApiClient() as api_client: + # Create an instance of the API class + api_instance = jobs_api.JobsApi(api_client) + job_id = "job_id_example" # str | + + # example passing only required values which don't have defaults set + try: + # Fetch info about the job. + api_response = api_instance.fetch_job(job_id) + pprint(api_response) + except flamenco.manager.ApiException as e: + print("Exception when calling JobsApi->fetch_job: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **job_id** | **str**| | + +### Return type + +[**Job**](Job.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Job info | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_job_types** +> AvailableJobTypes get_job_types() + +Get list of job types and their parameters. + +### Example + + +```python +import time +import flamenco.manager +from flamenco.manager.api import jobs_api +from flamenco.manager.model.available_job_types import AvailableJobTypes +from pprint import pprint +# Defining the host is optional and defaults to http://localhost +# See configuration.py for a list of all supported configuration parameters. +configuration = flamenco.manager.Configuration( + host = "http://localhost" +) + + +# Enter a context with an instance of the API client +with flamenco.manager.ApiClient() as api_client: + # Create an instance of the API class + api_instance = jobs_api.JobsApi(api_client) + + # example, this endpoint has no required or optional parameters + try: + # Get list of job types and their parameters. + api_response = api_instance.get_job_types() + pprint(api_response) + except flamenco.manager.ApiException as e: + print("Exception when calling JobsApi->get_job_types: %s\n" % e) +``` + + +### Parameters +This endpoint does not need any parameter. + +### Return type + +[**AvailableJobTypes**](AvailableJobTypes.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Available job types | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **submit_job** +> SubmittedJob submit_job(submitted_job) + +Submit a new job for Flamenco Manager to execute. + +### Example + + +```python +import time +import flamenco.manager +from flamenco.manager.api import jobs_api +from flamenco.manager.model.submitted_job import SubmittedJob +from flamenco.manager.model.error import Error +from pprint import pprint +# Defining the host is optional and defaults to http://localhost +# See configuration.py for a list of all supported configuration parameters. +configuration = flamenco.manager.Configuration( + host = "http://localhost" +) + + +# Enter a context with an instance of the API client +with flamenco.manager.ApiClient() as api_client: + # Create an instance of the API class + api_instance = jobs_api.JobsApi(api_client) + submitted_job = SubmittedJob( + name="name_example", + type="type_example", + priority=50, + settings=JobSettings(), + metadata=JobMetadata( + key="key_example", + ), + ) # SubmittedJob | Job to submit + + # example passing only required values which don't have defaults set + try: + # Submit a new job for Flamenco Manager to execute. + api_response = api_instance.submit_job(submitted_job) + pprint(api_response) + except flamenco.manager.ApiException as e: + print("Exception when calling JobsApi->submit_job: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **submitted_job** | [**SubmittedJob**](SubmittedJob.md)| Job to submit | + +### Return type + +[**SubmittedJob**](SubmittedJob.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Job was succesfully compiled into individual tasks. | - | +**0** | Error message | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/addon/flamenco/manager/docs/RegisteredWorker.md b/addon/flamenco/manager/docs/RegisteredWorker.md new file mode 100644 index 00000000..55d669c8 --- /dev/null +++ b/addon/flamenco/manager/docs/RegisteredWorker.md @@ -0,0 +1,19 @@ +# RegisteredWorker + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**uuid** | **str** | | +**nickname** | **str** | | +**address** | **str** | | +**status** | [**WorkerStatus**](WorkerStatus.md) | | +**platform** | **str** | | +**last_activity** | **str** | | +**software** | **str** | | +**supported_task_types** | **[str]** | | +**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/SecurityError.md b/addon/flamenco/manager/docs/SecurityError.md new file mode 100644 index 00000000..4000e541 --- /dev/null +++ b/addon/flamenco/manager/docs/SecurityError.md @@ -0,0 +1,12 @@ +# SecurityError + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**message** | **str** | | +**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/SubmittedJob.md b/addon/flamenco/manager/docs/SubmittedJob.md new file mode 100644 index 00000000..1bb48005 --- /dev/null +++ b/addon/flamenco/manager/docs/SubmittedJob.md @@ -0,0 +1,17 @@ +# SubmittedJob + +Job definition submitted to Flamenco. + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **str** | | +**type** | **str** | | +**priority** | **int** | | defaults to 50 +**settings** | [**JobSettings**](JobSettings.md) | | [optional] +**metadata** | [**JobMetadata**](JobMetadata.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/docs/TaskStatus.md b/addon/flamenco/manager/docs/TaskStatus.md new file mode 100644 index 00000000..c47ffb07 --- /dev/null +++ b/addon/flamenco/manager/docs/TaskStatus.md @@ -0,0 +1,11 @@ +# TaskStatus + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**value** | **str** | | must be one of ["active", "canceled", "completed", "failed", "queued", "soft-failed", "cancel-requested", "paused", ] + +[[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/TaskUpdate.md b/addon/flamenco/manager/docs/TaskUpdate.md new file mode 100644 index 00000000..8f09de6a --- /dev/null +++ b/addon/flamenco/manager/docs/TaskUpdate.md @@ -0,0 +1,15 @@ +# TaskUpdate + +TaskUpdate is sent by a Worker to update the status & logs of a task it's executing. + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**task_status** | [**TaskStatus**](TaskStatus.md) | | [optional] +**activity** | **str** | One-liner to indicate what's currently happening with the task. Overwrites previously sent activity strings. | [optional] +**log** | **str** | Log lines for this task | [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/docs/WorkerApi.md b/addon/flamenco/manager/docs/WorkerApi.md new file mode 100644 index 00000000..59ba64b3 --- /dev/null +++ b/addon/flamenco/manager/docs/WorkerApi.md @@ -0,0 +1,562 @@ +# flamenco.manager.WorkerApi + +All URIs are relative to *http://localhost* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**register_worker**](WorkerApi.md#register_worker) | **POST** /api/worker/register-worker | Register a new worker +[**schedule_task**](WorkerApi.md#schedule_task) | **POST** /api/worker/task | Obtain a new task to execute +[**sign_off**](WorkerApi.md#sign_off) | **POST** /api/worker/sign-off | Mark the worker as offline +[**sign_on**](WorkerApi.md#sign_on) | **POST** /api/worker/sign-on | Authenticate & sign in the worker. +[**task_update**](WorkerApi.md#task_update) | **POST** /api/worker/task/{task_id} | Update the task, typically to indicate progress, completion, or failure. +[**worker_state**](WorkerApi.md#worker_state) | **GET** /api/worker/state | +[**worker_state_changed**](WorkerApi.md#worker_state_changed) | **POST** /api/worker/state-changed | Worker changed state. This could be as acknowledgement of a Manager-requested state change, or in response to worker-local signals. + + +# **register_worker** +> RegisteredWorker register_worker(worker_registration) + +Register a new worker + +### Example + + +```python +import time +import flamenco.manager +from flamenco.manager.api import worker_api +from flamenco.manager.model.error import Error +from flamenco.manager.model.worker_registration import WorkerRegistration +from flamenco.manager.model.registered_worker import RegisteredWorker +from pprint import pprint +# Defining the host is optional and defaults to http://localhost +# See configuration.py for a list of all supported configuration parameters. +configuration = flamenco.manager.Configuration( + host = "http://localhost" +) + + +# Enter a context with an instance of the API client +with flamenco.manager.ApiClient() as api_client: + # Create an instance of the API class + api_instance = worker_api.WorkerApi(api_client) + worker_registration = WorkerRegistration( + secret="secret_example", + platform="platform_example", + supported_task_types=[ + "supported_task_types_example", + ], + nickname="nickname_example", + ) # WorkerRegistration | Worker to register + + # example passing only required values which don't have defaults set + try: + # Register a new worker + api_response = api_instance.register_worker(worker_registration) + pprint(api_response) + except flamenco.manager.ApiException as e: + print("Exception when calling WorkerApi->register_worker: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **worker_registration** | [**WorkerRegistration**](WorkerRegistration.md)| Worker to register | + +### Return type + +[**RegisteredWorker**](RegisteredWorker.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | normal response | - | +**0** | unexpected error | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **schedule_task** +> AssignedTask schedule_task() + +Obtain a new task to execute + +### Example + +* Basic Authentication (worker_auth): + +```python +import time +import flamenco.manager +from flamenco.manager.api import worker_api +from flamenco.manager.model.worker_state_change import WorkerStateChange +from flamenco.manager.model.security_error import SecurityError +from flamenco.manager.model.assigned_task import AssignedTask +from pprint import pprint +# Defining the host is optional and defaults to http://localhost +# See configuration.py for a list of all supported configuration parameters. +configuration = flamenco.manager.Configuration( + host = "http://localhost" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure HTTP basic authorization: worker_auth +configuration = flamenco.manager.Configuration( + username = 'YOUR_USERNAME', + password = 'YOUR_PASSWORD' +) + +# Enter a context with an instance of the API client +with flamenco.manager.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = worker_api.WorkerApi(api_client) + + # example, this endpoint has no required or optional parameters + try: + # Obtain a new task to execute + api_response = api_instance.schedule_task() + pprint(api_response) + except flamenco.manager.ApiException as e: + print("Exception when calling WorkerApi->schedule_task: %s\n" % e) +``` + + +### Parameters +This endpoint does not need any parameter. + +### Return type + +[**AssignedTask**](AssignedTask.md) + +### Authorization + +[worker_auth](../README.md#worker_auth) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | No tasks available for this Worker. | - | +**200** | Task to execute. | - | +**403** | Permission Denied | - | +**409** | Worker is not in the active state, so is not allowed to execute tasks right now. | - | +**423** | Worker cannot obtain new tasks, but must go to another state. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **sign_off** +> sign_off() + +Mark the worker as offline + +### Example + +* Basic Authentication (worker_auth): + +```python +import time +import flamenco.manager +from flamenco.manager.api import worker_api +from flamenco.manager.model.error import Error +from pprint import pprint +# Defining the host is optional and defaults to http://localhost +# See configuration.py for a list of all supported configuration parameters. +configuration = flamenco.manager.Configuration( + host = "http://localhost" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure HTTP basic authorization: worker_auth +configuration = flamenco.manager.Configuration( + username = 'YOUR_USERNAME', + password = 'YOUR_PASSWORD' +) + +# Enter a context with an instance of the API client +with flamenco.manager.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = worker_api.WorkerApi(api_client) + + # example, this endpoint has no required or optional parameters + try: + # Mark the worker as offline + api_instance.sign_off() + except flamenco.manager.ApiException as e: + print("Exception when calling WorkerApi->sign_off: %s\n" % e) +``` + + +### Parameters +This endpoint does not need any parameter. + +### Return type + +void (empty response body) + +### Authorization + +[worker_auth](../README.md#worker_auth) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | normal response | - | +**0** | unexpected error | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **sign_on** +> WorkerStateChange sign_on(worker_sign_on) + +Authenticate & sign in the worker. + +### Example + +* Basic Authentication (worker_auth): + +```python +import time +import flamenco.manager +from flamenco.manager.api import worker_api +from flamenco.manager.model.error import Error +from flamenco.manager.model.worker_state_change import WorkerStateChange +from flamenco.manager.model.worker_sign_on import WorkerSignOn +from pprint import pprint +# Defining the host is optional and defaults to http://localhost +# See configuration.py for a list of all supported configuration parameters. +configuration = flamenco.manager.Configuration( + host = "http://localhost" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure HTTP basic authorization: worker_auth +configuration = flamenco.manager.Configuration( + username = 'YOUR_USERNAME', + password = 'YOUR_PASSWORD' +) + +# Enter a context with an instance of the API client +with flamenco.manager.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = worker_api.WorkerApi(api_client) + worker_sign_on = WorkerSignOn( + nickname="nickname_example", + supported_task_types=[ + "supported_task_types_example", + ], + software_version="software_version_example", + ) # WorkerSignOn | Worker metadata + + # example passing only required values which don't have defaults set + try: + # Authenticate & sign in the worker. + api_response = api_instance.sign_on(worker_sign_on) + pprint(api_response) + except flamenco.manager.ApiException as e: + print("Exception when calling WorkerApi->sign_on: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **worker_sign_on** | [**WorkerSignOn**](WorkerSignOn.md)| Worker metadata | + +### Return type + +[**WorkerStateChange**](WorkerStateChange.md) + +### Authorization + +[worker_auth](../README.md#worker_auth) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | normal response | - | +**0** | unexpected error | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **task_update** +> task_update(task_id, task_update) + +Update the task, typically to indicate progress, completion, or failure. + +### Example + +* Basic Authentication (worker_auth): + +```python +import time +import flamenco.manager +from flamenco.manager.api import worker_api +from flamenco.manager.model.error import Error +from flamenco.manager.model.task_update import TaskUpdate +from pprint import pprint +# Defining the host is optional and defaults to http://localhost +# See configuration.py for a list of all supported configuration parameters. +configuration = flamenco.manager.Configuration( + host = "http://localhost" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure HTTP basic authorization: worker_auth +configuration = flamenco.manager.Configuration( + username = 'YOUR_USERNAME', + password = 'YOUR_PASSWORD' +) + +# Enter a context with an instance of the API client +with flamenco.manager.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = worker_api.WorkerApi(api_client) + task_id = "task_id_example" # str | + task_update = TaskUpdate( + task_status=TaskStatus("active"), + activity="activity_example", + log="log_example", + ) # TaskUpdate | Task update information + + # example passing only required values which don't have defaults set + try: + # Update the task, typically to indicate progress, completion, or failure. + api_instance.task_update(task_id, task_update) + except flamenco.manager.ApiException as e: + print("Exception when calling WorkerApi->task_update: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **task_id** | **str**| | + **task_update** | [**TaskUpdate**](TaskUpdate.md)| Task update information | + +### Return type + +void (empty response body) + +### Authorization + +[worker_auth](../README.md#worker_auth) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | The update was accepted. | - | +**409** | The task is assigned to another worker, so the update was not accepted. | - | +**0** | unexpected error | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **worker_state** +> WorkerStateChange worker_state() + + + +### Example + +* Basic Authentication (worker_auth): + +```python +import time +import flamenco.manager +from flamenco.manager.api import worker_api +from flamenco.manager.model.error import Error +from flamenco.manager.model.worker_state_change import WorkerStateChange +from pprint import pprint +# Defining the host is optional and defaults to http://localhost +# See configuration.py for a list of all supported configuration parameters. +configuration = flamenco.manager.Configuration( + host = "http://localhost" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure HTTP basic authorization: worker_auth +configuration = flamenco.manager.Configuration( + username = 'YOUR_USERNAME', + password = 'YOUR_PASSWORD' +) + +# Enter a context with an instance of the API client +with flamenco.manager.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = worker_api.WorkerApi(api_client) + + # example, this endpoint has no required or optional parameters + try: + api_response = api_instance.worker_state() + pprint(api_response) + except flamenco.manager.ApiException as e: + print("Exception when calling WorkerApi->worker_state: %s\n" % e) +``` + + +### Parameters +This endpoint does not need any parameter. + +### Return type + +[**WorkerStateChange**](WorkerStateChange.md) + +### Authorization + +[worker_auth](../README.md#worker_auth) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | no state change requested | - | +**200** | state change requested | - | +**0** | unexpected error | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **worker_state_changed** +> worker_state_changed(worker_state_changed) + +Worker changed state. This could be as acknowledgement of a Manager-requested state change, or in response to worker-local signals. + +### Example + +* Basic Authentication (worker_auth): + +```python +import time +import flamenco.manager +from flamenco.manager.api import worker_api +from flamenco.manager.model.error import Error +from flamenco.manager.model.worker_state_changed import WorkerStateChanged +from pprint import pprint +# Defining the host is optional and defaults to http://localhost +# See configuration.py for a list of all supported configuration parameters. +configuration = flamenco.manager.Configuration( + host = "http://localhost" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure HTTP basic authorization: worker_auth +configuration = flamenco.manager.Configuration( + username = 'YOUR_USERNAME', + password = 'YOUR_PASSWORD' +) + +# Enter a context with an instance of the API client +with flamenco.manager.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = worker_api.WorkerApi(api_client) + worker_state_changed = WorkerStateChanged( + status=WorkerStatus("starting"), + ) # WorkerStateChanged | New worker state + + # example passing only required values which don't have defaults set + try: + # Worker changed state. This could be as acknowledgement of a Manager-requested state change, or in response to worker-local signals. + api_instance.worker_state_changed(worker_state_changed) + except flamenco.manager.ApiException as e: + print("Exception when calling WorkerApi->worker_state_changed: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **worker_state_changed** | [**WorkerStateChanged**](WorkerStateChanged.md)| New worker state | + +### Return type + +void (empty response body) + +### Authorization + +[worker_auth](../README.md#worker_auth) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | normal response | - | +**0** | unexpected error | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/addon/flamenco/manager/docs/WorkerRegistration.md b/addon/flamenco/manager/docs/WorkerRegistration.md new file mode 100644 index 00000000..a98c8228 --- /dev/null +++ b/addon/flamenco/manager/docs/WorkerRegistration.md @@ -0,0 +1,15 @@ +# WorkerRegistration + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**secret** | **str** | | +**platform** | **str** | | +**supported_task_types** | **[str]** | | +**nickname** | **str** | | +**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/WorkerSignOn.md b/addon/flamenco/manager/docs/WorkerSignOn.md new file mode 100644 index 00000000..888c6da4 --- /dev/null +++ b/addon/flamenco/manager/docs/WorkerSignOn.md @@ -0,0 +1,14 @@ +# WorkerSignOn + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**nickname** | **str** | | +**supported_task_types** | **[str]** | | +**software_version** | **str** | | +**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/WorkerStateChange.md b/addon/flamenco/manager/docs/WorkerStateChange.md new file mode 100644 index 00000000..4144342e --- /dev/null +++ b/addon/flamenco/manager/docs/WorkerStateChange.md @@ -0,0 +1,12 @@ +# WorkerStateChange + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**status_requested** | [**WorkerStatus**](WorkerStatus.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/WorkerStateChanged.md b/addon/flamenco/manager/docs/WorkerStateChanged.md new file mode 100644 index 00000000..cae26dff --- /dev/null +++ b/addon/flamenco/manager/docs/WorkerStateChanged.md @@ -0,0 +1,12 @@ +# WorkerStateChanged + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**status** | [**WorkerStatus**](WorkerStatus.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/WorkerStatus.md b/addon/flamenco/manager/docs/WorkerStatus.md new file mode 100644 index 00000000..5eaf4606 --- /dev/null +++ b/addon/flamenco/manager/docs/WorkerStatus.md @@ -0,0 +1,11 @@ +# WorkerStatus + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**value** | **str** | | must be one of ["starting", "awake", "asleep", "error", "shutdown", "testing", "offline", ] + +[[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/exceptions.py b/addon/flamenco/manager/exceptions.py new file mode 100644 index 00000000..be9c3756 --- /dev/null +++ b/addon/flamenco/manager/exceptions.py @@ -0,0 +1,159 @@ +""" + Flamenco manager + + Render Farm manager API # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + + +class OpenApiException(Exception): + """The base exception class for all OpenAPIExceptions""" + + +class ApiTypeError(OpenApiException, TypeError): + def __init__(self, msg, path_to_item=None, valid_classes=None, + key_type=None): + """ Raises an exception for TypeErrors + + Args: + msg (str): the exception message + + Keyword Args: + path_to_item (list): a list of keys an indices to get to the + current_item + None if unset + valid_classes (tuple): the primitive classes that current item + should be an instance of + None if unset + key_type (bool): False if our value is a value in a dict + True if it is a key in a dict + False if our item is an item in a list + None if unset + """ + self.path_to_item = path_to_item + self.valid_classes = valid_classes + self.key_type = key_type + full_msg = msg + if path_to_item: + full_msg = "{0} at {1}".format(msg, render_path(path_to_item)) + super(ApiTypeError, self).__init__(full_msg) + + +class ApiValueError(OpenApiException, ValueError): + def __init__(self, msg, path_to_item=None): + """ + Args: + msg (str): the exception message + + Keyword Args: + path_to_item (list) the path to the exception in the + received_data dict. None if unset + """ + + self.path_to_item = path_to_item + full_msg = msg + if path_to_item: + full_msg = "{0} at {1}".format(msg, render_path(path_to_item)) + super(ApiValueError, self).__init__(full_msg) + + +class ApiAttributeError(OpenApiException, AttributeError): + def __init__(self, msg, path_to_item=None): + """ + Raised when an attribute reference or assignment fails. + + Args: + msg (str): the exception message + + Keyword Args: + path_to_item (None/list) the path to the exception in the + received_data dict + """ + self.path_to_item = path_to_item + full_msg = msg + if path_to_item: + full_msg = "{0} at {1}".format(msg, render_path(path_to_item)) + super(ApiAttributeError, self).__init__(full_msg) + + +class ApiKeyError(OpenApiException, KeyError): + def __init__(self, msg, path_to_item=None): + """ + Args: + msg (str): the exception message + + Keyword Args: + path_to_item (None/list) the path to the exception in the + received_data dict + """ + self.path_to_item = path_to_item + full_msg = msg + if path_to_item: + full_msg = "{0} at {1}".format(msg, render_path(path_to_item)) + super(ApiKeyError, self).__init__(full_msg) + + +class ApiException(OpenApiException): + + def __init__(self, status=None, reason=None, http_resp=None): + if http_resp: + self.status = http_resp.status + self.reason = http_resp.reason + self.body = http_resp.data + self.headers = http_resp.getheaders() + else: + self.status = status + self.reason = reason + self.body = None + self.headers = None + + def __str__(self): + """Custom error messages for exception""" + error_message = "({0})\n"\ + "Reason: {1}\n".format(self.status, self.reason) + if self.headers: + error_message += "HTTP response headers: {0}\n".format( + self.headers) + + if self.body: + error_message += "HTTP response body: {0}\n".format(self.body) + + return error_message + + +class NotFoundException(ApiException): + + def __init__(self, status=None, reason=None, http_resp=None): + super(NotFoundException, self).__init__(status, reason, http_resp) + + +class UnauthorizedException(ApiException): + + def __init__(self, status=None, reason=None, http_resp=None): + super(UnauthorizedException, self).__init__(status, reason, http_resp) + + +class ForbiddenException(ApiException): + + def __init__(self, status=None, reason=None, http_resp=None): + super(ForbiddenException, self).__init__(status, reason, http_resp) + + +class ServiceException(ApiException): + + def __init__(self, status=None, reason=None, http_resp=None): + super(ServiceException, self).__init__(status, reason, http_resp) + + +def render_path(path_to_item): + """Returns a string representation of a path""" + result = "" + for pth in path_to_item: + if isinstance(pth, int): + result += "[{0}]".format(pth) + else: + result += "['{0}']".format(pth) + return result diff --git a/addon/flamenco/manager/model/__init__.py b/addon/flamenco/manager/model/__init__.py new file mode 100644 index 00000000..cfe32b78 --- /dev/null +++ b/addon/flamenco/manager/model/__init__.py @@ -0,0 +1,5 @@ +# we can not import model classes here because that would create a circular +# reference which would not work in python2 +# do not import all models into this module because that uses a lot of memory and stack frames +# if you need the ability to import all models from one package, import them with +# from {{packageName}.models import ModelA, ModelB diff --git a/addon/flamenco/manager/model/assigned_task.py b/addon/flamenco/manager/model/assigned_task.py new file mode 100644 index 00000000..1908e963 --- /dev/null +++ b/addon/flamenco/manager/model/assigned_task.py @@ -0,0 +1,317 @@ +""" + 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.command import Command + from flamenco.manager.model.task_status import TaskStatus + globals()['Command'] = Command + globals()['TaskStatus'] = TaskStatus + + +class AssignedTask(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 { + 'uuid': (str,), # noqa: E501 + 'job': (str,), # noqa: E501 + 'name': (str,), # noqa: E501 + 'status': (TaskStatus,), # noqa: E501 + 'priority': (int,), # noqa: E501 + 'job_priority': (int,), # noqa: E501 + 'job_type': (str,), # noqa: E501 + 'task_type': (str,), # noqa: E501 + 'commands': ([Command],), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'uuid': 'uuid', # noqa: E501 + 'job': 'job', # noqa: E501 + 'name': 'name', # noqa: E501 + 'status': 'status', # noqa: E501 + 'priority': 'priority', # noqa: E501 + 'job_priority': 'job_priority', # noqa: E501 + 'job_type': 'job_type', # noqa: E501 + 'task_type': 'task_type', # noqa: E501 + 'commands': 'commands', # noqa: E501 + } + + read_only_vars = { + } + + _composed_schemas = {} + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, uuid, job, name, status, priority, job_priority, job_type, task_type, commands, *args, **kwargs): # noqa: E501 + """AssignedTask - a model defined in OpenAPI + + Args: + uuid (str): + job (str): + name (str): + status (TaskStatus): + priority (int): + job_priority (int): + job_type (str): + task_type (str): + commands ([Command]): + + 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.uuid = uuid + self.job = job + self.name = name + self.status = status + self.priority = priority + self.job_priority = job_priority + self.job_type = job_type + self.task_type = task_type + self.commands = commands + 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, uuid, job, name, status, priority, job_priority, job_type, task_type, commands, *args, **kwargs): # noqa: E501 + """AssignedTask - a model defined in OpenAPI + + Args: + uuid (str): + job (str): + name (str): + status (TaskStatus): + priority (int): + job_priority (int): + job_type (str): + task_type (str): + commands ([Command]): + + 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.uuid = uuid + self.job = job + self.name = name + self.status = status + self.priority = priority + self.job_priority = job_priority + self.job_type = job_type + self.task_type = task_type + self.commands = commands + 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/available_job_setting.py b/addon/flamenco/manager/model/available_job_setting.py new file mode 100644 index 00000000..39939064 --- /dev/null +++ b/addon/flamenco/manager/model/available_job_setting.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.available_job_setting_subtype import AvailableJobSettingSubtype + from flamenco.manager.model.available_job_setting_type import AvailableJobSettingType + globals()['AvailableJobSettingSubtype'] = AvailableJobSettingSubtype + globals()['AvailableJobSettingType'] = AvailableJobSettingType + + +class AvailableJobSetting(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 { + 'key': (str,), # noqa: E501 + 'type': (AvailableJobSettingType,), # noqa: E501 + 'subtype': (AvailableJobSettingSubtype,), # noqa: E501 + 'choices': ([str],), # noqa: E501 + 'default': (bool, date, datetime, dict, float, int, list, str, none_type,), # noqa: E501 + 'visible': (bool,), # noqa: E501 + 'required': (bool,), # noqa: E501 + 'editable': (bool,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'key': 'key', # noqa: E501 + 'type': 'type', # noqa: E501 + 'subtype': 'subtype', # noqa: E501 + 'choices': 'choices', # noqa: E501 + 'default': 'default', # noqa: E501 + 'visible': 'visible', # noqa: E501 + 'required': 'required', # noqa: E501 + 'editable': 'editable', # noqa: E501 + } + + read_only_vars = { + } + + _composed_schemas = {} + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, key, type, *args, **kwargs): # noqa: E501 + """AvailableJobSetting - a model defined in OpenAPI + + Args: + key (str): Identifier for the setting, must be unique within the job type. + type (AvailableJobSettingType): + + 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,) + subtype (AvailableJobSettingSubtype): [optional] # noqa: E501 + choices ([str]): When given, limit the valid values to these choices. Only usable with string type.. [optional] # noqa: E501 + default (bool, date, datetime, dict, float, int, list, str, none_type): The default value shown to the user when determining this setting.. [optional] # noqa: E501 + visible (bool): Whether to show this setting in the UI of a job submitter (like a Blender add-on). Set to `false` when it is an internal setting that shouldn't be shown to end users. . [optional] if omitted the server will use the default value of True # noqa: E501 + required (bool): Whether to immediately reject a job definition, of this type, without this particular setting. . [optional] if omitted the server will use the default value of False # noqa: E501 + editable (bool): Whether to allow editing this setting after the job has been submitted. Would imply deleting all existing tasks for this job, and recompiling it. . [optional] if omitted the server will use the default value of False # 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.key = key + 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, key, type, *args, **kwargs): # noqa: E501 + """AvailableJobSetting - a model defined in OpenAPI + + Args: + key (str): Identifier for the setting, must be unique within the job type. + type (AvailableJobSettingType): + + 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,) + subtype (AvailableJobSettingSubtype): [optional] # noqa: E501 + choices ([str]): When given, limit the valid values to these choices. Only usable with string type.. [optional] # noqa: E501 + default (bool, date, datetime, dict, float, int, list, str, none_type): The default value shown to the user when determining this setting.. [optional] # noqa: E501 + visible (bool): Whether to show this setting in the UI of a job submitter (like a Blender add-on). Set to `false` when it is an internal setting that shouldn't be shown to end users. . [optional] if omitted the server will use the default value of True # noqa: E501 + required (bool): Whether to immediately reject a job definition, of this type, without this particular setting. . [optional] if omitted the server will use the default value of False # noqa: E501 + editable (bool): Whether to allow editing this setting after the job has been submitted. Would imply deleting all existing tasks for this job, and recompiling it. . [optional] if omitted the server will use the default value of False # 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.key = key + 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/available_job_setting_subtype.py b/addon/flamenco/manager/model/available_job_setting_subtype.py new file mode 100644 index 00000000..6cd7e756 --- /dev/null +++ b/addon/flamenco/manager/model/available_job_setting_subtype.py @@ -0,0 +1,284 @@ +""" + 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 AvailableJobSettingSubtype(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',): { + 'FILE_PATH': "file_path", + 'DIR_PATH': "dir_path", + 'FILE_NAME': "file_name", + 'HASHED_FILE_PATH': "hashed_file_path", + }, + } + + 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): + """AvailableJobSettingSubtype - 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): Sub-type of the job setting. Currently only available for string types. `HASHED_FILE_PATH` is a directory path + `\"/######\"` appended. ., must be one of ["file_path", "dir_path", "file_name", "hashed_file_path", ] # noqa: E501 + + Keyword Args: + value (str): Sub-type of the job setting. Currently only available for string types. `HASHED_FILE_PATH` is a directory path + `\"/######\"` appended. ., must be one of ["file_path", "dir_path", "file_name", "hashed_file_path", ] # 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): + """AvailableJobSettingSubtype - 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): Sub-type of the job setting. Currently only available for string types. `HASHED_FILE_PATH` is a directory path + `\"/######\"` appended. ., must be one of ["file_path", "dir_path", "file_name", "hashed_file_path", ] # noqa: E501 + + Keyword Args: + value (str): Sub-type of the job setting. Currently only available for string types. `HASHED_FILE_PATH` is a directory path + `\"/######\"` appended. ., must be one of ["file_path", "dir_path", "file_name", "hashed_file_path", ] # 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/model/available_job_setting_type.py b/addon/flamenco/manager/model/available_job_setting_type.py new file mode 100644 index 00000000..95797738 --- /dev/null +++ b/addon/flamenco/manager/model/available_job_setting_type.py @@ -0,0 +1,284 @@ +""" + 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 AvailableJobSettingType(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',): { + 'STRING': "string", + 'INT32': "int32", + 'FLOAT': "float", + 'BOOL': "bool", + }, + } + + 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): + """AvailableJobSettingType - 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): Type of job setting, must be usable as IDProperty type in Blender. No nested structures (arrays, dictionaries) are supported. ., must be one of ["string", "int32", "float", "bool", ] # noqa: E501 + + Keyword Args: + value (str): Type of job setting, must be usable as IDProperty type in Blender. No nested structures (arrays, dictionaries) are supported. ., must be one of ["string", "int32", "float", "bool", ] # 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): + """AvailableJobSettingType - 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): Type of job setting, must be usable as IDProperty type in Blender. No nested structures (arrays, dictionaries) are supported. ., must be one of ["string", "int32", "float", "bool", ] # noqa: E501 + + Keyword Args: + value (str): Type of job setting, must be usable as IDProperty type in Blender. No nested structures (arrays, dictionaries) are supported. ., must be one of ["string", "int32", "float", "bool", ] # 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/model/available_job_type.py b/addon/flamenco/manager/model/available_job_type.py new file mode 100644 index 00000000..181020a4 --- /dev/null +++ b/addon/flamenco/manager/model/available_job_type.py @@ -0,0 +1,279 @@ +""" + 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.available_job_setting import AvailableJobSetting + globals()['AvailableJobSetting'] = AvailableJobSetting + + +class AvailableJobType(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 { + 'name': (str,), # noqa: E501 + 'label': (str,), # noqa: E501 + 'settings': ([AvailableJobSetting],), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'name': 'name', # noqa: E501 + 'label': 'label', # noqa: E501 + 'settings': 'settings', # noqa: E501 + } + + read_only_vars = { + } + + _composed_schemas = {} + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, name, label, settings, *args, **kwargs): # noqa: E501 + """AvailableJobType - a model defined in OpenAPI + + Args: + name (str): + label (str): + settings ([AvailableJobSetting]): + + 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.name = name + self.label = label + self.settings = settings + 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, name, label, settings, *args, **kwargs): # noqa: E501 + """AvailableJobType - a model defined in OpenAPI + + Args: + name (str): + label (str): + settings ([AvailableJobSetting]): + + 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.name = name + self.label = label + self.settings = settings + 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/available_job_types.py b/addon/flamenco/manager/model/available_job_types.py new file mode 100644 index 00000000..39b6b525 --- /dev/null +++ b/addon/flamenco/manager/model/available_job_types.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.available_job_type import AvailableJobType + globals()['AvailableJobType'] = AvailableJobType + + +class AvailableJobTypes(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 { + 'job_types': ([AvailableJobType],), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'job_types': 'job_types', # noqa: E501 + } + + read_only_vars = { + } + + _composed_schemas = {} + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, job_types, *args, **kwargs): # noqa: E501 + """AvailableJobTypes - a model defined in OpenAPI + + Args: + job_types ([AvailableJobType]): + + 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.job_types = job_types + 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, job_types, *args, **kwargs): # noqa: E501 + """AvailableJobTypes - a model defined in OpenAPI + + Args: + job_types ([AvailableJobType]): + + 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.job_types = job_types + 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/command.py b/addon/flamenco/manager/model/command.py new file mode 100644 index 00000000..af870019 --- /dev/null +++ b/addon/flamenco/manager/model/command.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 Command(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 { + 'name': (str,), # noqa: E501 + 'parameters': ({str: (bool, date, datetime, dict, float, int, list, str, none_type)},), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'name': 'name', # noqa: E501 + 'parameters': 'parameters', # noqa: E501 + } + + read_only_vars = { + } + + _composed_schemas = {} + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, name, parameters, *args, **kwargs): # noqa: E501 + """Command - a model defined in OpenAPI + + Args: + name (str): + parameters ({str: (bool, date, datetime, dict, float, int, list, str, none_type)}): + + 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.name = name + self.parameters = parameters + 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, name, parameters, *args, **kwargs): # noqa: E501 + """Command - a model defined in OpenAPI + + Args: + name (str): + parameters ({str: (bool, date, datetime, dict, float, int, list, str, none_type)}): + + 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.name = name + self.parameters = parameters + 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/configuration.py b/addon/flamenco/manager/model/configuration.py new file mode 100644 index 00000000..4e630e93 --- /dev/null +++ b/addon/flamenco/manager/model/configuration.py @@ -0,0 +1,273 @@ +""" + 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.configuration_meta import ConfigurationMeta + globals()['ConfigurationMeta'] = ConfigurationMeta + + +class Configuration(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 { + 'meta': (ConfigurationMeta,), # noqa: E501 + 'settings': ({str: (bool, date, datetime, dict, float, int, list, str, none_type)},), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'meta': '_meta', # noqa: E501 + 'settings': 'settings', # noqa: E501 + } + + read_only_vars = { + } + + _composed_schemas = {} + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, meta, settings, *args, **kwargs): # noqa: E501 + """Configuration - a model defined in OpenAPI + + Args: + meta (ConfigurationMeta): + settings ({str: (bool, date, datetime, dict, float, int, list, str, none_type)}): Key-value pairs for settings. + + 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.meta = meta + self.settings = settings + 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, meta, settings, *args, **kwargs): # noqa: E501 + """Configuration - a model defined in OpenAPI + + Args: + meta (ConfigurationMeta): + settings ({str: (bool, date, datetime, dict, float, int, list, str, none_type)}): Key-value pairs for settings. + + 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.meta = meta + self.settings = settings + 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/configuration_meta.py b/addon/flamenco/manager/model/configuration_meta.py new file mode 100644 index 00000000..3f3bcc0c --- /dev/null +++ b/addon/flamenco/manager/model/configuration_meta.py @@ -0,0 +1,261 @@ +""" + 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 ConfigurationMeta(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 { + 'schema_version': (int,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'schema_version': 'schema_version', # noqa: E501 + } + + read_only_vars = { + } + + _composed_schemas = {} + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, schema_version, *args, **kwargs): # noqa: E501 + """ConfigurationMeta - a model defined in OpenAPI + + Args: + schema_version (int): + + 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.schema_version = schema_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, schema_version, *args, **kwargs): # noqa: E501 + """ConfigurationMeta - a model defined in OpenAPI + + Args: + schema_version (int): + + 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.schema_version = schema_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/model/error.py b/addon/flamenco/manager/model/error.py new file mode 100644 index 00000000..896ecae1 --- /dev/null +++ b/addon/flamenco/manager/model/error.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 Error(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 { + 'code': (int,), # noqa: E501 + 'message': (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'code': 'code', # noqa: E501 + 'message': 'message', # noqa: E501 + } + + read_only_vars = { + } + + _composed_schemas = {} + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, code, message, *args, **kwargs): # noqa: E501 + """Error - a model defined in OpenAPI + + Args: + code (int): + message (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,) + """ + + _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.code = code + self.message = message + 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, code, message, *args, **kwargs): # noqa: E501 + """Error - a model defined in OpenAPI + + Args: + code (int): + message (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,) + """ + + _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.code = code + self.message = message + 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/job.py b/addon/flamenco/manager/model/job.py new file mode 100644 index 00000000..2fb1d10e --- /dev/null +++ b/addon/flamenco/manager/model/job.py @@ -0,0 +1,354 @@ +""" + 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.job_all_of import JobAllOf + from flamenco.manager.model.job_metadata import JobMetadata + from flamenco.manager.model.job_settings import JobSettings + from flamenco.manager.model.job_status import JobStatus + from flamenco.manager.model.submitted_job import SubmittedJob + globals()['JobAllOf'] = JobAllOf + globals()['JobMetadata'] = JobMetadata + globals()['JobSettings'] = JobSettings + globals()['JobStatus'] = JobStatus + globals()['SubmittedJob'] = SubmittedJob + + +class Job(ModelComposed): + """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 { + 'name': (str,), # noqa: E501 + 'type': (str,), # noqa: E501 + 'priority': (int,), # noqa: E501 + 'id': (str,), # noqa: E501 + 'created': (datetime,), # noqa: E501 + 'updated': (datetime,), # noqa: E501 + 'status': (JobStatus,), # noqa: E501 + 'settings': (JobSettings,), # noqa: E501 + 'metadata': (JobMetadata,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'name': 'name', # noqa: E501 + 'type': 'type', # noqa: E501 + 'priority': 'priority', # noqa: E501 + 'id': 'id', # noqa: E501 + 'created': 'created', # noqa: E501 + 'updated': 'updated', # noqa: E501 + 'status': 'status', # noqa: E501 + 'settings': 'settings', # noqa: E501 + 'metadata': 'metadata', # noqa: E501 + } + + read_only_vars = { + } + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """Job - a model defined in OpenAPI + + Keyword Args: + name (str): + type (str): + priority (int): defaults to 50 # noqa: E501 + id (str): UUID of the Job + created (datetime): Creation timestamp + updated (datetime): Creation timestamp + status (JobStatus): + _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,) + settings (JobSettings): [optional] # noqa: E501 + metadata (JobMetadata): [optional] # noqa: E501 + """ + + priority = kwargs.get('priority', 50) + _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__,) + + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + + for var_name, var_value in kwargs.items(): + if var_name in discarded_args and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self._additional_properties_model_instances: + # 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', + '_composed_instances', + '_var_name_to_model_instances', + '_additional_properties_model_instances', + ]) + + @convert_js_args_to_python_args + def __init__(self, *args, **kwargs): # noqa: E501 + """Job - a model defined in OpenAPI + + Keyword Args: + name (str): + type (str): + priority (int): defaults to 50 # noqa: E501 + id (str): UUID of the Job + created (datetime): Creation timestamp + updated (datetime): Creation timestamp + status (JobStatus): + _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,) + settings (JobSettings): [optional] # noqa: E501 + metadata (JobMetadata): [optional] # noqa: E501 + """ + + priority = kwargs.get('priority', 50) + _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__,) + + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + + for var_name, var_value in kwargs.items(): + if var_name in discarded_args and \ + self._configuration is not None and \ + self._configuration.discard_unknown_keys and \ + self._additional_properties_model_instances: + # 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.") + + @cached_property + def _composed_schemas(): + # we need this here to make our import statements work + # we must store _composed_schemas in here so the code is only run + # when we invoke this method. If we kept this at the class + # level we would get an error because the class level + # code would be run when this module is imported, and these composed + # classes don't exist yet because their module has not finished + # loading + lazy_import() + return { + 'anyOf': [ + ], + 'allOf': [ + JobAllOf, + SubmittedJob, + ], + 'oneOf': [ + ], + } diff --git a/addon/flamenco/manager/model/job_all_of.py b/addon/flamenco/manager/model/job_all_of.py new file mode 100644 index 00000000..47672a4f --- /dev/null +++ b/addon/flamenco/manager/model/job_all_of.py @@ -0,0 +1,285 @@ +""" + 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.job_status import JobStatus + globals()['JobStatus'] = JobStatus + + +class JobAllOf(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 + 'created': (datetime,), # noqa: E501 + 'updated': (datetime,), # noqa: E501 + 'status': (JobStatus,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'id': 'id', # noqa: E501 + 'created': 'created', # noqa: E501 + 'updated': 'updated', # noqa: E501 + 'status': 'status', # noqa: E501 + } + + read_only_vars = { + } + + _composed_schemas = {} + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, id, created, updated, status, *args, **kwargs): # noqa: E501 + """JobAllOf - a model defined in OpenAPI + + Args: + id (str): UUID of the Job + created (datetime): Creation timestamp + updated (datetime): Creation timestamp + status (JobStatus): + + 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.id = id + self.created = created + 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, created, updated, status, *args, **kwargs): # noqa: E501 + """JobAllOf - a model defined in OpenAPI + + Args: + id (str): UUID of the Job + created (datetime): Creation timestamp + updated (datetime): Creation timestamp + status (JobStatus): + + 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.id = id + self.created = created + 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/model/job_metadata.py b/addon/flamenco/manager/model/job_metadata.py new file mode 100644 index 00000000..943bd025 --- /dev/null +++ b/addon/flamenco/manager/model/job_metadata.py @@ -0,0 +1,251 @@ +""" + 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 JobMetadata(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 (str,) # 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 { + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + } + + read_only_vars = { + } + + _composed_schemas = {} + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """JobMetadata - a model defined in OpenAPI + + 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__,) + + 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, *args, **kwargs): # noqa: E501 + """JobMetadata - a model defined in OpenAPI + + 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__,) + + 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/job_settings.py b/addon/flamenco/manager/model/job_settings.py new file mode 100644 index 00000000..a45681f4 --- /dev/null +++ b/addon/flamenco/manager/model/job_settings.py @@ -0,0 +1,251 @@ +""" + 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 JobSettings(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 { + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + } + + read_only_vars = { + } + + _composed_schemas = {} + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """JobSettings - a model defined in OpenAPI + + 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__,) + + 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, *args, **kwargs): # noqa: E501 + """JobSettings - a model defined in OpenAPI + + 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__,) + + 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/job_status.py b/addon/flamenco/manager/model/job_status.py new file mode 100644 index 00000000..163cbb72 --- /dev/null +++ b/addon/flamenco/manager/model/job_status.py @@ -0,0 +1,294 @@ +""" + 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 JobStatus(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',): { + 'ACTIVE': "active", + 'CANCELED': "canceled", + 'COMPLETED': "completed", + 'CONSTRUCTION-FAILED': "construction-failed", + 'FAILED': "failed", + 'PAUSED': "paused", + 'QUEUED': "queued", + 'ARCHIVED': "archived", + 'ARCHIVING': "archiving", + 'CANCEL-REQUESTED': "cancel-requested", + 'FAIL-REQUESTED': "fail-requested", + 'REQUEUED': "requeued", + 'UNDER-CONSTRUCTION': "under-construction", + 'WAITING-FOR-FILES': "waiting-for-files", + }, + } + + 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): + """JobStatus - 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 ["active", "canceled", "completed", "construction-failed", "failed", "paused", "queued", "archived", "archiving", "cancel-requested", "fail-requested", "requeued", "under-construction", "waiting-for-files", ] # noqa: E501 + + Keyword Args: + value (str):, must be one of ["active", "canceled", "completed", "construction-failed", "failed", "paused", "queued", "archived", "archiving", "cancel-requested", "fail-requested", "requeued", "under-construction", "waiting-for-files", ] # 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): + """JobStatus - 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 ["active", "canceled", "completed", "construction-failed", "failed", "paused", "queued", "archived", "archiving", "cancel-requested", "fail-requested", "requeued", "under-construction", "waiting-for-files", ] # noqa: E501 + + Keyword Args: + value (str):, must be one of ["active", "canceled", "completed", "construction-failed", "failed", "paused", "queued", "archived", "archiving", "cancel-requested", "fail-requested", "requeued", "under-construction", "waiting-for-files", ] # 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/model/registered_worker.py b/addon/flamenco/manager/model/registered_worker.py new file mode 100644 index 00000000..2936365a --- /dev/null +++ b/addon/flamenco/manager/model/registered_worker.py @@ -0,0 +1,309 @@ +""" + 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 RegisteredWorker(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 { + 'uuid': (str,), # noqa: E501 + 'nickname': (str,), # noqa: E501 + 'address': (str,), # noqa: E501 + 'status': (WorkerStatus,), # noqa: E501 + 'platform': (str,), # noqa: E501 + 'last_activity': (str,), # noqa: E501 + 'software': (str,), # noqa: E501 + 'supported_task_types': ([str],), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'uuid': 'uuid', # noqa: E501 + 'nickname': 'nickname', # noqa: E501 + 'address': 'address', # noqa: E501 + 'status': 'status', # noqa: E501 + 'platform': 'platform', # noqa: E501 + 'last_activity': 'last_activity', # noqa: E501 + 'software': 'software', # noqa: E501 + 'supported_task_types': 'supported_task_types', # noqa: E501 + } + + read_only_vars = { + } + + _composed_schemas = {} + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, uuid, nickname, address, status, platform, last_activity, software, supported_task_types, *args, **kwargs): # noqa: E501 + """RegisteredWorker - a model defined in OpenAPI + + Args: + uuid (str): + nickname (str): + address (str): + status (WorkerStatus): + platform (str): + last_activity (str): + software (str): + supported_task_types ([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,) + """ + + _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.uuid = uuid + self.nickname = nickname + self.address = address + self.status = status + self.platform = platform + self.last_activity = last_activity + self.software = software + self.supported_task_types = supported_task_types + 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, uuid, nickname, address, status, platform, last_activity, software, supported_task_types, *args, **kwargs): # noqa: E501 + """RegisteredWorker - a model defined in OpenAPI + + Args: + uuid (str): + nickname (str): + address (str): + status (WorkerStatus): + platform (str): + last_activity (str): + software (str): + supported_task_types ([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,) + """ + + _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.uuid = uuid + self.nickname = nickname + self.address = address + self.status = status + self.platform = platform + self.last_activity = last_activity + self.software = software + self.supported_task_types = supported_task_types + 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/security_error.py b/addon/flamenco/manager/model/security_error.py new file mode 100644 index 00000000..3db64143 --- /dev/null +++ b/addon/flamenco/manager/model/security_error.py @@ -0,0 +1,261 @@ +""" + 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 SecurityError(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 { + 'message': (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'message': 'message', # noqa: E501 + } + + read_only_vars = { + } + + _composed_schemas = {} + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, message, *args, **kwargs): # noqa: E501 + """SecurityError - a model defined in OpenAPI + + Args: + message (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,) + """ + + _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.message = message + 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, message, *args, **kwargs): # noqa: E501 + """SecurityError - a model defined in OpenAPI + + Args: + message (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,) + """ + + _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.message = message + 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/submitted_job.py b/addon/flamenco/manager/model/submitted_job.py new file mode 100644 index 00000000..4bedc0fd --- /dev/null +++ b/addon/flamenco/manager/model/submitted_job.py @@ -0,0 +1,291 @@ +""" + 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.job_metadata import JobMetadata + from flamenco.manager.model.job_settings import JobSettings + globals()['JobMetadata'] = JobMetadata + globals()['JobSettings'] = JobSettings + + +class SubmittedJob(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 { + 'name': (str,), # noqa: E501 + 'type': (str,), # noqa: E501 + 'priority': (int,), # noqa: E501 + 'settings': (JobSettings,), # noqa: E501 + 'metadata': (JobMetadata,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'name': 'name', # noqa: E501 + 'type': 'type', # noqa: E501 + 'priority': 'priority', # noqa: E501 + 'settings': 'settings', # noqa: E501 + 'metadata': 'metadata', # noqa: E501 + } + + read_only_vars = { + } + + _composed_schemas = {} + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, name, type, *args, **kwargs): # noqa: E501 + """SubmittedJob - a model defined in OpenAPI + + Args: + name (str): + type (str): + + Keyword Args: + priority (int): defaults to 50 # 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,) + settings (JobSettings): [optional] # noqa: E501 + metadata (JobMetadata): [optional] # noqa: E501 + """ + + priority = kwargs.get('priority', 50) + _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.name = name + self.type = type + self.priority = priority + 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, name, type, *args, **kwargs): # noqa: E501 + """SubmittedJob - a model defined in OpenAPI + + Args: + name (str): + type (str): + + Keyword Args: + priority (int): defaults to 50 # 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,) + settings (JobSettings): [optional] # noqa: E501 + metadata (JobMetadata): [optional] # noqa: E501 + """ + + priority = kwargs.get('priority', 50) + _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.name = name + self.type = type + self.priority = priority + 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/task_status.py b/addon/flamenco/manager/model/task_status.py new file mode 100644 index 00000000..d9c21389 --- /dev/null +++ b/addon/flamenco/manager/model/task_status.py @@ -0,0 +1,288 @@ +""" + 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 TaskStatus(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',): { + 'ACTIVE': "active", + 'CANCELED': "canceled", + 'COMPLETED': "completed", + 'FAILED': "failed", + 'QUEUED': "queued", + 'SOFT-FAILED': "soft-failed", + 'CANCEL-REQUESTED': "cancel-requested", + 'PAUSED': "paused", + }, + } + + 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): + """TaskStatus - 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 ["active", "canceled", "completed", "failed", "queued", "soft-failed", "cancel-requested", "paused", ] # noqa: E501 + + Keyword Args: + value (str):, must be one of ["active", "canceled", "completed", "failed", "queued", "soft-failed", "cancel-requested", "paused", ] # 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): + """TaskStatus - 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 ["active", "canceled", "completed", "failed", "queued", "soft-failed", "cancel-requested", "paused", ] # noqa: E501 + + Keyword Args: + value (str):, must be one of ["active", "canceled", "completed", "failed", "queued", "soft-failed", "cancel-requested", "paused", ] # 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/model/task_update.py b/addon/flamenco/manager/model/task_update.py new file mode 100644 index 00000000..d256b2a2 --- /dev/null +++ b/addon/flamenco/manager/model/task_update.py @@ -0,0 +1,269 @@ +""" + 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 TaskUpdate(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 { + 'task_status': (TaskStatus,), # noqa: E501 + 'activity': (str,), # noqa: E501 + 'log': (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'task_status': 'taskStatus', # noqa: E501 + 'activity': 'activity', # noqa: E501 + 'log': 'log', # noqa: E501 + } + + read_only_vars = { + } + + _composed_schemas = {} + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """TaskUpdate - a model defined in OpenAPI + + 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,) + task_status (TaskStatus): [optional] # noqa: E501 + activity (str): One-liner to indicate what's currently happening with the task. Overwrites previously sent activity strings.. [optional] # noqa: E501 + log (str): Log lines for this task. [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__,) + + 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, *args, **kwargs): # noqa: E501 + """TaskUpdate - a model defined in OpenAPI + + 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,) + task_status (TaskStatus): [optional] # noqa: E501 + activity (str): One-liner to indicate what's currently happening with the task. Overwrites previously sent activity strings.. [optional] # noqa: E501 + log (str): Log lines for this task. [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__,) + + 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/worker_registration.py b/addon/flamenco/manager/model/worker_registration.py new file mode 100644 index 00000000..bb641c40 --- /dev/null +++ b/addon/flamenco/manager/model/worker_registration.py @@ -0,0 +1,279 @@ +""" + 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 WorkerRegistration(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 { + 'secret': (str,), # noqa: E501 + 'platform': (str,), # noqa: E501 + 'supported_task_types': ([str],), # noqa: E501 + 'nickname': (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'secret': 'secret', # noqa: E501 + 'platform': 'platform', # noqa: E501 + 'supported_task_types': 'supported_task_types', # noqa: E501 + 'nickname': 'nickname', # noqa: E501 + } + + read_only_vars = { + } + + _composed_schemas = {} + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, secret, platform, supported_task_types, nickname, *args, **kwargs): # noqa: E501 + """WorkerRegistration - a model defined in OpenAPI + + Args: + secret (str): + platform (str): + supported_task_types ([str]): + nickname (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,) + """ + + _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.secret = secret + self.platform = platform + self.supported_task_types = supported_task_types + self.nickname = nickname + 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, secret, platform, supported_task_types, nickname, *args, **kwargs): # noqa: E501 + """WorkerRegistration - a model defined in OpenAPI + + Args: + secret (str): + platform (str): + supported_task_types ([str]): + nickname (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,) + """ + + _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.secret = secret + self.platform = platform + self.supported_task_types = supported_task_types + self.nickname = nickname + 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/worker_sign_on.py b/addon/flamenco/manager/model/worker_sign_on.py new file mode 100644 index 00000000..72b82594 --- /dev/null +++ b/addon/flamenco/manager/model/worker_sign_on.py @@ -0,0 +1,273 @@ +""" + 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 WorkerSignOn(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 { + 'nickname': (str,), # noqa: E501 + 'supported_task_types': ([str],), # noqa: E501 + 'software_version': (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'nickname': 'nickname', # noqa: E501 + 'supported_task_types': 'supported_task_types', # noqa: E501 + 'software_version': 'software_version', # noqa: E501 + } + + read_only_vars = { + } + + _composed_schemas = {} + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, nickname, supported_task_types, software_version, *args, **kwargs): # noqa: E501 + """WorkerSignOn - a model defined in OpenAPI + + Args: + nickname (str): + supported_task_types ([str]): + software_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,) + """ + + _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.nickname = nickname + self.supported_task_types = supported_task_types + self.software_version = software_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, nickname, supported_task_types, software_version, *args, **kwargs): # noqa: E501 + """WorkerSignOn - a model defined in OpenAPI + + Args: + nickname (str): + supported_task_types ([str]): + software_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,) + """ + + _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.nickname = nickname + self.supported_task_types = supported_task_types + self.software_version = software_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/model/worker_state_change.py b/addon/flamenco/manager/model/worker_state_change.py new file mode 100644 index 00000000..5ae1eead --- /dev/null +++ b/addon/flamenco/manager/model/worker_state_change.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.worker_status import WorkerStatus + globals()['WorkerStatus'] = WorkerStatus + + +class WorkerStateChange(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 { + 'status_requested': (WorkerStatus,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'status_requested': 'status_requested', # noqa: E501 + } + + read_only_vars = { + } + + _composed_schemas = {} + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, status_requested, *args, **kwargs): # noqa: E501 + """WorkerStateChange - a model defined in OpenAPI + + Args: + status_requested (WorkerStatus): + + 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.status_requested = status_requested + 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, status_requested, *args, **kwargs): # noqa: E501 + """WorkerStateChange - a model defined in OpenAPI + + Args: + status_requested (WorkerStatus): + + 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.status_requested = status_requested + 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/worker_state_changed.py b/addon/flamenco/manager/model/worker_state_changed.py new file mode 100644 index 00000000..f86ba415 --- /dev/null +++ b/addon/flamenco/manager/model/worker_state_changed.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.worker_status import WorkerStatus + globals()['WorkerStatus'] = WorkerStatus + + +class WorkerStateChanged(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 { + 'status': (WorkerStatus,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'status': 'status', # noqa: E501 + } + + read_only_vars = { + } + + _composed_schemas = {} + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, status, *args, **kwargs): # noqa: E501 + """WorkerStateChanged - a model defined in OpenAPI + + Args: + status (WorkerStatus): + + 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.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, status, *args, **kwargs): # noqa: E501 + """WorkerStateChanged - a model defined in OpenAPI + + Args: + status (WorkerStatus): + + 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.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/model/worker_status.py b/addon/flamenco/manager/model/worker_status.py new file mode 100644 index 00000000..82be7819 --- /dev/null +++ b/addon/flamenco/manager/model/worker_status.py @@ -0,0 +1,287 @@ +""" + 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 WorkerStatus(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',): { + 'STARTING': "starting", + 'AWAKE': "awake", + 'ASLEEP': "asleep", + 'ERROR': "error", + 'SHUTDOWN': "shutdown", + 'TESTING': "testing", + 'OFFLINE': "offline", + }, + } + + 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): + """WorkerStatus - 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 ["starting", "awake", "asleep", "error", "shutdown", "testing", "offline", ] # noqa: E501 + + Keyword Args: + value (str):, must be one of ["starting", "awake", "asleep", "error", "shutdown", "testing", "offline", ] # 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): + """WorkerStatus - 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 ["starting", "awake", "asleep", "error", "shutdown", "testing", "offline", ] # noqa: E501 + + Keyword Args: + value (str):, must be one of ["starting", "awake", "asleep", "error", "shutdown", "testing", "offline", ] # 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/model_utils.py b/addon/flamenco/manager/model_utils.py new file mode 100644 index 00000000..55fffa23 --- /dev/null +++ b/addon/flamenco/manager/model_utils.py @@ -0,0 +1,2037 @@ +""" + Flamenco manager + + Render Farm manager API # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +from datetime import date, datetime # noqa: F401 +from copy import deepcopy +import inspect +import io +import os +import pprint +import re +import tempfile + +from dateutil.parser import parse + +from flamenco.manager.exceptions import ( + ApiKeyError, + ApiAttributeError, + ApiTypeError, + ApiValueError, +) + +none_type = type(None) +file_type = io.IOBase + + +def convert_js_args_to_python_args(fn): + from functools import wraps + @wraps(fn) + def wrapped_init(_self, *args, **kwargs): + """ + An attribute named `self` received from the api will conflicts with the reserved `self` + parameter of a class method. During generation, `self` attributes are mapped + to `_self` in models. Here, we name `_self` instead of `self` to avoid conflicts. + """ + spec_property_naming = kwargs.get('_spec_property_naming', False) + if spec_property_naming: + kwargs = change_keys_js_to_python(kwargs, _self if isinstance(_self, type) else _self.__class__) + return fn(_self, *args, **kwargs) + return wrapped_init + + +class cached_property(object): + # this caches the result of the function call for fn with no inputs + # use this as a decorator on function methods that you want converted + # into cached properties + result_key = '_results' + + def __init__(self, fn): + self._fn = fn + + def __get__(self, instance, cls=None): + if self.result_key in vars(self): + return vars(self)[self.result_key] + else: + result = self._fn() + setattr(self, self.result_key, result) + return result + + +PRIMITIVE_TYPES = (list, float, int, bool, datetime, date, str, file_type) + +def allows_single_value_input(cls): + """ + This function returns True if the input composed schema model or any + descendant model allows a value only input + This is true for cases where oneOf contains items like: + oneOf: + - float + - NumberWithValidation + - StringEnum + - ArrayModel + - null + TODO: lru_cache this + """ + if ( + issubclass(cls, ModelSimple) or + cls in PRIMITIVE_TYPES + ): + return True + elif issubclass(cls, ModelComposed): + if not cls._composed_schemas['oneOf']: + return False + return any(allows_single_value_input(c) for c in cls._composed_schemas['oneOf']) + return False + +def composed_model_input_classes(cls): + """ + This function returns a list of the possible models that can be accepted as + inputs. + TODO: lru_cache this + """ + if issubclass(cls, ModelSimple) or cls in PRIMITIVE_TYPES: + return [cls] + elif issubclass(cls, ModelNormal): + if cls.discriminator is None: + return [cls] + else: + return get_discriminated_classes(cls) + elif issubclass(cls, ModelComposed): + if not cls._composed_schemas['oneOf']: + return [] + if cls.discriminator is None: + input_classes = [] + for c in cls._composed_schemas['oneOf']: + input_classes.extend(composed_model_input_classes(c)) + return input_classes + else: + return get_discriminated_classes(cls) + return [] + + +class OpenApiModel(object): + """The base class for all OpenAPIModels""" + + def set_attribute(self, name, value): + # this is only used to set properties on self + + path_to_item = [] + if self._path_to_item: + path_to_item.extend(self._path_to_item) + path_to_item.append(name) + + if name in self.openapi_types: + required_types_mixed = self.openapi_types[name] + elif self.additional_properties_type is None: + raise ApiAttributeError( + "{0} has no attribute '{1}'".format( + type(self).__name__, name), + path_to_item + ) + elif self.additional_properties_type is not None: + required_types_mixed = self.additional_properties_type + + if get_simple_class(name) != str: + error_msg = type_error_message( + var_name=name, + var_value=name, + valid_classes=(str,), + key_type=True + ) + raise ApiTypeError( + error_msg, + path_to_item=path_to_item, + valid_classes=(str,), + key_type=True + ) + + if self._check_type: + value = validate_and_convert_types( + value, required_types_mixed, path_to_item, self._spec_property_naming, + self._check_type, configuration=self._configuration) + if (name,) in self.allowed_values: + check_allowed_values( + self.allowed_values, + (name,), + value + ) + if (name,) in self.validations: + check_validations( + self.validations, + (name,), + value, + self._configuration + ) + self.__dict__['_data_store'][name] = value + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other + + def __setattr__(self, attr, value): + """set the value of an attribute using dot notation: `instance.attr = val`""" + self[attr] = value + + def __getattr__(self, attr): + """get the value of an attribute using dot notation: `instance.attr`""" + return self.__getitem__(attr) + + def __copy__(self): + cls = self.__class__ + if self.get("_spec_property_naming", False): + return cls._new_from_openapi_data(**self.__dict__) + else: + return new_cls.__new__(cls, **self.__dict__) + + def __deepcopy__(self, memo): + cls = self.__class__ + + if self.get("_spec_property_naming", False): + new_inst = cls._new_from_openapi_data() + else: + new_inst = cls.__new__(cls) + + for k, v in self.__dict__.items(): + setattr(new_inst, k, deepcopy(v, memo)) + return new_inst + + + def __new__(cls, *args, **kwargs): + # this function uses the discriminator to + # pick a new schema/class to instantiate because a discriminator + # propertyName value was passed in + + if len(args) == 1: + arg = args[0] + if arg is None and is_type_nullable(cls): + # The input data is the 'null' value and the type is nullable. + return None + + if issubclass(cls, ModelComposed) and allows_single_value_input(cls): + model_kwargs = {} + oneof_instance = get_oneof_instance(cls, model_kwargs, kwargs, model_arg=arg) + return oneof_instance + + + visited_composed_classes = kwargs.get('_visited_composed_classes', ()) + if ( + cls.discriminator is None or + cls in visited_composed_classes + ): + # Use case 1: this openapi schema (cls) does not have a discriminator + # Use case 2: we have already visited this class before and are sure that we + # want to instantiate it this time. We have visited this class deserializing + # a payload with a discriminator. During that process we traveled through + # this class but did not make an instance of it. Now we are making an + # instance of a composed class which contains cls in it, so this time make an instance of cls. + # + # Here's an example of use case 2: 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 the composed schema dog Dog, we will make an instance of the + # Animal class (because Dal has allOf: Animal) but this time we won't travel + # through Animal's discriminator because we passed in + # _visited_composed_classes = (Animal,) + + return super(OpenApiModel, cls).__new__(cls) + + # Get the name and value of the discriminator property. + # The discriminator name is obtained from the discriminator meta-data + # and the discriminator value is obtained from the input data. + discr_propertyname_py = list(cls.discriminator.keys())[0] + discr_propertyname_js = cls.attribute_map[discr_propertyname_py] + if discr_propertyname_js in kwargs: + discr_value = kwargs[discr_propertyname_js] + elif discr_propertyname_py in kwargs: + discr_value = kwargs[discr_propertyname_py] + else: + # The input data does not contain the discriminator property. + path_to_item = kwargs.get('_path_to_item', ()) + raise ApiValueError( + "Cannot deserialize input data due to missing discriminator. " + "The discriminator property '%s' is missing at path: %s" % + (discr_propertyname_js, path_to_item) + ) + + # Implementation note: the last argument to get_discriminator_class + # is a list of visited classes. get_discriminator_class may recursively + # call itself and update the list of visited classes, and the initial + # value must be an empty list. Hence not using 'visited_composed_classes' + new_cls = get_discriminator_class( + cls, discr_propertyname_py, discr_value, []) + if new_cls is None: + path_to_item = kwargs.get('_path_to_item', ()) + disc_prop_value = kwargs.get( + discr_propertyname_js, kwargs.get(discr_propertyname_py)) + raise ApiValueError( + "Cannot deserialize input data due to invalid discriminator " + "value. The OpenAPI document has no mapping for discriminator " + "property '%s'='%s' at path: %s" % + (discr_propertyname_js, disc_prop_value, path_to_item) + ) + + if new_cls in visited_composed_classes: + # if we are making an instance of a composed schema Descendent + # which allOf includes Ancestor, then Ancestor contains + # a discriminator that includes Descendent. + # So if we make an instance of Descendent, we have to make an + # instance of Ancestor to hold the allOf properties. + # This code detects that use case and makes the instance of Ancestor + # For example: + # When making an instance of Dog, _visited_composed_classes = (Dog,) + # then we make an instance of Animal to include in dog._composed_instances + # so when we are here, cls is Animal + # cls.discriminator != None + # cls not in _visited_composed_classes + # new_cls = Dog + # but we know we know that we already have Dog + # because it is in visited_composed_classes + # so make Animal here + return super(OpenApiModel, cls).__new__(cls) + + # Build a list containing all oneOf and anyOf descendants. + oneof_anyof_classes = None + if cls._composed_schemas is not None: + oneof_anyof_classes = ( + cls._composed_schemas.get('oneOf', ()) + + cls._composed_schemas.get('anyOf', ())) + oneof_anyof_child = new_cls in oneof_anyof_classes + kwargs['_visited_composed_classes'] = visited_composed_classes + (cls,) + + if cls._composed_schemas.get('allOf') and oneof_anyof_child: + # Validate that we can make self because when we make the + # new_cls it will not include the allOf validations in self + self_inst = super(OpenApiModel, cls).__new__(cls) + self_inst.__init__(*args, **kwargs) + + if kwargs.get("_spec_property_naming", False): + # when true, implies new is from deserialization + new_inst = new_cls._new_from_openapi_data(*args, **kwargs) + else: + new_inst = new_cls.__new__(new_cls, *args, **kwargs) + new_inst.__init__(*args, **kwargs) + + return new_inst + + + @classmethod + @convert_js_args_to_python_args + def _new_from_openapi_data(cls, *args, **kwargs): + # this function uses the discriminator to + # pick a new schema/class to instantiate because a discriminator + # propertyName value was passed in + + if len(args) == 1: + arg = args[0] + if arg is None and is_type_nullable(cls): + # The input data is the 'null' value and the type is nullable. + return None + + if issubclass(cls, ModelComposed) and allows_single_value_input(cls): + model_kwargs = {} + oneof_instance = get_oneof_instance(cls, model_kwargs, kwargs, model_arg=arg) + return oneof_instance + + + visited_composed_classes = kwargs.get('_visited_composed_classes', ()) + if ( + cls.discriminator is None or + cls in visited_composed_classes + ): + # Use case 1: this openapi schema (cls) does not have a discriminator + # Use case 2: we have already visited this class before and are sure that we + # want to instantiate it this time. We have visited this class deserializing + # a payload with a discriminator. During that process we traveled through + # this class but did not make an instance of it. Now we are making an + # instance of a composed class which contains cls in it, so this time make an instance of cls. + # + # Here's an example of use case 2: 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 the composed schema dog Dog, we will make an instance of the + # Animal class (because Dal has allOf: Animal) but this time we won't travel + # through Animal's discriminator because we passed in + # _visited_composed_classes = (Animal,) + + return cls._from_openapi_data(*args, **kwargs) + + # Get the name and value of the discriminator property. + # The discriminator name is obtained from the discriminator meta-data + # and the discriminator value is obtained from the input data. + discr_propertyname_py = list(cls.discriminator.keys())[0] + discr_propertyname_js = cls.attribute_map[discr_propertyname_py] + if discr_propertyname_js in kwargs: + discr_value = kwargs[discr_propertyname_js] + elif discr_propertyname_py in kwargs: + discr_value = kwargs[discr_propertyname_py] + else: + # The input data does not contain the discriminator property. + path_to_item = kwargs.get('_path_to_item', ()) + raise ApiValueError( + "Cannot deserialize input data due to missing discriminator. " + "The discriminator property '%s' is missing at path: %s" % + (discr_propertyname_js, path_to_item) + ) + + # Implementation note: the last argument to get_discriminator_class + # is a list of visited classes. get_discriminator_class may recursively + # call itself and update the list of visited classes, and the initial + # value must be an empty list. Hence not using 'visited_composed_classes' + new_cls = get_discriminator_class( + cls, discr_propertyname_py, discr_value, []) + if new_cls is None: + path_to_item = kwargs.get('_path_to_item', ()) + disc_prop_value = kwargs.get( + discr_propertyname_js, kwargs.get(discr_propertyname_py)) + raise ApiValueError( + "Cannot deserialize input data due to invalid discriminator " + "value. The OpenAPI document has no mapping for discriminator " + "property '%s'='%s' at path: %s" % + (discr_propertyname_js, disc_prop_value, path_to_item) + ) + + if new_cls in visited_composed_classes: + # if we are making an instance of a composed schema Descendent + # which allOf includes Ancestor, then Ancestor contains + # a discriminator that includes Descendent. + # So if we make an instance of Descendent, we have to make an + # instance of Ancestor to hold the allOf properties. + # This code detects that use case and makes the instance of Ancestor + # For example: + # When making an instance of Dog, _visited_composed_classes = (Dog,) + # then we make an instance of Animal to include in dog._composed_instances + # so when we are here, cls is Animal + # cls.discriminator != None + # cls not in _visited_composed_classes + # new_cls = Dog + # but we know we know that we already have Dog + # because it is in visited_composed_classes + # so make Animal here + return cls._from_openapi_data(*args, **kwargs) + + # Build a list containing all oneOf and anyOf descendants. + oneof_anyof_classes = None + if cls._composed_schemas is not None: + oneof_anyof_classes = ( + cls._composed_schemas.get('oneOf', ()) + + cls._composed_schemas.get('anyOf', ())) + oneof_anyof_child = new_cls in oneof_anyof_classes + kwargs['_visited_composed_classes'] = visited_composed_classes + (cls,) + + if cls._composed_schemas.get('allOf') and oneof_anyof_child: + # Validate that we can make self because when we make the + # new_cls it will not include the allOf validations in self + self_inst = cls._from_openapi_data(*args, **kwargs) + + + new_inst = new_cls._new_from_openapi_data(*args, **kwargs) + return new_inst + + +class ModelSimple(OpenApiModel): + """the parent class of models whose type != object in their + swagger/openapi""" + + def __setitem__(self, name, value): + """set the value of an attribute using square-bracket notation: `instance[attr] = val`""" + if name in self.required_properties: + self.__dict__[name] = value + return + + self.set_attribute(name, value) + + def get(self, name, default=None): + """returns the value of an attribute or some default value if the attribute was not set""" + if name in self.required_properties: + return self.__dict__[name] + + return self.__dict__['_data_store'].get(name, default) + + def __getitem__(self, name): + """get the value of an attribute using square-bracket notation: `instance[attr]`""" + if name in self: + return self.get(name) + + raise ApiAttributeError( + "{0} has no attribute '{1}'".format( + type(self).__name__, name), + [e for e in [self._path_to_item, name] if e] + ) + + def __contains__(self, name): + """used by `in` operator to check if an attribute value was set in an instance: `'attr' in instance`""" + if name in self.required_properties: + return name in self.__dict__ + + return name in self.__dict__['_data_store'] + + def to_str(self): + """Returns the string representation of the model""" + return str(self.value) + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, self.__class__): + return False + + this_val = self._data_store['value'] + that_val = other._data_store['value'] + types = set() + types.add(this_val.__class__) + types.add(that_val.__class__) + vals_equal = this_val == that_val + return vals_equal + + +class ModelNormal(OpenApiModel): + """the parent class of models whose type == object in their + swagger/openapi""" + + def __setitem__(self, name, value): + """set the value of an attribute using square-bracket notation: `instance[attr] = val`""" + if name in self.required_properties: + self.__dict__[name] = value + return + + self.set_attribute(name, value) + + def get(self, name, default=None): + """returns the value of an attribute or some default value if the attribute was not set""" + if name in self.required_properties: + return self.__dict__[name] + + return self.__dict__['_data_store'].get(name, default) + + def __getitem__(self, name): + """get the value of an attribute using square-bracket notation: `instance[attr]`""" + if name in self: + return self.get(name) + + raise ApiAttributeError( + "{0} has no attribute '{1}'".format( + type(self).__name__, name), + [e for e in [self._path_to_item, name] if e] + ) + + def __contains__(self, name): + """used by `in` operator to check if an attribute value was set in an instance: `'attr' in instance`""" + if name in self.required_properties: + return name in self.__dict__ + + return name in self.__dict__['_data_store'] + + def to_dict(self): + """Returns the model properties as a dict""" + return model_to_dict(self, serialize=False) + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, self.__class__): + return False + + if not set(self._data_store.keys()) == set(other._data_store.keys()): + return False + for _var_name, this_val in self._data_store.items(): + that_val = other._data_store[_var_name] + types = set() + types.add(this_val.__class__) + types.add(that_val.__class__) + vals_equal = this_val == that_val + if not vals_equal: + return False + return True + + +class ModelComposed(OpenApiModel): + """the parent class of models whose type == object in their + swagger/openapi and have oneOf/allOf/anyOf + + When one sets a property we use var_name_to_model_instances to store the value in + the correct class instances + run any type checking + validation code. + When one gets a property we use var_name_to_model_instances to get the value + from the correct class instances. + This allows multiple composed schemas to contain the same property with additive + constraints on the value. + + _composed_schemas (dict) stores the anyOf/allOf/oneOf classes + key (str): allOf/oneOf/anyOf + value (list): the classes in the XOf definition. + Note: none_type can be included when the openapi document version >= 3.1.0 + _composed_instances (list): stores a list of instances of the composed schemas + defined in _composed_schemas. When properties are accessed in the self instance, + they are returned from the self._data_store or the data stores in the instances + in self._composed_schemas + _var_name_to_model_instances (dict): maps between a variable name on self and + the composed instances (self included) which contain that data + key (str): property name + value (list): list of class instances, self or instances in _composed_instances + which contain the value that the key is referring to. + """ + + def __setitem__(self, name, value): + """set the value of an attribute using square-bracket notation: `instance[attr] = val`""" + if name in self.required_properties: + self.__dict__[name] = value + return + + """ + Use cases: + 1. additional_properties_type is None (additionalProperties == False in spec) + Check for property presence in self.openapi_types + if not present then throw an error + if present set in self, set attribute + always set on composed schemas + 2. additional_properties_type exists + set attribute on self + always set on composed schemas + """ + if self.additional_properties_type is None: + """ + For an attribute to exist on a composed schema it must: + - fulfill schema_requirements in the self composed schema not considering oneOf/anyOf/allOf schemas AND + - fulfill schema_requirements in each oneOf/anyOf/allOf schemas + + schema_requirements: + For an attribute to exist on a schema it must: + - be present in properties at the schema OR + - have additionalProperties unset (defaults additionalProperties = any type) OR + - have additionalProperties set + """ + if name not in self.openapi_types: + raise ApiAttributeError( + "{0} has no attribute '{1}'".format( + type(self).__name__, name), + [e for e in [self._path_to_item, name] if e] + ) + # attribute must be set on self and composed instances + self.set_attribute(name, value) + for model_instance in self._composed_instances: + setattr(model_instance, name, value) + if name not in self._var_name_to_model_instances: + # we assigned an additional property + self.__dict__['_var_name_to_model_instances'][name] = self._composed_instances + [self] + return None + + __unset_attribute_value__ = object() + + def get(self, name, default=None): + """returns the value of an attribute or some default value if the attribute was not set""" + if name in self.required_properties: + return self.__dict__[name] + + # get the attribute from the correct instance + model_instances = self._var_name_to_model_instances.get(name) + values = [] + # A composed model stores self and child (oneof/anyOf/allOf) models under + # self._var_name_to_model_instances. + # Any property must exist in self and all model instances + # The value stored in all model instances must be the same + if model_instances: + for model_instance in model_instances: + if name in model_instance._data_store: + v = model_instance._data_store[name] + if v not in values: + values.append(v) + len_values = len(values) + if len_values == 0: + return default + elif len_values == 1: + return values[0] + elif len_values > 1: + raise ApiValueError( + "Values stored for property {0} in {1} differ when looking " + "at self and self's composed instances. All values must be " + "the same".format(name, type(self).__name__), + [e for e in [self._path_to_item, name] if e] + ) + + def __getitem__(self, name): + """get the value of an attribute using square-bracket notation: `instance[attr]`""" + value = self.get(name, self.__unset_attribute_value__) + if value is self.__unset_attribute_value__: + raise ApiAttributeError( + "{0} has no attribute '{1}'".format( + type(self).__name__, name), + [e for e in [self._path_to_item, name] if e] + ) + return value + + def __contains__(self, name): + """used by `in` operator to check if an attribute value was set in an instance: `'attr' in instance`""" + + if name in self.required_properties: + return name in self.__dict__ + + model_instances = self._var_name_to_model_instances.get( + name, self._additional_properties_model_instances) + + if model_instances: + for model_instance in model_instances: + if name in model_instance._data_store: + return True + + return False + + def to_dict(self): + """Returns the model properties as a dict""" + return model_to_dict(self, serialize=False) + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, self.__class__): + return False + + if not set(self._data_store.keys()) == set(other._data_store.keys()): + return False + for _var_name, this_val in self._data_store.items(): + that_val = other._data_store[_var_name] + types = set() + types.add(this_val.__class__) + types.add(that_val.__class__) + vals_equal = this_val == that_val + if not vals_equal: + return False + return True + + +COERCION_INDEX_BY_TYPE = { + ModelComposed: 0, + ModelNormal: 1, + ModelSimple: 2, + none_type: 3, # The type of 'None'. + list: 4, + dict: 5, + float: 6, + int: 7, + bool: 8, + datetime: 9, + date: 10, + str: 11, + file_type: 12, # 'file_type' is an alias for the built-in 'file' or 'io.IOBase' type. +} + +# these are used to limit what type conversions we try to do +# when we have a valid type already and we want to try converting +# to another type +UPCONVERSION_TYPE_PAIRS = ( + (str, datetime), + (str, date), + (int, float), # A float may be serialized as an integer, e.g. '3' is a valid serialized float. + (list, ModelComposed), + (dict, ModelComposed), + (str, ModelComposed), + (int, ModelComposed), + (float, ModelComposed), + (list, ModelComposed), + (list, ModelNormal), + (dict, ModelNormal), + (str, ModelSimple), + (int, ModelSimple), + (float, ModelSimple), + (list, ModelSimple), +) + +COERCIBLE_TYPE_PAIRS = { + False: ( # client instantiation of a model with client data + # (dict, ModelComposed), + # (list, ModelComposed), + # (dict, ModelNormal), + # (list, ModelNormal), + # (str, ModelSimple), + # (int, ModelSimple), + # (float, ModelSimple), + # (list, ModelSimple), + # (str, int), + # (str, float), + # (str, datetime), + # (str, date), + # (int, str), + # (float, str), + ), + True: ( # server -> client data + (dict, ModelComposed), + (list, ModelComposed), + (dict, ModelNormal), + (list, ModelNormal), + (str, ModelSimple), + (int, ModelSimple), + (float, ModelSimple), + (list, ModelSimple), + # (str, int), + # (str, float), + (str, datetime), + (str, date), + # (int, str), + # (float, str), + (str, file_type) + ), +} + + +def get_simple_class(input_value): + """Returns an input_value's simple class that we will use for type checking + Python2: + float and int will return int, where int is the python3 int backport + str and unicode will return str, where str is the python3 str backport + Note: float and int ARE both instances of int backport + Note: str_py2 and unicode_py2 are NOT both instances of str backport + + Args: + input_value (class/class_instance): the item for which we will return + the simple class + """ + if isinstance(input_value, type): + # input_value is a class + return input_value + elif isinstance(input_value, tuple): + return tuple + elif isinstance(input_value, list): + return list + elif isinstance(input_value, dict): + return dict + elif isinstance(input_value, none_type): + return none_type + elif isinstance(input_value, file_type): + return file_type + elif isinstance(input_value, bool): + # this must be higher than the int check because + # isinstance(True, int) == True + return bool + elif isinstance(input_value, int): + return int + elif isinstance(input_value, datetime): + # this must be higher than the date check because + # isinstance(datetime_instance, date) == True + return datetime + elif isinstance(input_value, date): + return date + elif isinstance(input_value, str): + return str + return type(input_value) + + +def check_allowed_values(allowed_values, input_variable_path, input_values): + """Raises an exception if the input_values are not allowed + + Args: + allowed_values (dict): the allowed_values dict + input_variable_path (tuple): the path to the input variable + input_values (list/str/int/float/date/datetime): the values that we + are checking to see if they are in allowed_values + """ + these_allowed_values = list(allowed_values[input_variable_path].values()) + if (isinstance(input_values, list) + and not set(input_values).issubset( + set(these_allowed_values))): + invalid_values = ", ".join( + map(str, set(input_values) - set(these_allowed_values))), + raise ApiValueError( + "Invalid values for `%s` [%s], must be a subset of [%s]" % + ( + input_variable_path[0], + invalid_values, + ", ".join(map(str, these_allowed_values)) + ) + ) + elif (isinstance(input_values, dict) + and not set( + input_values.keys()).issubset(set(these_allowed_values))): + invalid_values = ", ".join( + map(str, set(input_values.keys()) - set(these_allowed_values))) + raise ApiValueError( + "Invalid keys in `%s` [%s], must be a subset of [%s]" % + ( + input_variable_path[0], + invalid_values, + ", ".join(map(str, these_allowed_values)) + ) + ) + elif (not isinstance(input_values, (list, dict)) + and input_values not in these_allowed_values): + raise ApiValueError( + "Invalid value for `%s` (%s), must be one of %s" % + ( + input_variable_path[0], + input_values, + these_allowed_values + ) + ) + + +def is_json_validation_enabled(schema_keyword, configuration=None): + """Returns true if JSON schema validation is enabled for the specified + validation keyword. This can be used to skip JSON schema structural validation + as requested in the configuration. + + Args: + schema_keyword (string): the name of a JSON schema validation keyword. + configuration (Configuration): the configuration class. + """ + + return (configuration is None or + not hasattr(configuration, '_disabled_client_side_validations') or + schema_keyword not in configuration._disabled_client_side_validations) + + +def check_validations( + validations, input_variable_path, input_values, + configuration=None): + """Raises an exception if the input_values are invalid + + Args: + validations (dict): the validation dictionary. + input_variable_path (tuple): the path to the input variable. + input_values (list/str/int/float/date/datetime): the values that we + are checking. + configuration (Configuration): the configuration class. + """ + + if input_values is None: + return + + current_validations = validations[input_variable_path] + if (is_json_validation_enabled('multipleOf', configuration) and + 'multiple_of' in current_validations and + isinstance(input_values, (int, float)) and + not (float(input_values) / current_validations['multiple_of']).is_integer()): + # Note 'multipleOf' will be as good as the floating point arithmetic. + raise ApiValueError( + "Invalid value for `%s`, value must be a multiple of " + "`%s`" % ( + input_variable_path[0], + current_validations['multiple_of'] + ) + ) + + if (is_json_validation_enabled('maxLength', configuration) and + 'max_length' in current_validations and + len(input_values) > current_validations['max_length']): + raise ApiValueError( + "Invalid value for `%s`, length must be less than or equal to " + "`%s`" % ( + input_variable_path[0], + current_validations['max_length'] + ) + ) + + if (is_json_validation_enabled('minLength', configuration) and + 'min_length' in current_validations and + len(input_values) < current_validations['min_length']): + raise ApiValueError( + "Invalid value for `%s`, length must be greater than or equal to " + "`%s`" % ( + input_variable_path[0], + current_validations['min_length'] + ) + ) + + if (is_json_validation_enabled('maxItems', configuration) and + 'max_items' in current_validations and + len(input_values) > current_validations['max_items']): + raise ApiValueError( + "Invalid value for `%s`, number of items must be less than or " + "equal to `%s`" % ( + input_variable_path[0], + current_validations['max_items'] + ) + ) + + if (is_json_validation_enabled('minItems', configuration) and + 'min_items' in current_validations and + len(input_values) < current_validations['min_items']): + raise ValueError( + "Invalid value for `%s`, number of items must be greater than or " + "equal to `%s`" % ( + input_variable_path[0], + current_validations['min_items'] + ) + ) + + items = ('exclusive_maximum', 'inclusive_maximum', 'exclusive_minimum', + 'inclusive_minimum') + if (any(item in current_validations for item in items)): + if isinstance(input_values, list): + max_val = max(input_values) + min_val = min(input_values) + elif isinstance(input_values, dict): + max_val = max(input_values.values()) + min_val = min(input_values.values()) + else: + max_val = input_values + min_val = input_values + + if (is_json_validation_enabled('exclusiveMaximum', configuration) and + 'exclusive_maximum' in current_validations and + max_val >= current_validations['exclusive_maximum']): + raise ApiValueError( + "Invalid value for `%s`, must be a value less than `%s`" % ( + input_variable_path[0], + current_validations['exclusive_maximum'] + ) + ) + + if (is_json_validation_enabled('maximum', configuration) and + 'inclusive_maximum' in current_validations and + max_val > current_validations['inclusive_maximum']): + raise ApiValueError( + "Invalid value for `%s`, must be a value less than or equal to " + "`%s`" % ( + input_variable_path[0], + current_validations['inclusive_maximum'] + ) + ) + + if (is_json_validation_enabled('exclusiveMinimum', configuration) and + 'exclusive_minimum' in current_validations and + min_val <= current_validations['exclusive_minimum']): + raise ApiValueError( + "Invalid value for `%s`, must be a value greater than `%s`" % + ( + input_variable_path[0], + current_validations['exclusive_maximum'] + ) + ) + + if (is_json_validation_enabled('minimum', configuration) and + 'inclusive_minimum' in current_validations and + min_val < current_validations['inclusive_minimum']): + raise ApiValueError( + "Invalid value for `%s`, must be a value greater than or equal " + "to `%s`" % ( + input_variable_path[0], + current_validations['inclusive_minimum'] + ) + ) + flags = current_validations.get('regex', {}).get('flags', 0) + if (is_json_validation_enabled('pattern', configuration) and + 'regex' in current_validations and + not re.search(current_validations['regex']['pattern'], + input_values, flags=flags)): + err_msg = r"Invalid value for `%s`, must match regular expression `%s`" % ( + input_variable_path[0], + current_validations['regex']['pattern'] + ) + if flags != 0: + # Don't print the regex flags if the flags are not + # specified in the OAS document. + err_msg = r"%s with flags=`%s`" % (err_msg, flags) + raise ApiValueError(err_msg) + + +def order_response_types(required_types): + """Returns the required types sorted in coercion order + + Args: + required_types (list/tuple): collection of classes or instance of + list or dict with class information inside it. + + Returns: + (list): coercion order sorted collection of classes or instance + of list or dict with class information inside it. + """ + + def index_getter(class_or_instance): + if isinstance(class_or_instance, list): + return COERCION_INDEX_BY_TYPE[list] + elif isinstance(class_or_instance, dict): + return COERCION_INDEX_BY_TYPE[dict] + elif (inspect.isclass(class_or_instance) + and issubclass(class_or_instance, ModelComposed)): + return COERCION_INDEX_BY_TYPE[ModelComposed] + elif (inspect.isclass(class_or_instance) + and issubclass(class_or_instance, ModelNormal)): + return COERCION_INDEX_BY_TYPE[ModelNormal] + elif (inspect.isclass(class_or_instance) + and issubclass(class_or_instance, ModelSimple)): + return COERCION_INDEX_BY_TYPE[ModelSimple] + elif class_or_instance in COERCION_INDEX_BY_TYPE: + return COERCION_INDEX_BY_TYPE[class_or_instance] + raise ApiValueError("Unsupported type: %s" % class_or_instance) + + sorted_types = sorted( + required_types, + key=lambda class_or_instance: index_getter(class_or_instance) + ) + return sorted_types + + +def remove_uncoercible(required_types_classes, current_item, spec_property_naming, + must_convert=True): + """Only keeps the type conversions that are possible + + Args: + required_types_classes (tuple): tuple of classes that are required + these should be ordered by COERCION_INDEX_BY_TYPE + 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 variables names in the input data are python + variable names in PEP-8 snake case. + current_item (any): the current item (input data) to be converted + + Keyword Args: + must_convert (bool): if True the item to convert is of the wrong + type and we want a big list of coercibles + if False, we want a limited list of coercibles + + Returns: + (list): the remaining coercible required types, classes only + """ + current_type_simple = get_simple_class(current_item) + + results_classes = [] + for required_type_class in required_types_classes: + # convert our models to OpenApiModel + required_type_class_simplified = required_type_class + if isinstance(required_type_class_simplified, type): + if issubclass(required_type_class_simplified, ModelComposed): + required_type_class_simplified = ModelComposed + elif issubclass(required_type_class_simplified, ModelNormal): + required_type_class_simplified = ModelNormal + elif issubclass(required_type_class_simplified, ModelSimple): + required_type_class_simplified = ModelSimple + + if required_type_class_simplified == current_type_simple: + # don't consider converting to one's own class + continue + + class_pair = (current_type_simple, required_type_class_simplified) + if must_convert and class_pair in COERCIBLE_TYPE_PAIRS[spec_property_naming]: + results_classes.append(required_type_class) + elif class_pair in UPCONVERSION_TYPE_PAIRS: + results_classes.append(required_type_class) + return results_classes + +def get_discriminated_classes(cls): + """ + Returns all the classes that a discriminator converts to + TODO: lru_cache this + """ + possible_classes = [] + key = list(cls.discriminator.keys())[0] + if is_type_nullable(cls): + possible_classes.append(cls) + for discr_cls in cls.discriminator[key].values(): + if hasattr(discr_cls, 'discriminator') and discr_cls.discriminator is not None: + possible_classes.extend(get_discriminated_classes(discr_cls)) + else: + possible_classes.append(discr_cls) + return possible_classes + + +def get_possible_classes(cls, from_server_context): + # TODO: lru_cache this + possible_classes = [cls] + if from_server_context: + return possible_classes + if hasattr(cls, 'discriminator') and cls.discriminator is not None: + possible_classes = [] + possible_classes.extend(get_discriminated_classes(cls)) + elif issubclass(cls, ModelComposed): + possible_classes.extend(composed_model_input_classes(cls)) + return possible_classes + + +def get_required_type_classes(required_types_mixed, spec_property_naming): + """Converts the tuple required_types into a tuple and a dict described + below + + Args: + required_types_mixed (tuple/list): will contain either classes or + instance of list or dict + spec_property_naming (bool): if True these values came from the + server, and we use the data types in our endpoints. + If False, we are client side and we need to include + oneOf and discriminator classes inside the data types in our endpoints + + Returns: + (valid_classes, dict_valid_class_to_child_types_mixed): + valid_classes (tuple): the valid classes that the current item + should be + dict_valid_class_to_child_types_mixed (dict): + valid_class (class): this is the key + child_types_mixed (list/dict/tuple): describes the valid child + types + """ + valid_classes = [] + child_req_types_by_current_type = {} + for required_type in required_types_mixed: + if isinstance(required_type, list): + valid_classes.append(list) + child_req_types_by_current_type[list] = required_type + elif isinstance(required_type, tuple): + valid_classes.append(tuple) + child_req_types_by_current_type[tuple] = required_type + elif isinstance(required_type, dict): + valid_classes.append(dict) + child_req_types_by_current_type[dict] = required_type[str] + else: + valid_classes.extend(get_possible_classes(required_type, spec_property_naming)) + return tuple(valid_classes), child_req_types_by_current_type + + +def change_keys_js_to_python(input_dict, model_class): + """ + Converts from javascript_key keys in the input_dict to python_keys in + the output dict using the mapping in model_class. + If the input_dict contains a key which does not declared in the model_class, + the key is added to the output dict as is. The assumption is the model_class + may have undeclared properties (additionalProperties attribute in the OAS + document). + """ + + if getattr(model_class, 'attribute_map', None) is None: + return input_dict + output_dict = {} + reversed_attr_map = {value: key for key, value in + model_class.attribute_map.items()} + for javascript_key, value in input_dict.items(): + python_key = reversed_attr_map.get(javascript_key) + if python_key is None: + # if the key is unknown, it is in error or it is an + # additionalProperties variable + python_key = javascript_key + output_dict[python_key] = value + return output_dict + + +def get_type_error(var_value, path_to_item, valid_classes, key_type=False): + error_msg = type_error_message( + var_name=path_to_item[-1], + var_value=var_value, + valid_classes=valid_classes, + key_type=key_type + ) + return ApiTypeError( + error_msg, + path_to_item=path_to_item, + valid_classes=valid_classes, + key_type=key_type + ) + + +def deserialize_primitive(data, klass, path_to_item): + """Deserializes string to primitive type. + + :param data: str/int/float + :param klass: str/class the class to convert to + + :return: int, float, str, bool, date, datetime + """ + additional_message = "" + try: + if klass in {datetime, date}: + additional_message = ( + "If you need your parameter to have a fallback " + "string value, please set its type as `type: {}` in your " + "spec. That allows the value to be any type. " + ) + if klass == datetime: + if len(data) < 8: + raise ValueError("This is not a datetime") + # The string should be in iso8601 datetime format. + parsed_datetime = parse(data) + date_only = ( + parsed_datetime.hour == 0 and + parsed_datetime.minute == 0 and + parsed_datetime.second == 0 and + parsed_datetime.tzinfo is None and + 8 <= len(data) <= 10 + ) + if date_only: + raise ValueError("This is a date, not a datetime") + return parsed_datetime + elif klass == date: + if len(data) < 8: + raise ValueError("This is not a date") + return parse(data).date() + else: + converted_value = klass(data) + if isinstance(data, str) and klass == float: + if str(converted_value) != data: + # '7' -> 7.0 -> '7.0' != '7' + raise ValueError('This is not a float') + return converted_value + except (OverflowError, ValueError) as ex: + # parse can raise OverflowError + raise ApiValueError( + "{0}Failed to parse {1} as {2}".format( + additional_message, repr(data), klass.__name__ + ), + path_to_item=path_to_item + ) from ex + + +def get_discriminator_class(model_class, + discr_name, + discr_value, cls_visited): + """Returns the child class specified by the discriminator. + + Args: + model_class (OpenApiModel): the model class. + discr_name (string): the name of the discriminator property. + discr_value (any): the discriminator value. + cls_visited (list): list of model classes that have been visited. + Used to determine the discriminator class without + visiting circular references indefinitely. + + Returns: + used_model_class (class/None): the chosen child class that will be used + to deserialize the data, for example dog.Dog. + If a class is not found, None is returned. + """ + + if model_class in cls_visited: + # The class has already been visited and no suitable class was found. + return None + cls_visited.append(model_class) + used_model_class = None + if discr_name in model_class.discriminator: + class_name_to_discr_class = model_class.discriminator[discr_name] + used_model_class = class_name_to_discr_class.get(discr_value) + if used_model_class is None: + # We didn't find a discriminated class in class_name_to_discr_class. + # So look in the ancestor or descendant discriminators + # The discriminator mapping may exist in a descendant (anyOf, oneOf) + # or ancestor (allOf). + # Ancestor example: in the GrandparentAnimal -> ParentPet -> ChildCat + # hierarchy, the discriminator mappings may be defined at any level + # in the hierarchy. + # Descendant example: mammal -> whale/zebra/Pig -> BasquePig/DanishPig + # if we try to make BasquePig from mammal, we need to travel through + # the oneOf descendant discriminators to find BasquePig + descendant_classes = model_class._composed_schemas.get('oneOf', ()) + \ + model_class._composed_schemas.get('anyOf', ()) + ancestor_classes = model_class._composed_schemas.get('allOf', ()) + possible_classes = descendant_classes + ancestor_classes + for cls in possible_classes: + # Check if the schema has inherited discriminators. + if hasattr(cls, 'discriminator') and cls.discriminator is not None: + used_model_class = get_discriminator_class( + cls, discr_name, discr_value, cls_visited) + if used_model_class is not None: + return used_model_class + return used_model_class + + +def deserialize_model(model_data, model_class, path_to_item, check_type, + configuration, spec_property_naming): + """Deserializes model_data to model instance. + + Args: + model_data (int/str/float/bool/none_type/list/dict): data to instantiate the model + model_class (OpenApiModel): the model class + path_to_item (list): path to the model in the received data + check_type (bool): whether to check the data tupe for the values in + the model + configuration (Configuration): the instance to use to convert files + 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 variables names in the input data are python + variable names in PEP-8 snake case. + + Returns: + model instance + + Raise: + ApiTypeError + ApiValueError + ApiKeyError + """ + + kw_args = dict(_check_type=check_type, + _path_to_item=path_to_item, + _configuration=configuration, + _spec_property_naming=spec_property_naming) + + if issubclass(model_class, ModelSimple): + return model_class._new_from_openapi_data(model_data, **kw_args) + elif isinstance(model_data, list): + return model_class._new_from_openapi_data(*model_data, **kw_args) + if isinstance(model_data, dict): + kw_args.update(model_data) + return model_class._new_from_openapi_data(**kw_args) + elif isinstance(model_data, PRIMITIVE_TYPES): + return model_class._new_from_openapi_data(model_data, **kw_args) + + +def deserialize_file(response_data, configuration, content_disposition=None): + """Deserializes body to file + + Saves response body into a file in a temporary folder, + using the filename from the `Content-Disposition` header if provided. + + Args: + param response_data (str): the file data to write + configuration (Configuration): the instance to use to convert files + + Keyword Args: + content_disposition (str): the value of the Content-Disposition + header + + Returns: + (file_type): the deserialized file which is open + The user is responsible for closing and reading the file + """ + fd, path = tempfile.mkstemp(dir=configuration.temp_folder_path) + os.close(fd) + os.remove(path) + + if content_disposition: + filename = re.search(r'filename=[\'"]?([^\'"\s]+)[\'"]?', + content_disposition).group(1) + path = os.path.join(os.path.dirname(path), filename) + + with open(path, "wb") as f: + if isinstance(response_data, str): + # change str to bytes so we can write it + response_data = response_data.encode('utf-8') + f.write(response_data) + + f = open(path, "rb") + return f + + +def attempt_convert_item(input_value, valid_classes, path_to_item, + configuration, spec_property_naming, key_type=False, + must_convert=False, check_type=True): + """ + Args: + input_value (any): the data to convert + valid_classes (any): the classes that are valid + path_to_item (list): the path to the item to convert + configuration (Configuration): the instance to use to convert files + 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 variables names in the input data are python + variable names in PEP-8 snake case. + key_type (bool): if True we need to convert a key type (not supported) + must_convert (bool): if True we must convert + check_type (bool): if True we check the type or the returned data in + ModelComposed/ModelNormal/ModelSimple instances + + Returns: + instance (any) the fixed item + + Raises: + ApiTypeError + ApiValueError + ApiKeyError + """ + valid_classes_ordered = order_response_types(valid_classes) + valid_classes_coercible = remove_uncoercible( + valid_classes_ordered, input_value, spec_property_naming) + if not valid_classes_coercible or key_type: + # we do not handle keytype errors, json will take care + # of this for us + if configuration is None or not configuration.discard_unknown_keys: + raise get_type_error(input_value, path_to_item, valid_classes, + key_type=key_type) + for valid_class in valid_classes_coercible: + try: + if issubclass(valid_class, OpenApiModel): + return deserialize_model(input_value, valid_class, + path_to_item, check_type, + configuration, spec_property_naming) + elif valid_class == file_type: + return deserialize_file(input_value, configuration) + return deserialize_primitive(input_value, valid_class, + path_to_item) + except (ApiTypeError, ApiValueError, ApiKeyError) as conversion_exc: + if must_convert: + raise conversion_exc + # if we have conversion errors when must_convert == False + # we ignore the exception and move on to the next class + continue + # we were unable to convert, must_convert == False + return input_value + + +def is_type_nullable(input_type): + """ + Returns true if None is an allowed value for the specified input_type. + + A type is nullable if at least one of the following conditions is true: + 1. The OAS 'nullable' attribute has been specified, + 1. The type is the 'null' type, + 1. The type is a anyOf/oneOf composed schema, and a child schema is + the 'null' type. + Args: + input_type (type): the class of the input_value that we are + checking + Returns: + bool + """ + if input_type is none_type: + return True + if issubclass(input_type, OpenApiModel) and input_type._nullable: + return True + if issubclass(input_type, ModelComposed): + # If oneOf/anyOf, check if the 'null' type is one of the allowed types. + for t in input_type._composed_schemas.get('oneOf', ()): + if is_type_nullable(t): return True + for t in input_type._composed_schemas.get('anyOf', ()): + if is_type_nullable(t): return True + return False + + +def is_valid_type(input_class_simple, valid_classes): + """ + Args: + input_class_simple (class): the class of the input_value that we are + checking + valid_classes (tuple): the valid classes that the current item + should be + Returns: + bool + """ + if issubclass(input_class_simple, OpenApiModel) and \ + valid_classes == (bool, date, datetime, dict, float, int, list, str, none_type,): + return True + valid_type = input_class_simple in valid_classes + if not valid_type and ( + issubclass(input_class_simple, OpenApiModel) or + input_class_simple is none_type): + for valid_class in valid_classes: + if input_class_simple is none_type and is_type_nullable(valid_class): + # Schema is oneOf/anyOf and the 'null' type is one of the allowed types. + return True + if not (issubclass(valid_class, OpenApiModel) and valid_class.discriminator): + continue + discr_propertyname_py = list(valid_class.discriminator.keys())[0] + discriminator_classes = ( + valid_class.discriminator[discr_propertyname_py].values() + ) + valid_type = is_valid_type(input_class_simple, discriminator_classes) + if valid_type: + return True + return valid_type + + +def validate_and_convert_types(input_value, required_types_mixed, path_to_item, + spec_property_naming, _check_type, configuration=None): + """Raises a TypeError is there is a problem, otherwise returns value + + Args: + input_value (any): the data to validate/convert + required_types_mixed (list/dict/tuple): A list of + valid classes, or a list tuples of valid classes, or a dict where + the value is a tuple of value classes + path_to_item: (list) the path to the data being validated + this stores a list of keys or indices to get to the data being + validated + 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 variables names in the input data are python + variable names in PEP-8 snake case. + _check_type: (boolean) if true, type will be checked and conversion + will be attempted. + configuration: (Configuration): the configuration class to use + when converting file_type items. + If passed, conversion will be attempted when possible + If not passed, no conversions will be attempted and + exceptions will be raised + + Returns: + the correctly typed value + + Raises: + ApiTypeError + """ + results = get_required_type_classes(required_types_mixed, spec_property_naming) + valid_classes, child_req_types_by_current_type = results + + input_class_simple = get_simple_class(input_value) + valid_type = is_valid_type(input_class_simple, valid_classes) + if not valid_type: + if configuration: + # if input_value is not valid_type try to convert it + converted_instance = attempt_convert_item( + input_value, + valid_classes, + path_to_item, + configuration, + spec_property_naming, + key_type=False, + must_convert=True, + check_type=_check_type + ) + return converted_instance + else: + raise get_type_error(input_value, path_to_item, valid_classes, + key_type=False) + + # input_value's type is in valid_classes + if len(valid_classes) > 1 and configuration: + # there are valid classes which are not the current class + valid_classes_coercible = remove_uncoercible( + valid_classes, input_value, spec_property_naming, must_convert=False) + if valid_classes_coercible: + converted_instance = attempt_convert_item( + input_value, + valid_classes_coercible, + path_to_item, + configuration, + spec_property_naming, + key_type=False, + must_convert=False, + check_type=_check_type + ) + return converted_instance + + if child_req_types_by_current_type == {}: + # all types are of the required types and there are no more inner + # variables left to look at + return input_value + inner_required_types = child_req_types_by_current_type.get( + type(input_value) + ) + if inner_required_types is None: + # for this type, there are not more inner variables left to look at + return input_value + if isinstance(input_value, list): + if input_value == []: + # allow an empty list + return input_value + for index, inner_value in enumerate(input_value): + inner_path = list(path_to_item) + inner_path.append(index) + input_value[index] = validate_and_convert_types( + inner_value, + inner_required_types, + inner_path, + spec_property_naming, + _check_type, + configuration=configuration + ) + elif isinstance(input_value, dict): + if input_value == {}: + # allow an empty dict + return input_value + for inner_key, inner_val in input_value.items(): + inner_path = list(path_to_item) + inner_path.append(inner_key) + if get_simple_class(inner_key) != str: + raise get_type_error(inner_key, inner_path, valid_classes, + key_type=True) + input_value[inner_key] = validate_and_convert_types( + inner_val, + inner_required_types, + inner_path, + spec_property_naming, + _check_type, + configuration=configuration + ) + return input_value + + +def model_to_dict(model_instance, serialize=True): + """Returns the model properties as a dict + + Args: + model_instance (one of your model instances): the model instance that + will be converted to a dict. + + Keyword Args: + serialize (bool): if True, the keys in the dict will be values from + attribute_map + """ + result = {} + extract_item = lambda item: (item[0], model_to_dict(item[1], serialize=serialize)) if hasattr(item[1], '_data_store') else item + + model_instances = [model_instance] + if model_instance._composed_schemas: + model_instances.extend(model_instance._composed_instances) + seen_json_attribute_names = set() + used_fallback_python_attribute_names = set() + py_to_json_map = {} + for model_instance in model_instances: + for attr, value in model_instance._data_store.items(): + if serialize: + # we use get here because additional property key names do not + # exist in attribute_map + try: + attr = model_instance.attribute_map[attr] + py_to_json_map.update(model_instance.attribute_map) + seen_json_attribute_names.add(attr) + except KeyError: + used_fallback_python_attribute_names.add(attr) + if isinstance(value, list): + if not value: + # empty list or None + result[attr] = value + else: + res = [] + for v in value: + if isinstance(v, PRIMITIVE_TYPES) or v is None: + res.append(v) + elif isinstance(v, ModelSimple): + res.append(v.value) + elif isinstance(v, dict): + res.append(dict(map( + extract_item, + v.items() + ))) + else: + res.append(model_to_dict(v, serialize=serialize)) + result[attr] = res + elif isinstance(value, dict): + result[attr] = dict(map( + extract_item, + value.items() + )) + elif isinstance(value, ModelSimple): + result[attr] = value.value + elif hasattr(value, '_data_store'): + result[attr] = model_to_dict(value, serialize=serialize) + else: + result[attr] = value + if serialize: + for python_key in used_fallback_python_attribute_names: + json_key = py_to_json_map.get(python_key) + if json_key is None: + continue + if python_key == json_key: + continue + json_key_assigned_no_need_for_python_key = json_key in seen_json_attribute_names + if json_key_assigned_no_need_for_python_key: + del result[python_key] + + return result + + +def type_error_message(var_value=None, var_name=None, valid_classes=None, + key_type=None): + """ + Keyword Args: + var_value (any): the variable which has the type_error + var_name (str): the name of the variable which has the typ error + valid_classes (tuple): the accepted classes for current_item's + value + key_type (bool): False if our value is a value in a dict + True if it is a key in a dict + False if our item is an item in a list + """ + key_or_value = 'value' + if key_type: + key_or_value = 'key' + valid_classes_phrase = get_valid_classes_phrase(valid_classes) + msg = ( + "Invalid type for variable '{0}'. Required {1} type {2} and " + "passed type was {3}".format( + var_name, + key_or_value, + valid_classes_phrase, + type(var_value).__name__, + ) + ) + return msg + + +def get_valid_classes_phrase(input_classes): + """Returns a string phrase describing what types are allowed + """ + all_classes = list(input_classes) + all_classes = sorted(all_classes, key=lambda cls: cls.__name__) + all_class_names = [cls.__name__ for cls in all_classes] + if len(all_class_names) == 1: + return 'is {0}'.format(all_class_names[0]) + return "is one of [{0}]".format(", ".join(all_class_names)) + + +def get_allof_instances(self, model_args, constant_args): + """ + Args: + self: the class we are handling + model_args (dict): var_name to var_value + used to make instances + constant_args (dict): + metadata arguments: + _check_type + _path_to_item + _spec_property_naming + _configuration + _visited_composed_classes + + Returns + composed_instances (list) + """ + composed_instances = [] + for allof_class in self._composed_schemas['allOf']: + + try: + if constant_args.get('_spec_property_naming'): + allof_instance = allof_class._from_openapi_data(**model_args, **constant_args) + else: + allof_instance = allof_class(**model_args, **constant_args) + composed_instances.append(allof_instance) + except Exception as ex: + raise ApiValueError( + "Invalid inputs given to generate an instance of '%s'. The " + "input data was invalid for the allOf schema '%s' in the composed " + "schema '%s'. Error=%s" % ( + allof_class.__name__, + allof_class.__name__, + self.__class__.__name__, + str(ex) + ) + ) from ex + return composed_instances + + +def get_oneof_instance(cls, model_kwargs, constant_kwargs, model_arg=None): + """ + Find the oneOf schema that matches the input data (e.g. payload). + If exactly one schema matches the input data, an instance of that schema + is returned. + If zero or more than one schema match the input data, an exception is raised. + In OAS 3.x, the payload MUST, by validation, match exactly one of the + schemas described by oneOf. + + Args: + cls: the class we are handling + model_kwargs (dict): var_name to var_value + The input data, e.g. the payload that must match a oneOf schema + in the OpenAPI document. + constant_kwargs (dict): var_name to var_value + args that every model requires, including configuration, server + and path to item. + + Kwargs: + model_arg: (int, float, bool, str, date, datetime, ModelSimple, None): + the value to assign to a primitive class or ModelSimple class + Notes: + - this is only passed in when oneOf includes types which are not object + - None is used to suppress handling of model_arg, nullable models are handled in __new__ + + Returns + oneof_instance (instance) + """ + if len(cls._composed_schemas['oneOf']) == 0: + return None + + oneof_instances = [] + # Iterate over each oneOf schema and determine if the input data + # matches the oneOf schemas. + for oneof_class in cls._composed_schemas['oneOf']: + # The composed oneOf schema allows the 'null' type and the input data + # is the null value. This is a OAS >= 3.1 feature. + if oneof_class is none_type: + # skip none_types because we are deserializing dict data. + # none_type deserialization is handled in the __new__ method + continue + + single_value_input = allows_single_value_input(oneof_class) + + try: + if not single_value_input: + if constant_kwargs.get('_spec_property_naming'): + oneof_instance = oneof_class._from_openapi_data(**model_kwargs, **constant_kwargs) + else: + oneof_instance = oneof_class(**model_kwargs, **constant_kwargs) + else: + if issubclass(oneof_class, ModelSimple): + if constant_kwargs.get('_spec_property_naming'): + oneof_instance = oneof_class._from_openapi_data(model_arg, **constant_kwargs) + else: + oneof_instance = oneof_class(model_arg, **constant_kwargs) + elif oneof_class in PRIMITIVE_TYPES: + oneof_instance = validate_and_convert_types( + model_arg, + (oneof_class,), + constant_kwargs['_path_to_item'], + constant_kwargs['_spec_property_naming'], + constant_kwargs['_check_type'], + configuration=constant_kwargs['_configuration'] + ) + oneof_instances.append(oneof_instance) + except Exception: + pass + if len(oneof_instances) == 0: + raise ApiValueError( + "Invalid inputs given to generate an instance of %s. None " + "of the oneOf schemas matched the input data." % + cls.__name__ + ) + elif len(oneof_instances) > 1: + raise ApiValueError( + "Invalid inputs given to generate an instance of %s. Multiple " + "oneOf schemas matched the inputs, but a max of one is allowed." % + cls.__name__ + ) + return oneof_instances[0] + + +def get_anyof_instances(self, model_args, constant_args): + """ + Args: + self: the class we are handling + model_args (dict): var_name to var_value + The input data, e.g. the payload that must match at least one + anyOf child schema in the OpenAPI document. + constant_args (dict): var_name to var_value + args that every model requires, including configuration, server + and path to item. + + Returns + anyof_instances (list) + """ + anyof_instances = [] + if len(self._composed_schemas['anyOf']) == 0: + return anyof_instances + + for anyof_class in self._composed_schemas['anyOf']: + # The composed oneOf schema allows the 'null' type and the input data + # is the null value. This is a OAS >= 3.1 feature. + if anyof_class is none_type: + # skip none_types because we are deserializing dict data. + # none_type deserialization is handled in the __new__ method + continue + + try: + if constant_args.get('_spec_property_naming'): + anyof_instance = anyof_class._from_openapi_data(**model_args, **constant_args) + else: + anyof_instance = anyof_class(**model_args, **constant_args) + anyof_instances.append(anyof_instance) + except Exception: + pass + if len(anyof_instances) == 0: + raise ApiValueError( + "Invalid inputs given to generate an instance of %s. None of the " + "anyOf schemas matched the inputs." % + self.__class__.__name__ + ) + return anyof_instances + + +def get_discarded_args(self, composed_instances, model_args): + """ + Gathers the args that were discarded by configuration.discard_unknown_keys + """ + model_arg_keys = model_args.keys() + discarded_args = set() + # arguments passed to self were already converted to python names + # before __init__ was called + for instance in composed_instances: + if instance.__class__ in self._composed_schemas['allOf']: + try: + keys = instance.to_dict().keys() + discarded_keys = model_args - keys + discarded_args.update(discarded_keys) + except Exception: + # allOf integer schema will throw exception + pass + else: + try: + all_keys = set(model_to_dict(instance, serialize=False).keys()) + js_keys = model_to_dict(instance, serialize=True).keys() + all_keys.update(js_keys) + discarded_keys = model_arg_keys - all_keys + discarded_args.update(discarded_keys) + except Exception: + # allOf integer schema will throw exception + pass + return discarded_args + + +def validate_get_composed_info(constant_args, model_args, self): + """ + For composed schemas, generate schema instances for + all schemas in the oneOf/anyOf/allOf definition. If additional + properties are allowed, also assign those properties on + all matched schemas that contain additionalProperties. + Openapi schemas are python classes. + + Exceptions are raised if: + - 0 or > 1 oneOf schema matches the model_args input data + - no anyOf schema matches the model_args input data + - any of the allOf schemas do not match the model_args input data + + Args: + constant_args (dict): these are the args that every model requires + model_args (dict): these are the required and optional spec args that + were passed in to make this model + self (class): the class that we are instantiating + This class contains self._composed_schemas + + Returns: + composed_info (list): length three + composed_instances (list): the composed instances which are not + self + var_name_to_model_instances (dict): a dict going from var_name + to the model_instance which holds that var_name + the model_instance may be self or an instance of one of the + classes in self.composed_instances() + additional_properties_model_instances (list): a list of the + model instances which have the property + additional_properties_type. This list can include self + """ + # create composed_instances + composed_instances = [] + allof_instances = get_allof_instances(self, model_args, constant_args) + composed_instances.extend(allof_instances) + oneof_instance = get_oneof_instance(self.__class__, model_args, constant_args) + if oneof_instance is not None: + composed_instances.append(oneof_instance) + anyof_instances = get_anyof_instances(self, model_args, constant_args) + composed_instances.extend(anyof_instances) + """ + set additional_properties_model_instances + additional properties must be evaluated at the schema level + so self's additional properties are most important + If self is a composed schema with: + - no properties defined in self + - additionalProperties: False + Then for object payloads every property is an additional property + and they are not allowed, so only empty dict is allowed + + Properties must be set on all matching schemas + so when a property is assigned toa composed instance, it must be set on all + composed instances regardless of additionalProperties presence + keeping it to prevent breaking changes in v5.0.1 + TODO remove cls._additional_properties_model_instances in 6.0.0 + """ + additional_properties_model_instances = [] + if self.additional_properties_type is not None: + additional_properties_model_instances = [self] + + """ + no need to set properties on self in here, they will be set in __init__ + By here all composed schema oneOf/anyOf/allOf instances have their properties set using + model_args + """ + discarded_args = get_discarded_args(self, composed_instances, model_args) + + # map variable names to composed_instances + var_name_to_model_instances = {} + for prop_name in model_args: + if prop_name not in discarded_args: + var_name_to_model_instances[prop_name] = [self] + composed_instances + + return [ + composed_instances, + var_name_to_model_instances, + additional_properties_model_instances, + discarded_args + ] diff --git a/addon/flamenco/manager/models/__init__.py b/addon/flamenco/manager/models/__init__.py new file mode 100644 index 00000000..a6c37767 --- /dev/null +++ b/addon/flamenco/manager/models/__init__.py @@ -0,0 +1,36 @@ +# flake8: noqa + +# import all models into this package +# if you have many models here with many references from one model to another this may +# raise a RecursionError +# to avoid this, import only the models that you directly need like: +# from from flamenco.manager.model.pet import Pet +# or import this package, but before doing it, use: +# import sys +# sys.setrecursionlimit(n) + +from flamenco.manager.model.assigned_task import AssignedTask +from flamenco.manager.model.available_job_setting import AvailableJobSetting +from flamenco.manager.model.available_job_setting_subtype import AvailableJobSettingSubtype +from flamenco.manager.model.available_job_setting_type import AvailableJobSettingType +from flamenco.manager.model.available_job_type import AvailableJobType +from flamenco.manager.model.available_job_types import AvailableJobTypes +from flamenco.manager.model.command import Command +from flamenco.manager.model.configuration import Configuration +from flamenco.manager.model.configuration_meta import ConfigurationMeta +from flamenco.manager.model.error import Error +from flamenco.manager.model.job import Job +from flamenco.manager.model.job_all_of import JobAllOf +from flamenco.manager.model.job_metadata import JobMetadata +from flamenco.manager.model.job_settings import JobSettings +from flamenco.manager.model.job_status import JobStatus +from flamenco.manager.model.registered_worker import RegisteredWorker +from flamenco.manager.model.security_error import SecurityError +from flamenco.manager.model.submitted_job import SubmittedJob +from flamenco.manager.model.task_status import TaskStatus +from flamenco.manager.model.task_update import TaskUpdate +from flamenco.manager.model.worker_registration import WorkerRegistration +from flamenco.manager.model.worker_sign_on import WorkerSignOn +from flamenco.manager.model.worker_state_change import WorkerStateChange +from flamenco.manager.model.worker_state_changed import WorkerStateChanged +from flamenco.manager.model.worker_status import WorkerStatus diff --git a/addon/flamenco/manager/rest.py b/addon/flamenco/manager/rest.py new file mode 100644 index 00000000..34608033 --- /dev/null +++ b/addon/flamenco/manager/rest.py @@ -0,0 +1,346 @@ +""" + Flamenco manager + + Render Farm manager API # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import io +import json +import logging +import re +import ssl +from urllib.parse import urlencode +from urllib.parse import urlparse +from urllib.request import proxy_bypass_environment +import urllib3 +import ipaddress + +from flamenco.manager.exceptions import ApiException, UnauthorizedException, ForbiddenException, NotFoundException, ServiceException, ApiValueError + + +logger = logging.getLogger(__name__) + + +class RESTResponse(io.IOBase): + + def __init__(self, resp): + self.urllib3_response = resp + self.status = resp.status + self.reason = resp.reason + self.data = resp.data + + def getheaders(self): + """Returns a dictionary of the response headers.""" + return self.urllib3_response.getheaders() + + def getheader(self, name, default=None): + """Returns a given response header.""" + return self.urllib3_response.getheader(name, default) + + +class RESTClientObject(object): + + def __init__(self, configuration, pools_size=4, maxsize=None): + # urllib3.PoolManager will pass all kw parameters to connectionpool + # https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/poolmanager.py#L75 # noqa: E501 + # https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/connectionpool.py#L680 # noqa: E501 + # maxsize is the number of requests to host that are allowed in parallel # noqa: E501 + # Custom SSL certificates and client certificates: http://urllib3.readthedocs.io/en/latest/advanced-usage.html # noqa: E501 + + # cert_reqs + if configuration.verify_ssl: + cert_reqs = ssl.CERT_REQUIRED + else: + cert_reqs = ssl.CERT_NONE + + addition_pool_args = {} + if configuration.assert_hostname is not None: + addition_pool_args['assert_hostname'] = configuration.assert_hostname # noqa: E501 + + if configuration.retries is not None: + addition_pool_args['retries'] = configuration.retries + + if configuration.socket_options is not None: + addition_pool_args['socket_options'] = configuration.socket_options + + if maxsize is None: + if configuration.connection_pool_maxsize is not None: + maxsize = configuration.connection_pool_maxsize + else: + maxsize = 4 + + # https pool manager + if configuration.proxy and not should_bypass_proxies(configuration.host, no_proxy=configuration.no_proxy or ''): + self.pool_manager = urllib3.ProxyManager( + num_pools=pools_size, + maxsize=maxsize, + cert_reqs=cert_reqs, + ca_certs=configuration.ssl_ca_cert, + cert_file=configuration.cert_file, + key_file=configuration.key_file, + proxy_url=configuration.proxy, + proxy_headers=configuration.proxy_headers, + **addition_pool_args + ) + else: + self.pool_manager = urllib3.PoolManager( + num_pools=pools_size, + maxsize=maxsize, + cert_reqs=cert_reqs, + ca_certs=configuration.ssl_ca_cert, + cert_file=configuration.cert_file, + key_file=configuration.key_file, + **addition_pool_args + ) + + def request(self, method, url, query_params=None, headers=None, + body=None, post_params=None, _preload_content=True, + _request_timeout=None): + """Perform requests. + + :param method: http request method + :param url: http request url + :param query_params: query parameters in the url + :param headers: http request headers + :param body: request json body, for `application/json` + :param post_params: request post parameters, + `application/x-www-form-urlencoded` + and `multipart/form-data` + :param _preload_content: if False, the urllib3.HTTPResponse object will + be returned without reading/decoding response + data. Default is True. + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + """ + method = method.upper() + assert method in ['GET', 'HEAD', 'DELETE', 'POST', 'PUT', + 'PATCH', 'OPTIONS'] + + if post_params and body: + raise ApiValueError( + "body parameter cannot be used with post_params parameter." + ) + + post_params = post_params or {} + headers = headers or {} + + timeout = None + if _request_timeout: + if isinstance(_request_timeout, (int, float)): # noqa: E501,F821 + timeout = urllib3.Timeout(total=_request_timeout) + elif (isinstance(_request_timeout, tuple) and + len(_request_timeout) == 2): + timeout = urllib3.Timeout( + connect=_request_timeout[0], read=_request_timeout[1]) + + try: + # For `POST`, `PUT`, `PATCH`, `OPTIONS`, `DELETE` + if method in ['POST', 'PUT', 'PATCH', 'OPTIONS', 'DELETE']: + # Only set a default Content-Type for POST, PUT, PATCH and OPTIONS requests + if (method != 'DELETE') and ('Content-Type' not in headers): + headers['Content-Type'] = 'application/json' + if query_params: + url += '?' + urlencode(query_params) + if ('Content-Type' not in headers) or (re.search('json', headers['Content-Type'], re.IGNORECASE)): + request_body = None + if body is not None: + request_body = json.dumps(body) + r = self.pool_manager.request( + method, url, + body=request_body, + preload_content=_preload_content, + timeout=timeout, + headers=headers) + elif headers['Content-Type'] == 'application/x-www-form-urlencoded': # noqa: E501 + r = self.pool_manager.request( + method, url, + fields=post_params, + encode_multipart=False, + preload_content=_preload_content, + timeout=timeout, + headers=headers) + elif headers['Content-Type'] == 'multipart/form-data': + # must del headers['Content-Type'], or the correct + # Content-Type which generated by urllib3 will be + # overwritten. + del headers['Content-Type'] + r = self.pool_manager.request( + method, url, + fields=post_params, + encode_multipart=True, + preload_content=_preload_content, + timeout=timeout, + headers=headers) + # Pass a `string` parameter directly in the body to support + # other content types than Json when `body` argument is + # provided in serialized form + elif isinstance(body, str) or isinstance(body, bytes): + request_body = body + r = self.pool_manager.request( + method, url, + body=request_body, + preload_content=_preload_content, + timeout=timeout, + headers=headers) + else: + # Cannot generate the request from given parameters + msg = """Cannot prepare a request message for provided + arguments. Please check that your arguments match + declared content type.""" + raise ApiException(status=0, reason=msg) + # For `GET`, `HEAD` + else: + r = self.pool_manager.request(method, url, + fields=query_params, + preload_content=_preload_content, + timeout=timeout, + headers=headers) + except urllib3.exceptions.SSLError as e: + msg = "{0}\n{1}".format(type(e).__name__, str(e)) + raise ApiException(status=0, reason=msg) + + if _preload_content: + r = RESTResponse(r) + + # log response body + logger.debug("response body: %s", r.data) + + if not 200 <= r.status <= 299: + if r.status == 401: + raise UnauthorizedException(http_resp=r) + + if r.status == 403: + raise ForbiddenException(http_resp=r) + + if r.status == 404: + raise NotFoundException(http_resp=r) + + if 500 <= r.status <= 599: + raise ServiceException(http_resp=r) + + raise ApiException(http_resp=r) + + return r + + def GET(self, url, headers=None, query_params=None, _preload_content=True, + _request_timeout=None): + return self.request("GET", url, + headers=headers, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + query_params=query_params) + + def HEAD(self, url, headers=None, query_params=None, _preload_content=True, + _request_timeout=None): + return self.request("HEAD", url, + headers=headers, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + query_params=query_params) + + def OPTIONS(self, url, headers=None, query_params=None, post_params=None, + body=None, _preload_content=True, _request_timeout=None): + return self.request("OPTIONS", url, + headers=headers, + query_params=query_params, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + + def DELETE(self, url, headers=None, query_params=None, body=None, + _preload_content=True, _request_timeout=None): + return self.request("DELETE", url, + headers=headers, + query_params=query_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + + def POST(self, url, headers=None, query_params=None, post_params=None, + body=None, _preload_content=True, _request_timeout=None): + return self.request("POST", url, + headers=headers, + query_params=query_params, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + + def PUT(self, url, headers=None, query_params=None, post_params=None, + body=None, _preload_content=True, _request_timeout=None): + return self.request("PUT", url, + headers=headers, + query_params=query_params, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + + def PATCH(self, url, headers=None, query_params=None, post_params=None, + body=None, _preload_content=True, _request_timeout=None): + return self.request("PATCH", url, + headers=headers, + query_params=query_params, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + +# end of class RESTClientObject +def is_ipv4(target): + """ Test if IPv4 address or not + """ + try: + chk = ipaddress.IPv4Address(target) + return True + except ipaddress.AddressValueError: + return False + +def in_ipv4net(target, net): + """ Test if target belongs to given IPv4 network + """ + try: + nw = ipaddress.IPv4Network(net) + ip = ipaddress.IPv4Address(target) + if ip in nw: + return True + return False + except ipaddress.AddressValueError: + return False + except ipaddress.NetmaskValueError: + return False + +def should_bypass_proxies(url, no_proxy=None): + """ Yet another requests.should_bypass_proxies + Test if proxies should not be used for a particular url. + """ + + parsed = urlparse(url) + + # special cases + if parsed.hostname in [None, '']: + return True + + # special cases + if no_proxy in [None , '']: + return False + if no_proxy == '*': + return True + + no_proxy = no_proxy.lower().replace(' ',''); + entries = ( + host for host in no_proxy.split(',') if host + ) + + if is_ipv4(parsed.hostname): + for item in entries: + if in_ipv4net(parsed.hostname, item): + return True + return proxy_bypass_environment(parsed.hostname, {'no': no_proxy} ) diff --git a/addon/flamenco/manager/test/__init__.py b/addon/flamenco/manager/test/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/addon/flamenco/manager/test/test_assigned_task.py b/addon/flamenco/manager/test/test_assigned_task.py new file mode 100644 index 00000000..f7054673 --- /dev/null +++ b/addon/flamenco/manager/test/test_assigned_task.py @@ -0,0 +1,39 @@ +""" + Flamenco manager + + Render Farm manager API # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import sys +import unittest + +import flamenco.manager +from flamenco.manager.model.command import Command +from flamenco.manager.model.task_status import TaskStatus +globals()['Command'] = Command +globals()['TaskStatus'] = TaskStatus +from flamenco.manager.model.assigned_task import AssignedTask + + +class TestAssignedTask(unittest.TestCase): + """AssignedTask unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testAssignedTask(self): + """Test AssignedTask""" + # FIXME: construct object with mandatory attributes with example values + # model = AssignedTask() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/addon/flamenco/manager/test/test_available_job_setting.py b/addon/flamenco/manager/test/test_available_job_setting.py new file mode 100644 index 00000000..9cc8c860 --- /dev/null +++ b/addon/flamenco/manager/test/test_available_job_setting.py @@ -0,0 +1,39 @@ +""" + Flamenco manager + + Render Farm manager API # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import sys +import unittest + +import flamenco.manager +from flamenco.manager.model.available_job_setting_subtype import AvailableJobSettingSubtype +from flamenco.manager.model.available_job_setting_type import AvailableJobSettingType +globals()['AvailableJobSettingSubtype'] = AvailableJobSettingSubtype +globals()['AvailableJobSettingType'] = AvailableJobSettingType +from flamenco.manager.model.available_job_setting import AvailableJobSetting + + +class TestAvailableJobSetting(unittest.TestCase): + """AvailableJobSetting unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testAvailableJobSetting(self): + """Test AvailableJobSetting""" + # FIXME: construct object with mandatory attributes with example values + # model = AvailableJobSetting() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/addon/flamenco/manager/test/test_available_job_setting_subtype.py b/addon/flamenco/manager/test/test_available_job_setting_subtype.py new file mode 100644 index 00000000..8d32a7e0 --- /dev/null +++ b/addon/flamenco/manager/test/test_available_job_setting_subtype.py @@ -0,0 +1,35 @@ +""" + Flamenco manager + + Render Farm manager API # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import sys +import unittest + +import flamenco.manager +from flamenco.manager.model.available_job_setting_subtype import AvailableJobSettingSubtype + + +class TestAvailableJobSettingSubtype(unittest.TestCase): + """AvailableJobSettingSubtype unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testAvailableJobSettingSubtype(self): + """Test AvailableJobSettingSubtype""" + # FIXME: construct object with mandatory attributes with example values + # model = AvailableJobSettingSubtype() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/addon/flamenco/manager/test/test_available_job_setting_type.py b/addon/flamenco/manager/test/test_available_job_setting_type.py new file mode 100644 index 00000000..8eee1426 --- /dev/null +++ b/addon/flamenco/manager/test/test_available_job_setting_type.py @@ -0,0 +1,35 @@ +""" + Flamenco manager + + Render Farm manager API # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import sys +import unittest + +import flamenco.manager +from flamenco.manager.model.available_job_setting_type import AvailableJobSettingType + + +class TestAvailableJobSettingType(unittest.TestCase): + """AvailableJobSettingType unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testAvailableJobSettingType(self): + """Test AvailableJobSettingType""" + # FIXME: construct object with mandatory attributes with example values + # model = AvailableJobSettingType() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/addon/flamenco/manager/test/test_available_job_type.py b/addon/flamenco/manager/test/test_available_job_type.py new file mode 100644 index 00000000..2a3822d1 --- /dev/null +++ b/addon/flamenco/manager/test/test_available_job_type.py @@ -0,0 +1,37 @@ +""" + Flamenco manager + + Render Farm manager API # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import sys +import unittest + +import flamenco.manager +from flamenco.manager.model.available_job_setting import AvailableJobSetting +globals()['AvailableJobSetting'] = AvailableJobSetting +from flamenco.manager.model.available_job_type import AvailableJobType + + +class TestAvailableJobType(unittest.TestCase): + """AvailableJobType unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testAvailableJobType(self): + """Test AvailableJobType""" + # FIXME: construct object with mandatory attributes with example values + # model = AvailableJobType() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/addon/flamenco/manager/test/test_available_job_types.py b/addon/flamenco/manager/test/test_available_job_types.py new file mode 100644 index 00000000..cc306271 --- /dev/null +++ b/addon/flamenco/manager/test/test_available_job_types.py @@ -0,0 +1,37 @@ +""" + Flamenco manager + + Render Farm manager API # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import sys +import unittest + +import flamenco.manager +from flamenco.manager.model.available_job_type import AvailableJobType +globals()['AvailableJobType'] = AvailableJobType +from flamenco.manager.model.available_job_types import AvailableJobTypes + + +class TestAvailableJobTypes(unittest.TestCase): + """AvailableJobTypes unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testAvailableJobTypes(self): + """Test AvailableJobTypes""" + # FIXME: construct object with mandatory attributes with example values + # model = AvailableJobTypes() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/addon/flamenco/manager/test/test_command.py b/addon/flamenco/manager/test/test_command.py new file mode 100644 index 00000000..405de18b --- /dev/null +++ b/addon/flamenco/manager/test/test_command.py @@ -0,0 +1,35 @@ +""" + Flamenco manager + + Render Farm manager API # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import sys +import unittest + +import flamenco.manager +from flamenco.manager.model.command import Command + + +class TestCommand(unittest.TestCase): + """Command unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testCommand(self): + """Test Command""" + # FIXME: construct object with mandatory attributes with example values + # model = Command() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/addon/flamenco/manager/test/test_configuration.py b/addon/flamenco/manager/test/test_configuration.py new file mode 100644 index 00000000..b491498e --- /dev/null +++ b/addon/flamenco/manager/test/test_configuration.py @@ -0,0 +1,37 @@ +""" + Flamenco manager + + Render Farm manager API # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import sys +import unittest + +import flamenco.manager +from flamenco.manager.model.configuration_meta import ConfigurationMeta +globals()['ConfigurationMeta'] = ConfigurationMeta +from flamenco.manager.model.configuration import Configuration + + +class TestConfiguration(unittest.TestCase): + """Configuration unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testConfiguration(self): + """Test Configuration""" + # FIXME: construct object with mandatory attributes with example values + # model = Configuration() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/addon/flamenco/manager/test/test_configuration_meta.py b/addon/flamenco/manager/test/test_configuration_meta.py new file mode 100644 index 00000000..c8c066ca --- /dev/null +++ b/addon/flamenco/manager/test/test_configuration_meta.py @@ -0,0 +1,35 @@ +""" + Flamenco manager + + Render Farm manager API # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import sys +import unittest + +import flamenco.manager +from flamenco.manager.model.configuration_meta import ConfigurationMeta + + +class TestConfigurationMeta(unittest.TestCase): + """ConfigurationMeta unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testConfigurationMeta(self): + """Test ConfigurationMeta""" + # FIXME: construct object with mandatory attributes with example values + # model = ConfigurationMeta() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/addon/flamenco/manager/test/test_error.py b/addon/flamenco/manager/test/test_error.py new file mode 100644 index 00000000..2f481585 --- /dev/null +++ b/addon/flamenco/manager/test/test_error.py @@ -0,0 +1,35 @@ +""" + Flamenco manager + + Render Farm manager API # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import sys +import unittest + +import flamenco.manager +from flamenco.manager.model.error import Error + + +class TestError(unittest.TestCase): + """Error unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testError(self): + """Test Error""" + # FIXME: construct object with mandatory attributes with example values + # model = Error() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/addon/flamenco/manager/test/test_job.py b/addon/flamenco/manager/test/test_job.py new file mode 100644 index 00000000..7f14cd8b --- /dev/null +++ b/addon/flamenco/manager/test/test_job.py @@ -0,0 +1,45 @@ +""" + Flamenco manager + + Render Farm manager API # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import sys +import unittest + +import flamenco.manager +from flamenco.manager.model.job_all_of import JobAllOf +from flamenco.manager.model.job_metadata import JobMetadata +from flamenco.manager.model.job_settings import JobSettings +from flamenco.manager.model.job_status import JobStatus +from flamenco.manager.model.submitted_job import SubmittedJob +globals()['JobAllOf'] = JobAllOf +globals()['JobMetadata'] = JobMetadata +globals()['JobSettings'] = JobSettings +globals()['JobStatus'] = JobStatus +globals()['SubmittedJob'] = SubmittedJob +from flamenco.manager.model.job import Job + + +class TestJob(unittest.TestCase): + """Job unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testJob(self): + """Test Job""" + # FIXME: construct object with mandatory attributes with example values + # model = Job() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/addon/flamenco/manager/test/test_job_all_of.py b/addon/flamenco/manager/test/test_job_all_of.py new file mode 100644 index 00000000..e8021e76 --- /dev/null +++ b/addon/flamenco/manager/test/test_job_all_of.py @@ -0,0 +1,37 @@ +""" + Flamenco manager + + Render Farm manager API # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import sys +import unittest + +import flamenco.manager +from flamenco.manager.model.job_status import JobStatus +globals()['JobStatus'] = JobStatus +from flamenco.manager.model.job_all_of import JobAllOf + + +class TestJobAllOf(unittest.TestCase): + """JobAllOf unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testJobAllOf(self): + """Test JobAllOf""" + # FIXME: construct object with mandatory attributes with example values + # model = JobAllOf() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/addon/flamenco/manager/test/test_job_metadata.py b/addon/flamenco/manager/test/test_job_metadata.py new file mode 100644 index 00000000..8047ce46 --- /dev/null +++ b/addon/flamenco/manager/test/test_job_metadata.py @@ -0,0 +1,35 @@ +""" + Flamenco manager + + Render Farm manager API # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import sys +import unittest + +import flamenco.manager +from flamenco.manager.model.job_metadata import JobMetadata + + +class TestJobMetadata(unittest.TestCase): + """JobMetadata unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testJobMetadata(self): + """Test JobMetadata""" + # FIXME: construct object with mandatory attributes with example values + # model = JobMetadata() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/addon/flamenco/manager/test/test_job_settings.py b/addon/flamenco/manager/test/test_job_settings.py new file mode 100644 index 00000000..9e10abd7 --- /dev/null +++ b/addon/flamenco/manager/test/test_job_settings.py @@ -0,0 +1,35 @@ +""" + Flamenco manager + + Render Farm manager API # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import sys +import unittest + +import flamenco.manager +from flamenco.manager.model.job_settings import JobSettings + + +class TestJobSettings(unittest.TestCase): + """JobSettings unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testJobSettings(self): + """Test JobSettings""" + # FIXME: construct object with mandatory attributes with example values + # model = JobSettings() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/addon/flamenco/manager/test/test_job_status.py b/addon/flamenco/manager/test/test_job_status.py new file mode 100644 index 00000000..9f0929a8 --- /dev/null +++ b/addon/flamenco/manager/test/test_job_status.py @@ -0,0 +1,35 @@ +""" + Flamenco manager + + Render Farm manager API # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import sys +import unittest + +import flamenco.manager +from flamenco.manager.model.job_status import JobStatus + + +class TestJobStatus(unittest.TestCase): + """JobStatus unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testJobStatus(self): + """Test JobStatus""" + # FIXME: construct object with mandatory attributes with example values + # model = JobStatus() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/addon/flamenco/manager/test/test_jobs_api.py b/addon/flamenco/manager/test/test_jobs_api.py new file mode 100644 index 00000000..67cd3097 --- /dev/null +++ b/addon/flamenco/manager/test/test_jobs_api.py @@ -0,0 +1,49 @@ +""" + Flamenco manager + + Render Farm manager API # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import unittest + +import flamenco.manager +from flamenco.manager.api.jobs_api import JobsApi # noqa: E501 + + +class TestJobsApi(unittest.TestCase): + """JobsApi unit test stubs""" + + def setUp(self): + self.api = JobsApi() # noqa: E501 + + def tearDown(self): + pass + + def test_fetch_job(self): + """Test case for fetch_job + + Fetch info about the job. # noqa: E501 + """ + pass + + def test_get_job_types(self): + """Test case for get_job_types + + Get list of job types and their parameters. # noqa: E501 + """ + pass + + def test_submit_job(self): + """Test case for submit_job + + Submit a new job for Flamenco Manager to execute. # noqa: E501 + """ + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/addon/flamenco/manager/test/test_registered_worker.py b/addon/flamenco/manager/test/test_registered_worker.py new file mode 100644 index 00000000..8cbee032 --- /dev/null +++ b/addon/flamenco/manager/test/test_registered_worker.py @@ -0,0 +1,37 @@ +""" + Flamenco manager + + Render Farm manager API # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import sys +import unittest + +import flamenco.manager +from flamenco.manager.model.worker_status import WorkerStatus +globals()['WorkerStatus'] = WorkerStatus +from flamenco.manager.model.registered_worker import RegisteredWorker + + +class TestRegisteredWorker(unittest.TestCase): + """RegisteredWorker unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testRegisteredWorker(self): + """Test RegisteredWorker""" + # FIXME: construct object with mandatory attributes with example values + # model = RegisteredWorker() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/addon/flamenco/manager/test/test_security_error.py b/addon/flamenco/manager/test/test_security_error.py new file mode 100644 index 00000000..e90520e9 --- /dev/null +++ b/addon/flamenco/manager/test/test_security_error.py @@ -0,0 +1,35 @@ +""" + Flamenco manager + + Render Farm manager API # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import sys +import unittest + +import flamenco.manager +from flamenco.manager.model.security_error import SecurityError + + +class TestSecurityError(unittest.TestCase): + """SecurityError unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testSecurityError(self): + """Test SecurityError""" + # FIXME: construct object with mandatory attributes with example values + # model = SecurityError() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/addon/flamenco/manager/test/test_submitted_job.py b/addon/flamenco/manager/test/test_submitted_job.py new file mode 100644 index 00000000..c9661886 --- /dev/null +++ b/addon/flamenco/manager/test/test_submitted_job.py @@ -0,0 +1,39 @@ +""" + Flamenco manager + + Render Farm manager API # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import sys +import unittest + +import flamenco.manager +from flamenco.manager.model.job_metadata import JobMetadata +from flamenco.manager.model.job_settings import JobSettings +globals()['JobMetadata'] = JobMetadata +globals()['JobSettings'] = JobSettings +from flamenco.manager.model.submitted_job import SubmittedJob + + +class TestSubmittedJob(unittest.TestCase): + """SubmittedJob unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testSubmittedJob(self): + """Test SubmittedJob""" + # FIXME: construct object with mandatory attributes with example values + # model = SubmittedJob() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/addon/flamenco/manager/test/test_task_status.py b/addon/flamenco/manager/test/test_task_status.py new file mode 100644 index 00000000..2c187f8d --- /dev/null +++ b/addon/flamenco/manager/test/test_task_status.py @@ -0,0 +1,35 @@ +""" + Flamenco manager + + Render Farm manager API # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import sys +import unittest + +import flamenco.manager +from flamenco.manager.model.task_status import TaskStatus + + +class TestTaskStatus(unittest.TestCase): + """TaskStatus unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testTaskStatus(self): + """Test TaskStatus""" + # FIXME: construct object with mandatory attributes with example values + # model = TaskStatus() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/addon/flamenco/manager/test/test_task_update.py b/addon/flamenco/manager/test/test_task_update.py new file mode 100644 index 00000000..9fec6ef1 --- /dev/null +++ b/addon/flamenco/manager/test/test_task_update.py @@ -0,0 +1,37 @@ +""" + Flamenco manager + + Render Farm manager API # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import sys +import unittest + +import flamenco.manager +from flamenco.manager.model.task_status import TaskStatus +globals()['TaskStatus'] = TaskStatus +from flamenco.manager.model.task_update import TaskUpdate + + +class TestTaskUpdate(unittest.TestCase): + """TaskUpdate unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testTaskUpdate(self): + """Test TaskUpdate""" + # FIXME: construct object with mandatory attributes with example values + # model = TaskUpdate() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/addon/flamenco/manager/test/test_worker_api.py b/addon/flamenco/manager/test/test_worker_api.py new file mode 100644 index 00000000..9246d7c9 --- /dev/null +++ b/addon/flamenco/manager/test/test_worker_api.py @@ -0,0 +1,76 @@ +""" + Flamenco manager + + Render Farm manager API # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import unittest + +import flamenco.manager +from flamenco.manager.api.worker_api import WorkerApi # noqa: E501 + + +class TestWorkerApi(unittest.TestCase): + """WorkerApi unit test stubs""" + + def setUp(self): + self.api = WorkerApi() # noqa: E501 + + def tearDown(self): + pass + + def test_register_worker(self): + """Test case for register_worker + + Register a new worker # noqa: E501 + """ + pass + + def test_schedule_task(self): + """Test case for schedule_task + + Obtain a new task to execute # noqa: E501 + """ + pass + + def test_sign_off(self): + """Test case for sign_off + + Mark the worker as offline # noqa: E501 + """ + pass + + def test_sign_on(self): + """Test case for sign_on + + Authenticate & sign in the worker. # noqa: E501 + """ + pass + + def test_task_update(self): + """Test case for task_update + + Update the task, typically to indicate progress, completion, or failure. # noqa: E501 + """ + pass + + def test_worker_state(self): + """Test case for worker_state + + """ + pass + + def test_worker_state_changed(self): + """Test case for worker_state_changed + + Worker changed state. This could be as acknowledgement of a Manager-requested state change, or in response to worker-local signals. # noqa: E501 + """ + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/addon/flamenco/manager/test/test_worker_registration.py b/addon/flamenco/manager/test/test_worker_registration.py new file mode 100644 index 00000000..3ef23039 --- /dev/null +++ b/addon/flamenco/manager/test/test_worker_registration.py @@ -0,0 +1,35 @@ +""" + Flamenco manager + + Render Farm manager API # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import sys +import unittest + +import flamenco.manager +from flamenco.manager.model.worker_registration import WorkerRegistration + + +class TestWorkerRegistration(unittest.TestCase): + """WorkerRegistration unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testWorkerRegistration(self): + """Test WorkerRegistration""" + # FIXME: construct object with mandatory attributes with example values + # model = WorkerRegistration() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/addon/flamenco/manager/test/test_worker_sign_on.py b/addon/flamenco/manager/test/test_worker_sign_on.py new file mode 100644 index 00000000..33bb77c3 --- /dev/null +++ b/addon/flamenco/manager/test/test_worker_sign_on.py @@ -0,0 +1,35 @@ +""" + Flamenco manager + + Render Farm manager API # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import sys +import unittest + +import flamenco.manager +from flamenco.manager.model.worker_sign_on import WorkerSignOn + + +class TestWorkerSignOn(unittest.TestCase): + """WorkerSignOn unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testWorkerSignOn(self): + """Test WorkerSignOn""" + # FIXME: construct object with mandatory attributes with example values + # model = WorkerSignOn() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/addon/flamenco/manager/test/test_worker_state_change.py b/addon/flamenco/manager/test/test_worker_state_change.py new file mode 100644 index 00000000..af9e3de3 --- /dev/null +++ b/addon/flamenco/manager/test/test_worker_state_change.py @@ -0,0 +1,37 @@ +""" + Flamenco manager + + Render Farm manager API # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import sys +import unittest + +import flamenco.manager +from flamenco.manager.model.worker_status import WorkerStatus +globals()['WorkerStatus'] = WorkerStatus +from flamenco.manager.model.worker_state_change import WorkerStateChange + + +class TestWorkerStateChange(unittest.TestCase): + """WorkerStateChange unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testWorkerStateChange(self): + """Test WorkerStateChange""" + # FIXME: construct object with mandatory attributes with example values + # model = WorkerStateChange() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/addon/flamenco/manager/test/test_worker_state_changed.py b/addon/flamenco/manager/test/test_worker_state_changed.py new file mode 100644 index 00000000..7e90834a --- /dev/null +++ b/addon/flamenco/manager/test/test_worker_state_changed.py @@ -0,0 +1,37 @@ +""" + Flamenco manager + + Render Farm manager API # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import sys +import unittest + +import flamenco.manager +from flamenco.manager.model.worker_status import WorkerStatus +globals()['WorkerStatus'] = WorkerStatus +from flamenco.manager.model.worker_state_changed import WorkerStateChanged + + +class TestWorkerStateChanged(unittest.TestCase): + """WorkerStateChanged unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testWorkerStateChanged(self): + """Test WorkerStateChanged""" + # FIXME: construct object with mandatory attributes with example values + # model = WorkerStateChanged() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/addon/flamenco/manager/test/test_worker_status.py b/addon/flamenco/manager/test/test_worker_status.py new file mode 100644 index 00000000..b6584b39 --- /dev/null +++ b/addon/flamenco/manager/test/test_worker_status.py @@ -0,0 +1,35 @@ +""" + Flamenco manager + + Render Farm manager API # noqa: E501 + + The version of the OpenAPI document: 1.0.0 + Generated by: https://openapi-generator.tech +""" + + +import sys +import unittest + +import flamenco.manager +from flamenco.manager.model.worker_status import WorkerStatus + + +class TestWorkerStatus(unittest.TestCase): + """WorkerStatus unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testWorkerStatus(self): + """Test WorkerStatus""" + # FIXME: construct object with mandatory attributes with example values + # model = WorkerStatus() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/addon/flamenco/manager_README.md b/addon/flamenco/manager_README.md new file mode 100644 index 00000000..8b1ee6ae --- /dev/null +++ b/addon/flamenco/manager_README.md @@ -0,0 +1,139 @@ +# Flamenco +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: 3.0 +- Build package: org.openapitools.codegen.languages.PythonClientCodegen +For more information, please visit [https://flamenco.io/](https://flamenco.io/) + +## Requirements. + +Python >=3.6 + +## Installation & Usage + +This python library package is generated without supporting files like setup.py or requirements files + +To be able to use it, you will need these dependencies in your own package that uses this library: + +* urllib3 >= 1.25.3 +* python-dateutil + +## Getting Started + +In your own code, to use this library to connect and interact with Flamenco, +you can run the following: + +```python + +import time +import flamenco.manager +from pprint import pprint +from flamenco.manager.api import jobs_api +from flamenco.manager.model.available_job_types import AvailableJobTypes +from flamenco.manager.model.error import Error +from flamenco.manager.model.job import Job +from flamenco.manager.model.submitted_job import SubmittedJob +# Defining the host is optional and defaults to http://localhost +# See configuration.py for a list of all supported configuration parameters. +configuration = flamenco.manager.Configuration( + host = "http://localhost" +) + + + +# Enter a context with an instance of the API client +with flamenco.manager.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = jobs_api.JobsApi(api_client) + job_id = "job_id_example" # str | + + try: + # Fetch info about the job. + api_response = api_instance.fetch_job(job_id) + pprint(api_response) + except flamenco.manager.ApiException as e: + print("Exception when calling JobsApi->fetch_job: %s\n" % e) +``` + +## Documentation for API Endpoints + +All URIs are relative to *http://localhost* + +Class | Method | HTTP request | Description +------------ | ------------- | ------------- | ------------- +*JobsApi* | [**fetch_job**](flamenco/manager/docs/JobsApi.md#fetch_job) | **GET** /api/jobs/{job_id} | Fetch info about the job. +*JobsApi* | [**get_job_types**](flamenco/manager/docs/JobsApi.md#get_job_types) | **GET** /api/jobs/types | Get list of job types and their parameters. +*JobsApi* | [**submit_job**](flamenco/manager/docs/JobsApi.md#submit_job) | **POST** /api/jobs | Submit a new job for Flamenco Manager to execute. +*WorkerApi* | [**register_worker**](flamenco/manager/docs/WorkerApi.md#register_worker) | **POST** /api/worker/register-worker | Register a new worker +*WorkerApi* | [**schedule_task**](flamenco/manager/docs/WorkerApi.md#schedule_task) | **POST** /api/worker/task | Obtain a new task to execute +*WorkerApi* | [**sign_off**](flamenco/manager/docs/WorkerApi.md#sign_off) | **POST** /api/worker/sign-off | Mark the worker as offline +*WorkerApi* | [**sign_on**](flamenco/manager/docs/WorkerApi.md#sign_on) | **POST** /api/worker/sign-on | Authenticate & sign in the worker. +*WorkerApi* | [**task_update**](flamenco/manager/docs/WorkerApi.md#task_update) | **POST** /api/worker/task/{task_id} | Update the task, typically to indicate progress, completion, or failure. +*WorkerApi* | [**worker_state**](flamenco/manager/docs/WorkerApi.md#worker_state) | **GET** /api/worker/state | +*WorkerApi* | [**worker_state_changed**](flamenco/manager/docs/WorkerApi.md#worker_state_changed) | **POST** /api/worker/state-changed | Worker changed state. This could be as acknowledgement of a Manager-requested state change, or in response to worker-local signals. + + +## Documentation For Models + + - [AssignedTask](flamenco/manager/docs/AssignedTask.md) + - [AvailableJobSetting](flamenco/manager/docs/AvailableJobSetting.md) + - [AvailableJobSettingSubtype](flamenco/manager/docs/AvailableJobSettingSubtype.md) + - [AvailableJobSettingType](flamenco/manager/docs/AvailableJobSettingType.md) + - [AvailableJobType](flamenco/manager/docs/AvailableJobType.md) + - [AvailableJobTypes](flamenco/manager/docs/AvailableJobTypes.md) + - [Command](flamenco/manager/docs/Command.md) + - [Configuration](flamenco/manager/docs/Configuration.md) + - [ConfigurationMeta](flamenco/manager/docs/ConfigurationMeta.md) + - [Error](flamenco/manager/docs/Error.md) + - [Job](flamenco/manager/docs/Job.md) + - [JobAllOf](flamenco/manager/docs/JobAllOf.md) + - [JobMetadata](flamenco/manager/docs/JobMetadata.md) + - [JobSettings](flamenco/manager/docs/JobSettings.md) + - [JobStatus](flamenco/manager/docs/JobStatus.md) + - [RegisteredWorker](flamenco/manager/docs/RegisteredWorker.md) + - [SecurityError](flamenco/manager/docs/SecurityError.md) + - [SubmittedJob](flamenco/manager/docs/SubmittedJob.md) + - [TaskStatus](flamenco/manager/docs/TaskStatus.md) + - [TaskUpdate](flamenco/manager/docs/TaskUpdate.md) + - [WorkerRegistration](flamenco/manager/docs/WorkerRegistration.md) + - [WorkerSignOn](flamenco/manager/docs/WorkerSignOn.md) + - [WorkerStateChange](flamenco/manager/docs/WorkerStateChange.md) + - [WorkerStateChanged](flamenco/manager/docs/WorkerStateChanged.md) + - [WorkerStatus](flamenco/manager/docs/WorkerStatus.md) + + +## Documentation For Authorization + + +## worker_auth + +- **Type**: HTTP basic authentication + + +## Author + + + + +## Notes for Large OpenAPI documents +If the OpenAPI document is large, imports in flamenco.manager.apis and flamenco.manager.models may fail with a +RecursionError indicating the maximum recursion limit has been exceeded. In that case, there are a couple of solutions: + +Solution 1: +Use specific imports for apis and models like: +- `from flamenco.manager.api.default_api import DefaultApi` +- `from flamenco.manager.model.pet import Pet` + +Solution 2: +Before importing the package, adjust the maximum recursion limit as shown below: +``` +import sys +sys.setrecursionlimit(1500) +import flamenco.manager +from flamenco.manager.apis import * +from flamenco.manager.models import * +``` + diff --git a/addon/generate-flamenco3-client.sh b/addon/generate-flamenco3-client.sh new file mode 100755 index 00000000..6c8c3976 --- /dev/null +++ b/addon/generate-flamenco3-client.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +# Generator for the Python API client. +# +# See: +# - https://github.com/OpenAPITools/openapi-generator +# - https://openapi-generator.tech/ +# - https://openapi-generator.tech/docs/generators/python + +PKG_NAME=flamenco.manager +PKG_VERSION=3.0 + +set -ex +java -jar openapi-generator-cli.jar \ + generate \ + -i ../pkg/api/flamenco-manager.yaml \ + -g python \ + -o . \ + --skip-validate-spec \ + --package-name ${PKG_NAME} \ + --http-user-agent "Flamenco/${PKG_VERSION} (Blender add-on)" \ + -p generateSourceCodeOnly=true \ + -p projectName=Flamenco \ + -p packageVersion=${PKG_VERSION} \ diff --git a/addon/mypy.ini b/addon/mypy.ini new file mode 100644 index 00000000..af262922 --- /dev/null +++ b/addon/mypy.ini @@ -0,0 +1,14 @@ +[mypy] +python_version = 3.9 +ignore_missing_imports = True +strict_optional = True +disallow_subclassing_any = False +disallow_any_generics = True +disallow_untyped_calls = True +disallow_incomplete_defs = True +check_untyped_defs = True +disallow_untyped_decorators = True +no_implicit_optional = True +warn_redundant_casts = True +warn_unused_ignores = true +warn_return_any = True diff --git a/addon/oapi_test_generated.py b/addon/oapi_test_generated.py new file mode 100755 index 00000000..6c603e56 --- /dev/null +++ b/addon/oapi_test_generated.py @@ -0,0 +1,39 @@ +#!/usr/bin/env python3 + +import time +import flamenco3_client +from pprint import pprint +from flamenco3_client.api import jobs_api +from flamenco3_client.model.available_job_types import AvailableJobTypes +from flamenco3_client.model.available_job_type import AvailableJobType +from flamenco3_client.model.error import Error +from flamenco3_client.model.job import Job +from flamenco3_client.model.submitted_job import SubmittedJob + +# Defining the host is optional and defaults to http://localhost +# See configuration.py for a list of all supported configuration parameters. +configuration = flamenco3_client.Configuration(host="http://localhost:8080") + + +# Enter a context with an instance of the API client +with flamenco3_client.ApiClient(configuration) as api_client: + job_api_instance = jobs_api.JobsApi(api_client) + + response: AvailableJobTypes = job_api_instance.get_job_types() + for job_type in response.job_types: + job_type: AvailableJobType + print(f"\033[38;5;214m{job_type.label}\033[0m ({job_type.name})") + for setting in job_type.settings: + print(f" - {setting.key:23} type: {setting.type!r:10}", end="") + default = getattr(setting, "default", None) + if default is not None: + print(f" default: {repr(default)}", end="") + print() + + # job_id = "2f03614f-f529-445f-b8c5-272e3f437b73" + # try: + # # Fetch info about the job. + # api_response = job_api_instance.fetch_job(job_id) + # pprint(api_response) + # except flamenco3_client.ApiException as e: + # print("Exception when calling JobsApi->fetch_job: %s\n" % e) diff --git a/addon/openapi-generator-cli.jar b/addon/openapi-generator-cli.jar new file mode 100644 index 0000000000000000000000000000000000000000..b1d451dbbc72ab27289effa0182febc41189609d GIT binary patch literal 25313249 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

rfn+aHBAeyb^`N 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%0D`A+)@Jn;z6!-Ms3RLdMZ`c(I4}j)W=l zbkuHWT-R>#e%|{nxt~(^oT#7K3tIJ7qG^|E_f`d|wr-j$Xv-HU+sG>Yy7hj?wz3i06 z{8`3X{G&Z3xlp477uwh{Bg0P~R0hkjmMqa-e(JZ?AfBs^rxrDB)Z}zVojbNFbW@P| zo#dK@$89NlH|$@`hKua;ei)F!|qxL_gdre4fD`US;a>Jvrhe^LU2 z<8TGav~=ZO7)@VzI#v2+AZst#m?pX91{ESMqTjP2%J!D-$K=JQ`d^kc&6klOyX24s z?~fpHsJj=FHFDfulH-_WGn;-CiikRssz=0>qgKX8oY(V78lm%4XBDf;u4V_e0H1*Q z!Q&G0v_v_bQMcCG*68#;d@}WPfWJ(4p~KKMYs=c{(v|3CgAwfdbh0m^ijycvt?5O5 z7K_v#7;F}?j9)A!cfq>5uIRsJ&97(7H@tH!4X$`FJ!LSz`&99hWVh--J!f_ZjU_Yg zCvE#i8v#xpuH1Bpd;Op|?(VCqpD8`r5PSdQCCJA2Cz*XZdGQ4Qerx|VBl|mtZel}i zWMFFZ|JxMvFT+3o{Ji%68G?@f@hgFuSY;29J|2;-7ud14$6&shN8k(z=8XNy!S@|Div=Wie-n5_p9N}*# z_??md%LJdT9xQFBU2Hzf?*6$8($T-k)<}X6nZ3t=hZB%$sp>EDY7I=oG1orepWP?F zw`~r4*HNjavAQ9s6D9=FMYqrsdzngpE$7#bw;;%OeOSL=dJt(L7!_IkN_GR3tmZ@= zJ+MwjH-2kGJt=wVviEV$9w5uNkYzj=1m}T1JKCTX;yI%SwehE}NFG)}+2iv`3;%X4 zzbS!#S2$}7`Qm+a7TAHSUJ233J*Neqg2!cgx zruyu(yV6^EY~2?Lux#3NAe=j zAKQnMi_dT&a&Ie`b3C@rNu?gNyw#{dg2~)BYGKCM_@wX(0+ADk1&Sz&{^c+RsTIn% zNm&wxi08IMbK&$EDN#C^ZciZ}shPnVeS4KI6_KA3Xc@f4MSPV{AjJBbOs?Btu|tSI z*=g}*ckv>Y2iNY4Xr@=NDYJX;&43TC&$!_Nd>)t_M>Wz+VDNKZ!OGHt)2dk*b1>we zhm=2mA$EX#y5F_`*P#C|oB5v&-~IuR1u06$EdS}s9Qo5I4x*Lt4#2-k zZl!3s=uA&I$PVn3_+F?NRsNU-HZ5)=)RZ` z(neFrF#^mZ79mY2r2WNEevF>XCfs!BjZU6d_il*|2B!4Hebw>eHiwNKtvkFt6Glb9 zQrdS)wbIZRnB$f~AFQ2GDC$xQltVpr*Iv+@@Z2#{IJNMoz1>czC`8WHogaBn-#M58 z&E@dB3XDn8u%e&212Ma;$DVb?P;vPYLnmljr+i%!U0^3EGy<1Kxa*NChzSM1I5=6r z@Z`cdy6ZF&fntPED6<^|zanT{_XwfAY(*A2m)xF6EFw04!C)BtWK6`->!|(>Z;=4e z+G>l^CJQMS^ZmPrk9m6A`*-Q!2QP$>UjzD~GbmgkAjU<*j6*G3ELY}lnYdQg&ktJb zpgZ@s;|HFPLo52jgbnyMoR<*cnbQ1hX}SblH}+bH>Emk|J2l#A8;%{gz^+tT9$A_; zMkaZ*Ytp7aBhn8l3ou%h=#nGq_J)!nYuBv%{VGY4hrkYq>hC*Fgh)Xwl|tMmM+IE{ z(Z3V=P}<91A3wu+LVgoN2&pCTdCesk5+i7TystLXU0qOP57GuTctUW!q!z~NksMCb zdQa{=BN6Wi`uXZtM`|hkysL&vB}f*hJXZYUk14BEtNRA}8Iq6vZ9Mlo0{hDg^(ln- zN!7Kd{#{a{XJ-AWu=bzet8(-|glW0@qm;@17$vXKPfSND!$FMduJ^!X3=bBxnp#h@9) z7UnGGZdlQn3l`skae*FDD5l44ev^hWR02KoKbHmbw_nn4kn=AK|Kx{R|8uQD3V%B4 za1ZKi8Kr=ioX7aL8wTQXVPTjcx0arzmoyAHw< zs9czvNK4bIb+IOjtp2Zc+m<<{t{Y%o(aFV`sX@*6VR^2&VCD¨SC?CMUfY1X#xJ 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

YN*FEZqtwzUAojDT6nqp< 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 Hvc1cDq?Gw ztVj@eu(4r<`kEw9qYSPsu@nIICWQCy5)jS8Xa(%hB`s8*)N`5$E_F&PQ4w6xocco5 zX?5JkSm65+PDfSk0Xc~wkLA!5LwH&D__LVS>lXUl%}mVkRsSj!m**9U49 zbMtg$1S!XO5Jfprp0M!pAHKh6%*y7~n<4n@OIW|6yCe)3jXD-vwQc#k!^3kaq}K%g zr9^;&3JIcrAG8?g|8zzDGu!%a&gFl{xi0|U*;Y=J&s_a}PC;UVAKn7rsam`BO}aX% z&a9SJ!C5Qxh*;MIvXo@hw}#Iv4wholNU!>&j&6`nh_y8owySK0hw0Sq^uEWFXQQKMSOJq`L16Uv1e0*1C9^EKm?(40_c zQbUFd2_c=tx2TFNvRa9UHmO5Iupb))^*r*gPWs|Ek)b{~WY4sDRlPo=pS;h69^~0a zzvKK-K039~Ci;vV$x}T2UQZUWeiUbC7Dr$P)EGVMI5Fs({_xdC4*azfd7R3_@VvO^ z^(S}Oa$q-)RVQWzSN|Y^p!c2E=vm^+hi(A5sJE}1==lzXQgGotEloquK?^{Fk3^rF zcT|YMU@SW-wFK7+XJ-N2M$T_ zvxbCo2z+iS7k8&mij7eRkbpVUD0D89G4sIIDUp^q`d*dZOYzn30Rf759r)Cv*o$q= z2&#SHkPq6ihtyUG9ryFkA41^XOdmp^B2SFpU{Jd5-xpFq!i16kU}=Q~GDe0hDg;T6 z$ml-R1Xmi~6lS~7Zkg&t{{bKy-_u;g&BtuxEoWRT+gkWJFab&IOIRDRUhJlx)MaxF zR{789%xC!qnC$~JO-IgE%}6{@4;%A z52ymCOq$k#V=bU^Vm1LO`|r%p_+XvfkP46X3C|$*#QndHq;X`Eqs@GcyP0P_a*NRy zX$%T{4*_G5(u@xPDx58>FUHz11otE*t36>^DTHMeATGBsEq?yrHW`@NB^6sUtRE)c z^BjABOq3uZks)gwjrbQZD93LQZ66g_B9i21vTwRWgvDncT(zR5LF3%k_aJ5&?x2ryjsGb2IA?zC)9LAn%XULKwW8oDL@pL^W&Pk<1I2A%xY#Az>$Uevf?rL=a)p-wMucb~0b{8I3 ziH?ua(j-4PO8cg;_9h1yS z_H*3Ik92nBpxMwZQG!mUBMA6ECuNW!Hl<+yD;)8NgN;D<51JtXRSgs^rM_5)s7Q0V>`Xi-1hExYokB@}RL#EFG@MsB>~?`&0RO@=kd1y!PCKcE4Dtk-V~)s@7UxsVl}H6M(-`puxiVM=4=ot`=9rsDbSy&!Nxc6{sk&!6Y5=R*2KG$;Z7k>Zu~eWisZK*AUzy zrI_M@$7f0WAn~7jdLT)0W33?Y%iqA^v(N7&c$9br-aOv`LvK508Ysm5Jn=HK4oaoT z7HYo&?CNND?Ei*=Ke2dZKax&8G2|@Z{HFCbcytW1LkLcZ{PDD)|45MhL+pE!SOg0e ze3<`c?p^}E>@gmxsEwC77+@&)?N`Pe2LvLpBtm$V`d7pc^537!KsJQue`=Ub32}-S z78ZTGGm^luUS1iN$TD7-K)*xR#)rWO# z;zDgcqSUO2wiT!Nc-y0#F1GSnp2$_?pAe6?!`8$(3Lv*akzR*t&3>le_E2qZJFyzf z%aDDc+kVtoNM$P5->Q2ScJr^6DJP$D&u+(7n(Eq}V)R>Q?TK1Up? z9*uLL`#thzZg{;H9?epLhfR94L%_aZj3t$@%i_u8BC`x=D@hNeu_b=wE)>V@NmbX$ z>^X#3{4@_8s*LZxuqnP9)o&k5`8KI#&b#^Z{i#rtB2L-$LZpJArFxK(zxxrBwUBPg zGj}cjIBrl39PZ-iH-WZuX-9ovFpGJu3N}QxgRubc;$YR8N5_1nGub7=C3R5iXN$w&mOQL?tw6s=~4I~Kcn%k!7GOr6bYOBjdR@a)HC5mpu z?=(>6>ib%_4h89pKBhmNvIuT5=3fY&X9ggWaNrrxCxD`aV@5x*JtJ=GFyN7X1I<|N zSVE&nwd+(#E>TuqjSKDIIr`#eTA>@!I6bzGRcganl3Y$d%T+K^uBa2%My-swW+ewm zrm&COV=wb{x#KVKC|Os2E;C~-na(mQ_dpWgETzjsgxbh+^z2rdP)_PlJqVVy z%3kK9QbrYb&cK`6J)|#uh!S&!VfGV>gkdU%6^V}>>dilPFU@Pzz&BqSr)o0-Eocnb z$(kl_Fc!Jh@&T<*cR$ug-Kd38%313mn{pGzX$H&9C~H~cP4=#KlUt1iBeYu|tj?4* z>OZ}q)2p1JZJY_=bR=9U_&NzlwLRc`e|~5PC;npnv-!z)I|=yd_E=b*r{QCLQ;F5; zM0MWjRHg6-jN{oEdR()6!L4y>S>0z6)59>dl zYv-aOfiNvtRJIQCy(P7Y3VX_}h)eA3b<$Zb^I6U%0G7r6Ye8JZF6WeNGWKZ=Qdq4@H^Dz@#Dsy2Y$Xq3$Q0#vwVEf@=Ven7s#Rd<3fiQ^aZF~sNiNdeLIGZ zz4p(ePy$|410VN(_6a#X4)fN$_7*U(2y6{X!tKm-_&4IJU*$?>KtS;csYvhn707`o zc?;Rke2}~weylw@^&#b65C@)vg(O<)9ay}IIrSs{N}rqarOW5~#aGMXa>ed+at=uNTOS_^i>Y zJoOyUZJ~x;Q@HTEaKFO&T~L^>cDF1dhI?dl{S0yg=TXJt*GtamOTaiG&9NS{44gknXRT0sps<;lDEj z#?`d}1S~Ya`&t7$!W5WgySs*escia8;3w8?aX(f02rP~*DWCk?ExCz@w*uMVArkWr??L{wq$ZjN!PG?_v z-#D&b9A+u0y|^KX%5_n^QNl)rw?a6AD=)-ocGr=t@VI78sxS$yHA&3U2`q6r%>`j* zhta@6(%pz^9N1qx22Av$bSzE}oC39s&&#aKDm*3DyR2N^wBCJHsGA8)a7b zObbmHAOg9-o_eXxlu*V=bf%g%`7`S)=$Hf5QS<4%S-o$5>Uha27TXIPw=g{ttB#m0 zeU@~GlDSIxPA(1~5B*J+t9)`@)s0x#hJvyV-^qlC9M#VeOpaJF5r!ofn8+F263Ops zyU5g^kobwrAYh;d{E47xH8Y8f5U%a9Y6N!8+{WRow=bFYCE=(EKhKO+WtQdd2CVIS zVZ_(&MCU&v5khHLM{1fXgf_3p)BAmrSVj#=&_*0T8sVWmh#T{I>RLE%Ae(e2P}~dk zlW-2^Plw{22;EO|#pXb|M)K7=8U^RbMK^|q)(|Am3>3>^^h<`(@OUk2YB}dn{J_k1 z%h;4m-N{g3~v?q;Z4r#HkgjTaKOi5Ku=VUhUrTyZ{^l`Hq9r# zLMMyqwoitKIZu;do@O#7tH{zt>1RakO9ErP+w%}>n%->IW2+OYrXs|v0SoGxO!pc;Ef&Wd)y{9uK>a+c_%we7Kd>w<1Frj>78)t!}X z#4~Gd5Ok%;rj%dJ0CQyeE4t?=Y3w^GFh|rMjb`s8vq*c?eXpqH7bD14>QmED{tK(n z_0ERy)?ce72eZ(?you*vAN=CQt4$8m738dB;GFAw<&GcUubQG{oxNt+RAoy~XEvb@ zY=9@{-+8F&J{|8r0TrWzwYc_Q$>{_VCHo|gUVD(W?8RNvnKCdi$sOE*=2vrvbl07~ zScbDQ@3pwJ7ul8-OJ^Uz(yX|`P{b+~suA^c9(Yl($!KwgnnECdf6KW9%gP+2meVh( zL3CX#zc8y6i!X#94XM;QRlSGVXNz|`tzXkO2yZQZiL!apOw!6%S2HL1+*XA4T=s)X z;i=uPj@SR=W0i5pnW~*Pbf`^E$Yu%`%i`htiy(8Z@LbWI>T6nhy@m5ls} zB_WR*9K|D<+o#emFWf%i{-rmso%f}$0Ww%a{r5Z+x8$fiSB}O-y%KL}%DtCA&iK5f zYua1%X_#V7ksEcZvqv@#Vmxggv_OH0j59jEZ)S4&I61ZhU*Qm>FKEyq5nvS#i-^hR zqp|hJOKML!a9KPcw3(iqqRAbfk+z#h7I$2O=4II%TLc!)6B@QmLReVeE)khE$&Z<> zERFgxFNF#F(|o#jHGtjQy30iA+#)&3Mg>vA)iY1Ar#XwLPT}1DY>&Poy?G}#mIal? z=8=WM!96WMuzz~+&PpBDi6xYF0p;sW!-(zK#nfmnHQ@<&IW+Zy6TQ3O{&!DPj0`G*-AGqNQg#2AZ*B7ae@UN83eRu4^JrZT*c14_xtK6 zEZm*xyD}{-qy!~Z(Tc}g5?iLuT@r5?X?N&xROPoJ>F^8Kk8~GE^2h^EJ^^8Cg~PqK zCa0UY<~|mdi`xF`>k0+ByPXwUkqf5QFs=~u~&bq3syp7Yfb|l3r%pEn1gSfvi z!5CgA+(f{--vG~F?+o)_cV=U0^ao+rHCFIfM|aVCF426*5qK~TAyBp7 z4wIa4bg1lrR4nOGk#bVDMWmZeckxIRGM>=1aA43oqieb0&S#HJ{AJe7;%IW2rs_0w zRVp;el!|R$V;#+LNKL2CiP3fX9UdACm67BPwBtAZl^NO4@UHwDmok zcm#CiAhU|aIpXWCk_>Fc7TeOe0#QYB+O((=ChCzdmKfdmc2eolq9rU=tJs#AX41@zyWp{v?MF;J+kd@>e$Yk`k!=X?bG8Ld$Y84jM26zL=dskn~c+$4vYIO8D- zda2y1?}r0b9fP=E-%1AwHQli;jK9rPhH~2O(d%>HkMY~_L61Mapow*oD4wKJRVWsN2`^OTu;8*E)4 zZe)efMP2;OsC@^Ih3;2g>swfKgBz@eQOV_c70qBFwLU4F!Q)4BtOgqFR{+P;KyY;2 zo_7S+WgzBwcQGX`R-w>_orT*-pptcCW$cP=*8ec~S{UgFz~Hp_)R_GJL*N6qGbJUF z@F6ja|IeKFhFuu6G_2LlEy4oT6!UueM-Xo`@>!#k?+K?Bf4ERqp}@O^1d!Q;4eOTrbPM2|t{RT6XVu!|WvmRMf0XV>%QE}$NJ}xgW zuuv2~*neP$_@ls@KW|*&KoPKRfFXlqZfo*`PD*laFy-EX<)ZTKA$+VAUeYh7Y3(GW zl(NUx>F^){e{YT05ESEHN8&g@pGfrTQh%4Yw~Hongeo@7;~o!g*yWN5Pjqd}bS2>%hEF z;EUJTXi9kqb?gY4B|jGU9YSqa`yD2tKKKOB9<;8zf52s0U&W}3-3&xSAVVo!#lC}a_!@S2B*(o54Z%*$(7SeU(9wQ1C?K5sGcHas%I36A~ zDiZH)>NH$H0^hW_rhPcpL>4%x`QM%niU@sb$lv7Zlq8VRvla@dAj5|j0&@8cWl5CV_&f1+4swRB|?;d-q^83Ez)NUfAxzqo%q152ycmb`M zSW(&duvf%%^LPd)KiK?4OUmPk_qsO%G2AhTZU|xstb9I{?tbEs8)+^rANl(M=N`dnELnlv(k=RR%?fvO2q^(CQh=2ODRb<&6K2z~?vnb!Oh115_ zF5}QHC$293-YHzFxzy>wkmMphv_z-B=>7-qaZ4H_<^;E;Vp`NDgD)j2?)A`I#ib3u z39@eFB>}Dgr-dIt9RKUP@ZWrve-MuUxDKT!CTZvuDe2_sq-5mBX{MFxR23>})FvpY zsGz`MxP!o~t%I+fmDvKe=e?Sno29(S9xoq%dX`h+WMaK?`JJHr zW66Wc^>)FGNb8T0NfyOmswUzE+Gz-y0FuLYZ!sAgdjq_x>EovN&__bqVjJD5$BpjJ zd!MD1VMG%$>ivQWyCPVO3t<7D7VOBAsjW4MKZp9xF`+A^ z_@UU!(q69)K1< zXKQ~v@Y#W-=-Qu}_l#^ofDaYKwFqK^`DV2!= zhMYEo=-ZM}q$qg)s2b~PSzeeW%=U@0Q@`|FXsgtLIp_8HQKU3_L01cx> zpp~VofRmt=8mq3ZuBnleq?Lp#rL)!2NixQpzIEa z|6exq?-2^;pDxAF!~{T#x3@F25w&x*Rq=E%6|}RncQO3+vwvBYoQ&i*+HYf%(qoR} zG~@7q<+zTGjxtDsMW8P(sHv+T&o3-Esj45NDnS2URLw{iCj;PL%KYu3$o_OuznaMX z+j}vMmqiHr2p3w*90*S;CKu2Li-j@dn}9=sZIb;V#?s532g!d*chg%xt3{;!jxNL* z76D?<%obmBWA^Lvdb&Q)d4x8LY@>4i)AC9#Y1AJ zYb(;C(9b4i=_oGcjX)krHa&aprTVyO#Y?YDE2!9NLmVB&eajItm{hZTMi9y1y{2zx09zvb+ZcrEPd9A}c>nUQfPq=UHipjseD&QboA$E+M$@Fe zqt%C0G>gshk68wJL`{5XL)v5bf@6WiBlr+t_BJ?HR^Aa?R(NTXZok zoW`yFd)p^1;3?s0-tAY_8enpqUG5~YJaZ3X>oAgk@X^4W$;#-AmOR~+4poYC54CqJ zL*;@dP8MQD^P*h`uja%dW-OGd!Hk2mn0?(Ng;)WDa@KMKhsc1=N3bEe$c=!A5#YLQ zKhIz%+H(rcWa)c1a+F@8dTeh`z>uDskfofKfS-tqlEq`uLr;iB!*m+bCXfa#O*Z>cACB>jua0cE-s@2ab;PXVEbJ*8`k|cULlo z$%JIBYraM-^O;FHve0o=*|L zA3-_>wKT^~q19Z4aERDe#6~yP4L5CP>5qZeRg;t*n zlVPVCc0yvRGO3-)Rf0WAiesUt@%~mbYZLw$T)<5q^S6WA{#?z>?44}?P0gy6`m6w*0=w^NM7%BYta}Ja zf?cLYDQ!+T6)@4^IB-9l$SQogxBr-m}FBDOp`D@0;mH1j!LI!?G8kR6b z{)`o)^l@d{L2!FxI*Hz`-#zB%h`_$l()u=iSHkXxp}!wnO--LY&jeCD-V5=TtxcE| z<-O*6kr4h`f?9Qx=F+S7Oplrs?ugM`?JatUl`e6daMVzr)mXX`;nd2%sT!mJ=w?ys z2n6nRatbp@fX`=0wtfvpxRQD_TACmdKP950pSEw8G%8{bYG4F^WrV~~yO0>cF;eS) zf8H=VO6<@|vhE5Id_B6<(ro$K*cvkba4Kkci`h?UsQn?6Nn4O0h2Wd4I1S(P?`e2h z=@a-U0F~Yayy(Anrw+koK0Os3|&lBENx8{ob25!|2ttZMn%>cFlD>@n#Rqk zp)@1s4$e>l6(QqL1}gq;3E3>aprz_4I1c6gUh1uPD80zL-lW@i{-!fK|{I+)l!h+aQ@*h^`&C%~h~}OPI||A~e7IP+#&^Q^$sq`61bV ziMZq)NM1trFpkW24^q8~`O{iN|y;`220bvv&la(pt*CTM_ z>o<4?@Nt*8i*h3NDvmcrx}3O#kr@jPxq61Zwo*prKMK|0tQPIHb%Z(ZdP7xwj{W)~ zVKIcu(QJy_deO*SF;Szxt2HGJI6;0`kqYOf=+!Y=5(pe)sHv9;>+FE|l8T-Zo!eTJ zyxO9vUhO@#&_=FY3lTbW_ZmRiLHBdf4cI!hc0_~h#fOJHN4O}i$NRRr-6p7@huuC>Ixnt_She%)uiGz z!x5~IX`Ts-tb=5?n?z#c?_Qe14>QHp7F|;A?Vakmfm<%Bu70Y)+e6!n&%>W*FGr6( z*bxErH<(4cv!d*=0C@*cWK`l?`5eY*SP2`Ow&?OXf7I>%D~}AG#l2DbZrWE1e5Y?~ z&zhP)o-f;F({ju-T^Abte_bqE-Bhe3fYS%@w`%@tO!a?y8xHoie|Tio>Y8!CZj(*@ zdM%HbbzO{u8X3~BL`0`BqzIQ_%n_^HMQ$cMw(5%SJUb-rEA&CF6A!rNv6C#yN|YJ( zU$f5vy$x&W)rQbov1$*)phaLatFRKSA_RQ9h8Hcu%rFT&J7>ED?OU~*eD@sG8<)x6 z{QU2+;TBo9g>b1+Ak;E9txCI+pxJaH#eGg*kou_##&0K=C$U!!Z;1JM1Sr5&Ww4%6 zLy8kkFNtD+V_UTJ@|*Q^%)u7D;tIZBfXl*Bu6Y(^tXza3uW?;Y!7Jme#nw*2y2v`v ztsw5)jhfIYr~1Q&)58RLcQnR2tD^gz-t$d%_^GPWXlQIQL2*CIrs>e`L{lG2(ya&! zF50*RD(AWqTLJfpM;#5_SMGY|K+s92)V1mWTNinKYL?2w)7gr)qwE_nwpZCDdnoFj z8)@b&Q!8s^@T$X`vsK|4hLrfYd%1JP6(tf0uAd5+m^R!Qmhf6jfkVea@ zDK&#PK}P-5V(==ce8l|DLe08FrvTSwnM4k#4qsa8*qZ^o+AAI_cZgM%WRf(xm9hwq2ZWY)#PD^1&TTsbDn$&f=skoMWFZwi~)ZLJ`F_qpE>FnB%3 zfiWHmBV^o?y)v1bi+o|NH#jA+FStyJe>9_3ALX}KmMDn%gVIno#ITr~eXXVkq`RRu zzN3}mi1Af(k5F3NgGM6r-kha(iVyeAea!Rpn;X95e9%rqX%~a7fLCVJQiOolkq%U{ zD)XdViU{F$Pzf%SDY+4mvd;3C+^5=S=}<=H^ZxD%8N>XH>Xra6pOJaO^3D~6>|c&F z6O#H01=D&VUdM?gieCuYv#OWS%Nrp~uVeu!mm6J065c9>MpG1~ShO;{TDG#4Un&H` zXUaN8-<>Gtu1!a!O0aq=J@7=O&dvP^Y!1R>Q|i#Y~uwmv>%|Ihkj z0Vm*-8AAE4tKVCu`1)q+zR|#`N}I{)AsZOpH@l=SVXlUO#EHVdm6+3@#yNE>`u+z z<3eLreHQ<;HHJkQ=&l!7ymm|%y)mvhXR~U0t{?O4PyPwr*`CJl{$$ze};^$FtGL8Y2${|K}w}_g2 zlQ?!^#(sBK`{0Hr;am6f)x)dvyqS120_KNDvX{M^#h2lao3)K69zInHh3FxJ6xHz1 ziDLJ@3vSwE&Lb%f2!8P?9Z#Z4eN3PlbQmvT;Jowc=O0r)vI&vhmkDanAjIR!3R!VT zo`fDDnbjs*jf4(p%N4pMa*p20(p0&KO{M{JZ~O1&S)lC6hryIK>V(|3dk}*ngpMDp zm?m&n2GZ`MOv9oH+aG9L@{FIoFgq>b6e=9l|Bx<@8KfXE#JInDK_S{K=7XDq}`xF39@B>1ci70@js>Mc^c z8ohTw_})@8z&J%KXbM`h9xSY4o!Vp`rd{0?sNTR6tQv6J*AHTa6klx-1iw|AzUP7V zNT7iS!$N|$l)=tD8s;@ibXCcu12~2e{uvRuvXTt zXi5Q3imW9iZ9vd<{Jz;wtiSm!)I=0{I)GKh0G_{I_n&Kwk-f>kBP*tHvM~L>5rigO z@Op}}GDsxML0=bQIGIyU0V(MAPD#P0j#25Jv@WE1`cp_A0wSTwu61yZlqkrDpb|E8 zWKEg010lD8m<$?W74a@i%xUJ@4bv=R!Gb*&6ojr1xej+8Grp1zj`m~ntCXuR_1mo; zq1)GUir1}nY^z$R5uOP2F+*W+>sTTUBYF1tdBcYbC&!q-B!s9s<&_55CB)yt2IPM# zAwdTR8%yKgc+DS@@l}+S2Vp|$zE_vwr6a{)&AlNeCwEeaI3D*XTL%{Fu$`R<3c1+K zsVO63nkYW)itCXptfy)GxO6&FI{-6#Qdz&LPbF##7eQ1My0Pm}v&#F$WAWZZc_e+o zgh{}4!x-hvf>VVtL^3+I$`FQN%6UZyZdVglZR=QOgE;%Jp5XHWVv?rs{R3^U#Ne51 zh(XS`#}U)gk4He}sU@MVc@SE{Jr!ID`dwW?l2N=!4Hc~!_4E10_~6F-m8c117z8)V z`TQXQ*gECY2N3&2L^i^Z<<|}#*rd@DBNe#IA+|pqLFWyCaJNl~C>T?DcKpEfr}3*} z*^(qYnX@pc7^Xq%H8>%C$t|(p+@?^>xX*)W$8qvc@swRWd_c_@WtF?M2oc$vs*%N5 zzcHqkCnHj+wSGtw7c?756m_}*rBm(je=)lqeW-c&_0xFGqRz15I-S?^{T&NlQYFG^ z0OX|qx3M7YpUMi5ZC3tA-I|!8v5UQv=N}TYjb%a@AcPZjm;1q_=@nRJT|B`T7?ll` zf&?a40pobj8G?{-0rK+x>Pc`5NfDI%;yL=rUa&`o6&b8#b|<|Rm6ORLI{@ zr`vb=^8W?WIS29^?EuGNmH7oK@&cZ}HVG7e`ttul$@n+C0{|=jU!#zP@ijM3$-U-l zXq$Wv6sR)KL>w`ZJBKo|_4?1Bz6_*9)Ur!N7B`R=jEwHu<|Pds!Lnsqsz?b#4tGPM zEP5I33L?eB+ROxO*GI}N(-fpuJ*f@`rw;)e+f>S^HH0)U&T{u|7!8jg95T!dSJgMr+YpGU^*Z%~XyfiAKsL zY54FZt_77MP+0|2@m%r6qX^T9EVcItfI-YU*mhG6FqhY**#is+pxg{R9$l z(mfFm8LMp%SN)h+RhWVre$oqw316#xQ_efBL6uv3XPdO0_K2J!fFJZf5$J|o$;NSw zP#@ep;p+z39?d;Vcyo9C#0G@R?bc@T5D(zUlkEpb)NSr^J!;3qTHzJ2kOGj{&YE(ipYvM--}_G z{$s4%h#Oup|3C$#p$GU17N!+J{3-v>WlSqYfDwN=lIR%XqCaW*AlF3LwK8%*PN`r@ z;zgT!t2C@04GlnwsN3>=V=HO*w@_l}oa+o1_0HQjkw|RK*~1{KK#LV(m$|JHB(^V|EsbWh@UjqJaj{NLJlCm|~% zNeA;kW*Vkd{*h^j{AvOH3+DO=c>Y@d{v3w*?^K&^wMjskE?UohZQb``8G|CrR+u@v zfRHA^=CkNs^4e;m2$of<(}K5i?@77rkdoer)yB>9$<4-`r~}QafE3fS;#WUjtPxiA zm2I;MBMGzSFn?^03WLc}W~mUS3<*az$nFH>8ytF3lay2gFI~GFx5c8g$Sllyt-w9v z(PVVBim?kzdUK&Dmo?*i(v}s4jNk^|ORL7saHXz~bg4f@6~aU0jYvEUP5b?&jJ>tn z)bG^LHGLXm2mvWRUHht^^rNsmtvF?0waRZIzhK>_l$t%BMlhtvIa>v77P!z=9kjTt z>5x05(W!ErV#IK<6Hvjwgny^C$+|*>^9%llEWv5V6kawpbG88^N+@sEUn4HeE1Ob6 zT{!P2z)ND;kO3M2?34DZmwc+J494iIWx!mC| ztIvZu@He_Srt{yTiB|WmLxVHGik$@K%Wv5SjJ|9$rpo~22m#MSRVWJ4 zm8ma?T^P5UiTe#ux9=Jt{8FuvAw9eTZ&E+Qp$(hi_-Z#Pc?cvDs5Jm3ULD_ZKHcOe zEyGEg)<&+>xr!))E&8x|(M4t{zrOVe=PBQVT&;4_{ONgk_NX1ArlaHdZi+u?+S#>r zhL#jCV*?(%?MXXeqj|wawW^z8MR667Q-|~2r=iWw z1M$mSA)TvtohebHc@BWn8A&DAOxy^0xDOR7tod2&=V0_~ND z*{43{pE_7GY!=$`c3-gQ@(e_*CCGFswG`iEG6ca}UCn3X>Vrb- z;3|pjGec2IbtWx-jr)uNZiPPy#vxV5X)1HF`ySW~=&)N0UG%n`kWb&3%)E%XQ~W9wZijlkdKB-{r%>L_<%9{>*iSZamVItub{7xo`o4QqWOD8vlx8~%s_HnHz|B-Y%f?N%A@w^P(I@-t(jqG6LWminS zkF^)DwL~4b+4VJMS(eq^W%9@O@84W9fxL+oL)6NMsulXZXRxsI18J;NXhpW8KdML$ z0xd)?+^HAG9vnsD}M(>%fV zIfhAk-rd|JPyav#7VEsKjuA{cM7n(PG!H%Reqf~b{~_1>z!KSUn{-31 zg}K5+yzf-Wp>f_sv>ut}ENQ2wc-bKLtjN98oh)P1{)Kpu+}|9Eq)Xp1{Yw|2oEp|t z!`ivIeO%lLFL}eJF?mfbU}n-1INUc#xk}p`2bU_rpQE#*v%JC5<(MvcGMGCKsXy!` zKi;7Xdx_JawiY7v(eGV1UdumH^_WLdGPV-(@(6IROisA)v$M#QTI4+0yG6dh|8h@? z+y#QY0ih5Q_}`fvu0K7=|KuLX+MAf#{IAFdm*eu1dZF{&}DPu!N!>#-`LEi*v0C{A8wJP?Zpf$Xf~1C1L8Ll_mC7g{jwf^yJ^F@ zXxY>3G(F9vMi|S^Mu;&vR6+ccV`yN+=o+F2Wv}9oLIIE~){zyo)Zj!b_L^V|m+>08 zPhrYqH6hW)%-dy|O~yxL2W9t#)t%ZkF!yt@_Lzlnb>hUHOUBb*S-g1NId~fQ`YFVZ zSD5z&@%qt{L54Ju(N}Fx{~Rb1{^_y& zS5BF2?C3u@?yr$S&%2;7c3+EKe(0qy2%?~(ULEukz1z)(;7qL>o@MYD8~XKwdJ}6? z7Uv&_vSVao ztk@Fd&(kh#Uenz%an1Ag66v)=Qo}kFa8}fdnZof{?OL6%H@vlJ)U)~g`-BhZ->fAA z)=vs}-G6<;f4zhMyz8axO$`5sj5J!;HO2Ah zFm#)6?HH+@MzZG5jDrn+i+3DaYtk84A=tT5m-Ix36gf-ZuiM*Udy|`@1ZP*Fva!vo zdJudRUnHxp4xKBtRzhD~`N?ALtG`?f zuCG8-3IcYShGyjRu=vo2Bl;)%xcg`O{cu%+=F@;SYpZ+d5_yY4RbT#>v0`~@AzXTaX-Km5V}J4mr!-}uy2ptaweIbr(<@_65^G=BO1=Vw6?N^ zAnI-$S*ty^NZm+9i4U{Ssp5*ca%>Mj51-FoUXOaP$JHxy!?_QxX>x@DpKn2+kc*u8 z8}~EP6E>FrU@jhdmyL!Uoi$BaYuEG4Fijc;Q~-~?q6GMhPMkhGrjzh)Q7(H9h>f)_(RmDa?5)O;wI| z&uBkol*l9J6&}7) zd!#(G8=!Kzf2)+gW=j31QaadM{j(MRyt;H8pcbX)yw;%kBO$Kd;f!)LSSMSM5iF@T ztEd+hMqagMRs?MY>CdXlgD>t9k!Vz-6Bq}@n8Mln9EcNBk3N2)dquXe@wk0fgC6s) zw$Gg0_EOZQqW5`-o?k^?yKHNXS59@uH?Bdxv*smnkXo*?A9v7a8)!r9iEYJqR=iF$`qzSrl z4y`2@huQQ;N5S_*e|(e|OQ5??@F%{nrXnvI#AML-w*=;74^tVB#hSo_k><)FNp zJSY^md|SiLD$(CkX>7u4X5lLwnbyme$y~H%h@!t+P@Y5-k*u|J$eB`CIaV$Ky$)iv zf4X6Tqln4V9g*WVDV1OF*3y?yT`zMke<}m3Y}tjy!`yvOXNRLZ?fb&%&ab(LcFXha zR*r;%2Aa#+eY|QrT|m!U?Wef{!7^9(F<<4<#`q)GVO(v5qj|Fsa<$-R5_s=uHlu`9 zer(|MN8a;u0eW`&jYB}YoSLy*dxuqMFW~{Ua?w@Hh&w1ftA$$cFW5+^yvp4Iw;OC9 zempG>PIP}{tzS<&tPJe>^n8$qTiuE^KVXOAA3h<|N=I2NZh4gHmAsn2yzS`4zB+@I zJu=}kG#U9>{zWr|e*x4Syg~|d*`IN_GXfUlltA|>92BY#2CJcGuM12InHGc2^r`L* z4p+48`T!z2m&ON+`m7=fqW>_zxE)t;ca9)3gz6gzEQ{Yq#u)&sN>^~h>&z8`Rs^$CyH8mca{E$4@(*X4CNy3k` zp#(R6K@DaSx2(FFg1m?srg6;SdaL|2iWkPs>fmBFP3D7ULAfNSn->Hk@dVf$nGma` zHquM;d~?P@&D-xZn@2Xyn>ipgD1-QSj>MmX`*QX!V)m|fCjaR#o5sk(0Q#1P-t&p3 zl6=C%LNm*kM&=c?6^4(sv}9pc@NzGm6Sz3N>KRVU8<*t?$#%_C=8-x~`R=(N&txUY z!{|LNlq;=h*b!~g8_i9|>BaRBaq7p8bp+&qVUlG4bwk$}L`F1YJPlkQaEbA}z`psV z-1~gNAywjJD|hYaXN9D4?^3g<=xg{$%1jB!(wh%;MH$7fh-Gyww%`}_`vUO%wd3^X zq>5i0-G8O$j;r?Bp#oBE`!r%drq+SRbD-v6V5o&oiJI1^xjK_#$N=1chn>SP~P^kf406+EH!a=vYofnc= zF6ip;Y{|{>8jso{Z?BBbH@DZ@VF-p|l~nLCk1v*(LFxg!uyAZ7h=V>mZs^-2s{_h& z?NW@!+=7CWNl*@g;5m;4OoA#+DE%P{JS|8blOj=OTQb0c6MVDF&P?Lt8CwGNJw!u6 z#BJ@V7`SsAaS{FoV*8Myo`!d(G#x#Z%O>KjaTntG>Ej;EWrVAFQ>E$tA2mxVe(GU@ z!jm;`v!&$p>lN2oHXL>}W!-Kms+NkY${t*g6AtIui@eC zDri`ywB}z=qRb_so)reJqp_PHfv|7<6hP68*{VI4xwxeHnJOV&Cr#=;dSA_XIY4#2 zyNE_oD5Yjk0xl6!l%X{IGU?0s`@!A{8`Edx3yKhyTlRz zS9$`xi_4WjS5#KN2DuU6?|P|x@C133gQwQfW35T3j?-uc zGBH3CkE}cD3Om!ScpicDY)cEuCcOQ!IvL)~;W2b-+;N#$NP8h6@4uh8}4PwuC# zc0CTB+f6TJX^O~;m!`}Wa7Sd#<8f;gh-74ml#t`VnnSf#hr&D5LbhN;-r(I*=WCuR^}x|ss-cX)q)&E_MSwb@l1qe%EO?a@ z#atm zQ9;5LlwmC1BAkx&?kfjE7RboFK*zwje}2~U?6beMS%tEpUoayRS-2+c}vy_3G6icbwi}Gm#4BAxa6azhzo>!!F zu{OSN`;^xQR?qS-a{M}b_roU@rdx<$qSve_q!B8p_GwAAQGKm9Np<*ev!YE!!F1GByxBpl#=UkuUgmbCc#iLI$%{S~2%NP-hN zSksic&*;Php31Yj)P_xlt06g7Zl&QPsK4Y8thQRXW-MDz7_bDBZCXD-K(aFX^a!EH z80J+;g;O|FSh_c9o4xH!JwaiKfN2MrSPfNpu&hy7E&>PlluPL*r zEXDeJYwl?H6Y~W$jWbyXS?7K9(GMb$1)l({x4VyM+!a+1*z~y`YN__D0t2aSNuG`H35PlN=ROIuIJ7xgoxxe=&{9n!s zP$8D;1<+UT)xg?I577Ix_%ABdk;?AqrP*g(SB%Y;vTg$7UeBzJtSm|P5|-GR8O~25 zK|6x5$W?aJ%d2N}Cs1Q}z6iK{`k4!Ek`}vMZznLcwT9)l+ zfGT(Rx=lWqmzBV%HmAXicl0ASmnwh0{D@!~5(`${pL%KMXbw!a?YaFOVrj$DwP=Bn z5F770TVcq2GLLDjfZ%y^Xt#FNwiAwwo@XJlagmbdx0^WnEF z0xTKN5Jm|Ai(p6^n)EGaBPe2`F&FCp#v*tSs%lVCoX6KpC5C0t95+WjZSkBr-}^09`7q2WZa`vk4u z9|-!LlwqGu6f#l^`hc=3Xw9sY{f}ezZusxgDP^+h%C|GA(_=!XH|$*~$jqQwX;JEh z0;U-ttR~XizI%Yf&W=MwpR2_c*|HFDRD#tI0UqAT8oSVoXXSP z^T;FV3F5JW&RR?B{rxIV01AQHlKzl}ERXHg9^_2n*B%*;rTvJj=M@G{>RnmudT2ok zIt48jqIb#pttdbejyi|%^FTI&O+B%xtixBy(bMR0job4SdW6(48%IO6{clI_k zxaQBX1H$ziy7QE&b{-_iWgRrLviq$_(Oou_}Ocvw7D zW@*d!S?K?js=;7xro#vL+|r+>YW^7I|2;D+`tNk1zqRm;Fbu>0BQqNVdd2LdC@^}I z)R)i~Hw;2pqMFy*3RKv~@E(J~>UYL`>y- zf@VV6r$EE%4-q5Hzml9KJ#A-iEr1n&iq-$PplM)jZRciSXluUl69vw47eIarwG%XMlC3`JMK8P?04bY`gd=w;?1VQiGuaBU} zw)VFHe8A|Re#Bd~;@^`(Z<*S^y6yi#9y&BG220rc2YINMKm65`%ojs?rh_ogyW)P` zl1}3$(FQ6;jQp{3b?4EZaWh;x*`HEIUdvxgF&zQ3C_-N94E;f&6%Qsxm^fG zE`EQ13UMG}Kcd#a4Z#qzqSFr(iH!ZgLUb-AivhJl&1$WbTHZ4j>S(!?S%U#osSxkM znuhjdroDH}JZLlC!qW^MPOxJo-^Y>n3bWwT*C)Dz4FH=yoFRfQ%w;)alS99vT~d4w z;>%$~-WK$h5q9lE_NT70Tvna|vFfalo( zRr?E*Nm#uOK=g&*KdpRC2QY}p-dWQ%j#3TXOhb{Yz{=JdxcDR56pdJaR{sVQI@a>o z!>Y>BY+-kA=00R_#Y$4N8m%K*wWuJr7$WV7l=M}$1UUbob$WFfv{FhlzE;vNSLc;i zfc-Jk5D#q*V*k+FsJ4jtR{%gL2v*Rx9*BE1URw^R<{$YKl`%?q;|l>-UuUn*T8-lc zFQ9V-5fp9o(X%3gWMM`)Jy0lnt5ua_@`4~(;TjMCFhAT{&~R5x>uencD?(iXUwJyeKAahGzQi@OJLJ+%Y)PC>118vnAto0-;xl{8)z;Q-F%?U`s)R|6Y^!Xo zT68?Gjts}%2}tdIh;4-JL?e)+*&U;=*>L&!tK@vo!IMJ?2mrf(8UX&7uMDV&DVjLh z0~o<3GA2$=24*JzhY_L^b>spWQA5rj(W2F~48@;Y9i}*V(CBt5|9V~`8mICG$PUB8_)M(Wl5%}Pq0jT zlw071qr95JISC2mVS`{H!4Pu|`vB;Gv@J4=K0=kIC7|0 z>zx2ZQu?Qk@y92FqNorvGc)HKCV4v@44nVZFT9mxFpo{QinRoqO|q>`)tET>)Dl{7jUc_n>!*Y8$bn7mV^g2qI-SgYt)PDN@;V9a<0 zEMenE_z(DC=~T6mD&Kt~ZILHOA)}(prfQ21A~}YYfOjTaP(<=c;26ax6N7PKYZQpD zD<8OZ)TWBdMauqsudW(bg6!InNFhn+Pj zjzIztWS$ISw|nCr6j(yvfi_l|fL48wUuD&60piII6EDzIdsp8}oI*B``pe!^ud9zw zTxR@uXi|kgGBevpLnypmSLIc3tEl*Ok(e=`%?A@dY#+&aQF=U)+ZM)JhNNt;ux%9W zNUds>F1yZtF6=r+1nMXwoPL42i-{3UyfHFsiodX|6FpZ6fp<3s$M{0%PF`c^WOJy* z6FhI}SD&YPD_+E23!M)#AEthts!DcIGwO5`rzW>_cs;<}o=om}iu;taq-0L_9&u-L ze#=5m+W~*N!QU4vi&i!5>bz{5$49&`TW#_5SFPgyJkIm2POjob8|?^M9JV~ z0M!szfKrIOi9URch)8%cp(|^MeYj5L$k%JH}`g>)e&w%M5Z(fQ%v00)CI3g#1 zbBO+4umJ(^TPr(fYYW@|MZ=Bg-~Re7-vf2yHHMo=fIP{piv#%~u zH`Dpz0p#EMKf`KbFG*7>l9jnMMf~(Mqa3C=)vSKk*GfC|`0*T`bH{bfWsRBvhs?{w zdhH${=CZ+6U_p93ppF<^cCBS(i?(O|EqHzamLb~p5wby%@{u9MP9z$&Ev7c9i0w>v ze5Tn~)1cPoN`K^)P%j3Hm+GLNvJ*E~?W=o(o>j8gb&!zw)p|Na)rMo84us@=|3|Xh zg)W^PEJ4?y0?wRI1*L=sSUxOm3IacnF==>cuYOJ^%2x~~kRH!b`=dGQsO8gCT0?Ya zqr1N(%G0$f)e*oJjq+aO&i}}sm;Z80VbBYZys>n*f00zEefk-6@jXsdY2j9Y{;MWm z{=sd-htQi;H#0u_mg>RuyUq@Ux@PkOAPJd4VOWuf1t(ZozknN#y5J1~`&OcJ_+t)u z6I5NVRW{=T=7WS+I&F{}mr!07T0UnWIlXI687#DM4&heBbxH4)d$B%Ob`o@dIRaOs zA(}{}W2(MtC(zAy_L;cbP(!(H)2t^#H|r6M?(72Isl!CYc6qF9L7zga!TQT@S0h*2 zgv4vXjfUJh4@!<3gYNCviXxHc<<21KCb0MY4!AFMTDTG?WL>&IDAI?a1y%Qry5|g0 z4@#@&{&@8tw$BO~R=1z4HrF7klF0(tdm)Ok;03IsX!BeefPNwnt(xHolmt5pG^+%` zrtm+31Eh-^8ZPO}JSdEPem5o#nh4wVVqI z9L*Y})BA#V6vk7~3)UXVcylB~RRKe1$@f|4R5Maq^MR^EP~r+Wv=tW>Z9tRux%AWV z0GR-P)IDhC~{}M$r3J`Ffr)V=T`0DwV)BATQqsL1$1yOH;`5p7`XmL&%=QuInv8P zOL>gqzNDF~fmhha;Pq@X#CoD9&hR8OFtIpK20aKdzS=D)c}}>+p@i(N$uFwc#Y$rb zxVqy^I>0)V3TxLQNzIgoDOn<)XWXmpH68Woa}TL;)|)rfcd)_}eo~f@3u!@xTCgGJ z)+d^}lhLi2+|enWeuwtHJ?=v}IQXi;Lws?%0*n9(zKyJ!Gb-jiP4PF`+e_5o&)$HT zW%H*^j&H5-zl{XWfM_LQYijogOs3?xU#bTo=k73xy2#?Io(7W$jt99qhaO8Nn*-~N z98I++lf=(w^{Mch5G2<<>hpjGp9UY00y#CBrXOp{z+mo#U-X^BAMwPAmP!3yUv-r8x>yo~^65iYSmy0Ae_$63&6 zpCpWi@US>PS!Pg-f===(`k5vlHu9Jp`KXvl^CAank_BNibMRq+e9oJ1#xm8ny6Gp_ zTRinG2Cp~=tP$>S@({m|r*D&Kf4hnR`A0_sM++0DKb67x{d3+TK`@>2mfSPKJdJvRUy*51TX&(Q?XecsC8Gh#()V3fIa-|F6Y`4vh8tgmYQuZ!7Mdvah5wYT)|~YWTgq-zpq`&EA%-Hp&1~{8x4t z`mdiZWant-;%s4SLT~j?h-&kH>ZSd(T9f#><{0Q0)nnk6nJJSTC<)NYlIOOlsIWRO z{_gFs`z;Rhgd*+o6C?Ra=c9}8P!g3&!ykAc{p0&J(y4p>uLBuXPw(5Y@0uZATdsRY zt|7lj2P7IhjPqv&j*AaZQ3M3q5|U117BzFS8Nt67iFFQj(NanJY{#FHIhEF zqHjUThH`cYOQTAA=26t8eZ!Fsft)+ znN(`b+WSr~oAFP9~SJe1eJIOBAGbE7aFbFi|LlAwHVBq;+0$=Kp zoV7LUfW1H)2j-@66U#PP2&T2-A?zvPwWEF9b;n7|#&J{48Ivtn)cW!qFqXgXe-XvF z8!tnZ8m}bZCUdW95Y@OIZoJN))p~A-92kABGBFu!#v!m2Q_PGLj1gV-;YaWekj2_< z_iR0kOE;O7nT=Q^uh`W@fS`cp`mB^ONc&)$u+&Mqf!ulQsnt zHWHolt;{Zg-9~wRw8tjqH7^1rMNG z7iT4hzi#pGTcBAQ-?rbMX7~mFvQq%0X#m^8%!%I2(ZJaHZF~F^(9;Z0FhEldPe{tp zPmM^8{)5g-OFbklB~5=RT~?*?H&$LkIlaSMQGo>T^PfFc^1pbg-$m=cr5=70uA>#l z-oka~6Dp`KAX;}+is;Q;TX4}&StFBM2ncPgu_QNL*5HHm8h3UX00Gh8i3dnr zj$4LP+kdxwrZ$LbCDMONS9(iF?y%MO{HAx zMmlSNvKdrO=7PpAXGacHf$KHvU&N)@RIHpbrSQSOgHJ`1x1kaBc{;2UW0^U-e1Uv;5$Fuv_pW z0jfoqGmCmHR~oIcDt`k=8X`po7yusu`Avxa{o%>?m(5}5VqtCkM-I}cY6D<#A^lv} zGtlrdXSHmqWzXw?!W3GACDcdB30d9wmdVv*!W~?FZ z4pmf3u3=0a!N zIzLGlbLb_w3H(&1gwKWO*~jFvbov2!9=dAPT6EwxY0~V3Y{g4-Xh4+38DC`PaA56+ zQw)hFq^doY4~cRW{>p3R%uppgyt~+ev!)E>p|vP?^wtsg7hUa(KCynn^Qac>3)Fd0 z%w(1+^Kn>kTZjH@j~?y9Yb&;;8IQ4VR@@98{cKYm;00Oyd43_?0kHz70aqy_whTe4 z+mYYBv^N(RQLt6M$y4fDCBlxtHqW{$j{&>77zBZ}*)WS`=PvyGguf@j2O1oQA~r<( zY*`=u#2BKgXQ(_ShbdVS*Y*HR6r4I!B(n+TrPVmDu3&x(PxA?m0?Z1vKDBW^C_Vr< zIY81D#12sb6B?X6Ptr1#eg$7m>vF9tk5bye>Xgl_!A*|9iB^nV>XY90aGa?k!FqXc zt*t4!LjJ)i={Am^V%%<;Rn@$ZKWj`)voe;D^W}OTLy22Cg?W|>JA9p*Xg>>56wH0^ z>9~zkSpnPjqVE5kQ&O-{F^~kcCgw~NdaI6md#xC*CA}677F+2__AqWJ+FP*;frjB& zAJ--Zl35eR-i1S->Im$=Lrvq3K7R0d_PuRXCau2)*J2yfM?z)V5t|}srRZ8Ti^$i2 zMjv9+iM3LRuwZG9*n8;crQ(iY9FpK#aUcd!BNv2lGYr8ZG1US&zQbuvX-|T*1&Vb; z$~FAQ&myH9KZ?-e*l(6K$3nS;w;y7BxPHH}MSq8SGPr)Z zIiv6PG{ z)b7J8(a$5~oZPuI8@)!?m@OkSN53yWR#u`no~W}_(a4&us+QBSBZUwV^CN6A-AaiT!Fi1)y;s;AIU_! z1++1>?n3tRt2#*MfC(-O*tUefx!e36UA-|d{~Ee7va_+Vv;D6DmgxWT5B?Bisl@*M zX5|5cx6(cBiIrzvl68!6fm_7vKuR)FAphgc2?YM+4%YhzDKEZIgn#oShTN4Gh%tew zFG(dj3cq$;=@xAY@x~J&bybh@j|sJQh#@fhBd&uB5{a}aA1EOevZj>e=dk1q#6#IU zc<2IY9GA$hzGkcUDXO%b@d}6)7YQ9dz`NLMv^uzPjJ1i{DK%8qTP2IgJ(t{?3@E~^ z3r`kkn816>m^#~l8|w-TLv04Jr070i?f(%X z1C-qVFJD@vzNWOof#iFymj`{XzpuE@+Z!AbhhRgs3w5)*m+-DuPHS+jpNZ9%1r#McR9u4l|Y547L_0zlB#H`)R9>{ zl>Wi>v%^&;3Q@1iuuv}IZdXlhJOqWy?aL^%REW1YeY6g z9c_LE|2KVtY`MMq-Ivojeka?^!l<~6V&*tm#{q30B?6M2C)=^iyFp+N zcF}w2WPiHqggUuRsIq7Eb?u90Oij2{)<qPT@$m|cd#9d9ZiAv<-`qmAN5LO z@-l_v@|Eq3AeM>i1~?Np7)J!`{f6C0m5P|bbmH7IsQj`z>ZYsmw$Ujjg~F!|RNYph z%uOQqo}?s6s%*Mc26!vK+DxraT+;^Lq57Qv^zh)!@X6MpElGUTVJP*o7&6392Q*>xF;U`uIF+ZEp-W2eg#As^D zk7$M+7b;Y$o~Ak#x-9ehSFq#j)|2M6WEi)@4we(sEPM@y_{(v#gy|kSxJA?)eBCdq z$+1!p*OM8jnF$EBt!R0gao3^uu_xmlG=Vah&jq@1$Y7+2L)1x> zKue)?P(4SYR`U$0b;nqW*7X|2U=HWj(LtC~nQmUj5s8(bvXk2WLNhRg@wvuOW2IYh zmCbdHF0*$>*Vv^w6!*hGfQ0Zp_CA}7A2Hdq zXA~@+zwB`=rU;MehqxxKQR*VY?b5f}S5^bT_C%*Via<#P@_`a>qWj2MII6h>5)K0? z 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

{c6bKq>5`Qr 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