| # Licensed to the Apache Software Foundation (ASF) under one or more |
| # contributor license agreements. See the NOTICE file distributed with |
| # this work for additional information regarding copyright ownership. |
| # The ASF licenses this file to You under the Apache License, Version 2.0 |
| # (the "License"); you may not use this file except in compliance with |
| # the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| # coding: utf-8 |
| """ |
| Submarine Experiment API |
| |
| The Submarine REST API allows you to create, list, and get experiments. The API is hosted under the /v1/experiment route on the Submarine server. For example, to list experiments on a server hosted at http://localhost:8080, access http://localhost:8080/api/v1/experiment/ # noqa: E501 |
| |
| The version of the OpenAPI document: 0.4.0-SNAPSHOT |
| Contact: dev@submarine.apache.org |
| Generated by: https://openapi-generator.tech |
| """ |
| |
| from __future__ import absolute_import |
| |
| import copy |
| import logging |
| import multiprocessing |
| import sys |
| |
| import six |
| import urllib3 |
| from six.moves import http_client as httplib |
| |
| |
| 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. |
| |
| """ |
| |
| _default = None |
| |
| def __init__( |
| self, |
| host="http://localhost/api", |
| api_key=None, |
| api_key_prefix=None, |
| username=None, |
| password=None, |
| discard_unknown_keys=False, |
| ): |
| """Constructor |
| """ |
| self.host = host |
| """Default Base url |
| """ |
| self.temp_folder_path = None |
| """Temp file folder for downloading files |
| """ |
| # Authentication Settings |
| 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.logger = {} |
| """Logging Settings |
| """ |
| self.logger["package_logger"] = logging.getLogger( |
| "submarine.experiment") |
| 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 = None |
| """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.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 |
| """ |
| # Disable client side validation |
| self.client_side_validation = True |
| |
| 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) |
| |
| @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 six.iteritems(self.logger): |
| 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 six.iteritems(self.logger): |
| logger.setLevel(logging.DEBUG) |
| # turn on httplib debug |
| httplib.HTTPConnection.debuglevel = 1 |
| else: |
| # if debug status is False, turn off debug logging, |
| # setting log level to default `logging.WARNING` |
| for _, logger in six.iteritems(self.logger): |
| logger.setLevel(logging.WARNING) |
| # turn off httplib debug |
| httplib.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): |
| """Gets API key (with prefix if set). |
| |
| :param identifier: The 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) |
| 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 = {} |
| 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: 0.4.0-SNAPSHOT\n"\ |
| "SDK Package Version: 0.4.0-SNAPSHOT".\ |
| 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': "/api", |
| 'description': "No description provided", |
| }] |
| |
| def get_host_from_settings(self, index, variables=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 |
| :return: URL based on host settings |
| """ |
| variables = {} if variables is None else variables |
| servers = self.get_host_settings() |
| |
| 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['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 |