# coding: utf-8
"""
    Kubernetes

    No description provided (generated by Swagger Codegen
    https://github.com/swagger-api/swagger-codegen)

    OpenAPI spec version: v1.14.4

    Generated by: https://github.com/swagger-api/swagger-codegen.git
"""

from __future__ import absolute_import

import urllib3

import copy
import logging
import multiprocessing
import sys

from six import iteritems
from six import with_metaclass
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 == None:
      cls._default = type.__call__(cls)
    return copy.copy(cls._default)

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


class Configuration(with_metaclass(TypeWithDefault, object)):
  """
    NOTE: This class is auto generated by the swagger code generator program.
    Ref: https://github.com/swagger-api/swagger-codegen
    Do not edit the class manually.
    """

  def __init__(self):
    """
        Constructor
        """
    # Default Base url
    self.host = 'https://localhost'
    # Temp file folder for downloading files
    self.temp_folder_path = None

    # Authentication Settings
    # dict to store API key(s)
    self.api_key = {}
    # dict to store API prefix (e.g. Bearer)
    self.api_key_prefix = {}
    # Username for HTTP basic authentication
    self.username = ''
    # Password for HTTP basic authentication
    self.password = ''

    # Logging Settings
    self.logger = {}
    self.logger['package_logger'] = logging.getLogger('client')
    self.logger['urllib3_logger'] = logging.getLogger('urllib3')
    # Log format
    self.logger_format = '%(asctime)s %(levelname)s %(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 when calling API from https server.
    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 URL
    self.proxy = None
    # Safe chars for path_param
    self.safe_chars_for_path_param = ''

  @property
  def logger_file(self):
    """
        Gets the logger_file.
        """
    return self.__logger_file

  @logger_file.setter
  def logger_file(self, value):
    """
        Sets 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 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 iteritems(self.logger):
        logger.addHandler(self.logger_stream_handler)
        if self.logger_file_handler:
          logger.removeHandler(self.logger_file_handler)

  @property
  def debug(self):
    """
        Gets the debug status.
        """
    return self.__debug

  @debug.setter
  def debug(self, value):
    """
        Sets the 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 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 iteritems(self.logger):
        logger.setLevel(logging.WARNING)
      # turn off httplib debug
      httplib.HTTPConnection.debuglevel = 0

  @property
  def logger_format(self):
    """
        Gets the logger_format.
        """
    return self.__logger_format

  @logger_format.setter
  def logger_format(self, value):
    """
        Sets 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.api_key.get(identifier) and self.api_key_prefix.get(identifier):
      return self.api_key_prefix[identifier] + ' ' + self.api_key[identifier]
    elif self.api_key.get(identifier):
      return self.api_key[identifier]

  def get_basic_auth_token(self):
    """
        Gets HTTP basic authentication header (string).

        :return: The token for basic HTTP authentication.
        """
    return urllib3.util.make_headers(basic_auth=self.username + ':' + self.password)\
                       .get('authorization')

  def auth_settings(self):
    """
        Gets Auth Settings dict for api client.

        :return: The Auth Settings information dict.
        """
    return {
        'BearerToken': {
            'type': 'api_key',
            'in': 'header',
            'key': 'authorization',
            'value': self.get_api_key_with_prefix('authorization')
        },
    }

  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: v1.14.4\n'\
           'SDK Package Version: 10.0.0-snapshot'.\
           format(env=sys.platform, pyversion=sys.version)
