Source code for ntnx_vmm_py_client.configuration

# coding: utf-8


"""
IGNORE:
    Nutanix Vmm Versioned APIs

    Manage the life-cycle of virtual machines hosted on Nutanix  # noqa: E501

    OpenAPI spec version: 4.0.3-alpha-1
    
    Generated by: https://github.com/swagger-api/swagger-codegen.git
IGNORE
"""
from __future__ import absolute_import

import copy
import logging
from logging.handlers import TimedRotatingFileHandler
import multiprocessing
import sys
import urllib3

import six
from six.moves import http_client as httplib


class TypeWithDefault(type):
    def __init__(cls, name, bases, dct):
        super(TypeWithDefault, cls).__init__(name, bases, dct)
        cls._default = None

    def __call__(cls):
        if cls._default is None:
            cls._default = type.__call__(cls)
        return copy.copy(cls._default)

    def set_default(cls, default):
        cls._default = copy.copy(default)


[docs]class Configuration(six.with_metaclass(TypeWithDefault, object)): """A class for the configuration of :class:`~ntnx_vmm_py_client.api_client.ApiClient`. This class contains certain configuration methods and data required by the api client. :param scheme: (:attr:`scheme`) URI scheme for connecting to the cluster (HTTP or HTTPS using SSL/TLS) (**Default** https) :type scheme: :class:`str` :param host: (:attr:`host`) A host name to connect which can be either IPv4, IPv6 or FQDN (**Default** localhost) :type host: :class:`str`, required :param port: (:attr:`port`) A port number to connect (**Default** 9440) :type port: :class:`int` :param username: (:attr:`username`) A username for HTTP basic authentication :type username: :class:`str`, required :param password: (:attr:`password`) A password for HTTP basic authentication :type password: :class:`str`, required :param debug: (:attr:`debug`) Runs the client in debug mode by enabling/disabling debug logging (**Default** False) :type debug: :class:`bool` :param verify_ssl: (:attr:`verify_ssl`) Verify SSL certificate of cluster the client will connect to (**Default** True) :type verify_ssl: :class:`bool` :param max_retry_attempts: (:attr:`max_retry_attempts`) Maximum retry attempts to be made in case of status codes [408, 503, 504] (**Default** 5) :type max_retry_attempts: :class:`int` :param backoff_factor: (:attr:`backoff_factor`) Backoff factor by which the retry request is delayed with specific number of seconds (**Default** 3). This is calculated by the following formula: :: {backoff_factor} * (2 * ({number of retries so far} - 1)) :type backoff_factor: :class:`float` :param logger_file: (:attr:`logger_file`) File location to which logs are written to :type logger_file: :class:`str` :param connect_timeout: (:attr:`connect_timeout`) Connection timeout in milliseconds for all operations (**Default** 30000) :type connect_timeout: :class:`int` :param read_timeout: (:attr:`read_timeout`) Read timeout in milliseconds for all operations (**Default** 30000) :type read_timeout: :class:`int` """ # noqa: E501 def __init__(self): """Constructor""" self.__scheme = "https" # Default host name self.__host = "localhost" # Default port number self.__port = 9440 # Maximum number of allowed retries for a HTTP call self.__max_retry_attempts = 5 # Backoff factor by which the retry request is delayed with specific number of seconds. self.__backoff_factor = 3 self.__user_agent = 'Nutanix-ntnx_vmm_py_client/4.0.3a1' # Temp file folder for downloading files self.temp_folder_path = None # Authentication Settings # HTTP Basic Auth self.__username = None self.__password = None # API Key authentication (NOTE: SDK currently supports basic auth only) # Dictionary to store API key(s) self.api_key = {} # Dictionary to store API prefix (e.g. Bearer) self.api_key_prefix = {} # Logging Settings self.logger = {} self.logger["package_logger"] = logging.getLogger("ntnx_vmm_py_client") # Log format self.logger_format = '%(asctime)s %(levelname)s [%(threadName)s:%(name)s:%(lineno)d] %(message)s' # Log stream handler self.logger_stream_handler = None # Log file handler self.logger_file_handler = None # Debug file location self.logger_file = None # Debug switch self.__debug = False # SSL/TLS verification # Set this to false to skip verifying SSL certificate received from the https server when calling API self.__verify_ssl = True # Set this to customize the certificate file to verify the peer. self.ssl_ca_cert = None # client certificate file self.cert_file = None # client key file self.key_file = None # Set this to True/False to enable/disable SSL hostname verification. self.assert_hostname = None # 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.connection_pool_maxsize = multiprocessing.cpu_count() * 5 # Proxy Parameters self.__proxy_scheme = None self.__proxy_host = None self.__proxy_port = None self.__proxy_username = None self.__proxy_password = None # Safe chars for path_param self.safe_chars_for_path_param = '' # Request timeout in milliseconds self.__default_connect_timeout = 30000 self.__default_read_timeout = 30000 self.__connect_timeout = None self.__read_timeout = None @property def scheme(self): """URI scheme for connecting to the cluster (HTTP or HTTPS using SSL/TLS) (**Default** https). :type: :class:`str` """ return self.__scheme @scheme.setter def scheme(self, value): self.__scheme = value @property def host(self): """Host name to connect which can be either IPv4, IPv6 or FQDN (**Default** localhost). :type: :class:`str` """ return self.__host @host.setter def host(self, value): self.__host = value @property def port(self): """Port number to connect (**Default** 9440). :type: :class:`int` """ return self.__port @port.setter def port(self, value): self.__port = value @property def max_retry_attempts(self): """Maximum allowed retry attempts for a HTTP call in case of response status codes [408, 503, 504] (**Default** 5). :type: :class:`int` """ return self.__max_retry_attempts @max_retry_attempts.setter def max_retry_attempts(self, value): self.__max_retry_attempts = value @property def backoff_factor(self): """Backoff factor by which the retry request is delayed with specific number of seconds (**Default** 3). This is calculated by the following formula: :: {backoff_factor} * (2 * ({number of retries so far} - 1)) :type: :class:`float` """ return self.__backoff_factor @backoff_factor.setter def backoff_factor(self, value): self.__backoff_factor = value @property def user_agent(self): """Value for User-Agent header. :type: :class:`str` """ return self.__user_agent @property def username(self): """Username to connect to a cluster. :type: :class:`str` """ return self.__username @username.setter def username(self, value): self.__username = value @property def password(self): """Password to connect to a cluster. :type: :class:`str` """ return self.__password @password.setter def password(self, value): self.__password = value @property def verify_ssl(self): """A flag to enable/disable verification the SSL certificate of target cluster. :type: :class:`bool` """ return self.__verify_ssl @verify_ssl.setter def verify_ssl(self, value): self.__verify_ssl = value @property def proxy_scheme(self): """Scheme for the proxy URI. :type: :class:`str` """ return self.__proxy_scheme @proxy_scheme.setter def proxy_scheme(self, value): self.__proxy_scheme = value @property def proxy_host(self): """Host for the proxy URI. :type: :class:`str` """ return self.__proxy_host @proxy_host.setter def proxy_host(self, value): self.__proxy_host = value @property def proxy_port(self): """Port number for the proxy URI. :type: :class:`int` """ return self.__proxy_port @proxy_port.setter def proxy_port(self, value): self.__proxy_port = value @property def proxy_username(self): """Username for the proxy authentication. :type: :class:`str` """ return self.__proxy_username @proxy_username.setter def proxy_username(self, value): self.__proxy_username = value @property def proxy_password(self): """Password for the proxy authentication. :type: :class:`str` """ return self.__proxy_password @proxy_password.setter def proxy_password(self, value): self.__proxy_password = value @property def logger_file(self): """File location to which debug logs are written to. If the logger_file is None, then a logger is configured with a console stream handler and all the file handlers are removed. Otherwise, a logger is configured with a file handler and stream handlers are removed. Configured file handlers are time based handlers which are rotated everyday at midnight. :type: :class:`str` """ return self.__logger_file @logger_file.setter def logger_file(self, value): 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.handlers.TimedRotatingFileHandler(self.__logger_file, 'midnight', 1) self.logger_file_handler.suffix = "%Y-%m-%d" self.logger_file_handler.setFormatter(self.logger_formatter) for _, logger in six.iteritems(self.logger): logger.addHandler(self.logger_file_handler) if self.logger_stream_handler: logger.removeHandler(self.logger_stream_handler) else: # If not set logging file, # then add stream handler and remove file handler. self.logger_stream_handler = logging.StreamHandler() self.logger_stream_handler.setFormatter(self.logger_formatter) for _, logger in six.iteritems(self.logger): logger.addHandler(self.logger_stream_handler) if self.logger_file_handler: logger.removeHandler(self.logger_file_handler) @property def debug(self): """Runs the client in debug mode by enabling/disabling debug logging (**Default** False). Default logging level is INFO and all associated loggers' levels are toggled between INFO and DEBUG by this flag. :type: :class:`bool` """ return self.__debug @debug.setter def debug(self, value): 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.INFO` for _, logger in six.iteritems(self.logger): logger.setLevel(logging.INFO) # turn off httplib debug httplib.HTTPConnection.debuglevel = 0 @property def logger_format(self): """The log format for file or stream log handler. :type: :class:`str` """ return self.__logger_format @logger_format.setter def logger_format(self, value): self.__logger_format = value self.logger_formatter = logging.Formatter(self.__logger_format) @property def default_connect_timeout(self): """Default connection timeout in milliseconds for a HTTP request (**Default** 30000). :type: :class:`int` """ return self.__default_connect_timeout @property def default_read_timeout(self): """Default read timeout in milliseconds for a HTTP request (**Default** 30000). :type: :class:`int` """ return self.__default_read_timeout @property def connect_timeout(self): """Connect timeout for an operation in milliseconds. :type: :class:`int` """ return self.__connect_timeout @connect_timeout.setter def connect_timeout(self, value): self.__connect_timeout = value @property def read_timeout(self): """Read timeout for an operation in milliseconds. :type: :class:`int` """ return self.__read_timeout @read_timeout.setter def read_timeout(self, value): self.__read_timeout = value def _get_api_key_with_prefix(self, identifier): """Gets API key (with prefix if set). :param identifier: The identifier of apiKey :type identifier: :class:`str` ... :return: A token for api key authentication :rtype: :class:`str` """ if (self.api_key.get(identifier) and self.api_key_prefix.get(identifier)): return self.api_key_prefix[identifier] + ' ' + self.api_key[identifier] # noqa: E501 elif self.api_key.get(identifier): return self.api_key[identifier]
[docs] def get_basic_auth_token(self): """Gets HTTP basic authentication header (string). :return: A token for basic HTTP authentication. :rtype: :class:`str` """ if self.__username and self.__password: return urllib3.util.make_headers( basic_auth=self.__username + ':' + self.__password ).get('authorization')
def _auth_settings(self): """Gets Auth Settings configuration. """ return { 'basicAuthScheme': { 'type': 'basic', 'in': 'header', 'key': 'Authorization', 'value': self.get_basic_auth_token() }, }
[docs] def to_debug_report(self): """Prints the information about current OS, Python, API and SDK versions for debugging purposes """ return "Python SDK Debug Report:\n"\ "OS: {env}\n"\ "Python Version: {pyversion}\n"\ "Version of the API: 4.0.3-alpha-1\n"\ "SDK Package Version: 4.0.3a1".\ format(env=sys.platform, pyversion=sys.version)