Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
# Copyright 2019 TrilioData, Inc.
# All Rights Reserved
#
"""
Manage access to the clients, including authenticating when needed.
"""

import debtcollector.renames
from workloadmgrclient import client
from workloadmgrclient.v1 import client as workloadmgr_client


API_VERSION = "1"


class ClientCache(object):
    """Descriptor class for caching created client handles."""

    def __init__(self, factory):
        self.factory = factory
        self._handle = None

    def __get__(self, instance, owner):
        # Tell the ClientManager to login to keystone
        if self._handle is None:
            self._handle = self.factory(instance)
        return self._handle


class ClientManager(object):
    """Manages access to API clients, including authentication."""

    workloadmgr = ClientCache(workloadmgr_client.make_client)

    @debtcollector.renames.renamed_kwarg("tenant_id", "project_id", replace=True)
    @debtcollector.renames.renamed_kwarg("tenant_name", "project_name", replace=True)
    def __init__(
        self,
        token=None,
        url=None,
        auth_url=None,
        endpoint_type=None,
        project_name=None,
        project_id=None,
        username=None,
        user_id=None,
        password=None,
        region_name=None,
        api_version=None,
        auth_strategy=None,
        insecure=False,
        ca_cert=None,
        log_credentials=False,
        service_type=None,
        service_name=None,
        timeout=None,
        retries=0,
        raise_errors=True,
        session=None,
        auth=None,
        os_domain_id=None,
        user_domain_name=None,
        project_domain_name=None,
        os_user_domain_id=None,
        os_project_domain_id=None,
        logger=None,
    ):
        self._token = token
        self._url = url
        self._auth_url = auth_url
        self._service_type = service_type
        self._service_name = service_name
        self._endpoint_type = endpoint_type
        self._project_name = project_name
        self._project_id = project_id
        self._username = username
        self._user_id = user_id
        self._password = password
        self._region_name = region_name
        self._api_version = api_version
        self._service_catalog = None
        self._auth_strategy = auth_strategy
        self._insecure = insecure
        self._ca_cert = ca_cert
        self._log_credentials = log_credentials
        self._timeout = timeout
        self._retries = retries
        self._raise_errors = raise_errors
        self._session = session
        self._auth = auth
        self._os_domain_id = os_domain_id
        self._user_domain_name = user_domain_name
        self._project_domain_name = project_domain_name
        self._os_user_domain_id = os_user_domain_id
        self._os_project_domain_id = os_project_domain_id
        self._logger = logger
        return

    def initialize(self):
        if not self._url:
            httpclient = client.HTTPClient(
                user=self._username,
                password=self._password,
                projectid=self._project_id,
                auth_url=self._auth_url,
                insecure=self._insecure,
                timeout=self._timeout,
                tenant_id=self._project_id,
                region_name=self._region_name,
                endpoint_type=self._endpoint_type,
                service_type=self._service_type,
                service_name=self._service_name,
                cacert=self._ca_cert,
                retries=self._retries,
                domain_name=self._os_domain_id,
                user_domain_name=self._user_domain_name,
                project_domain_name=self._project_domain_name,
                os_user_domain_id=self._os_user_domain_id,
                os_project_domain_id=self._os_project_domain_id,
                http_log_debug=self._logger,
            )
            # TODO: check following
            # proxy_tenant_id=None,
            # proxy_token=None
            # http_log_debug=False)
            httpclient.authenticate()
            # Populate other password flow attributes
            self._token = httpclient.auth_token
            self._url = httpclient.management_url