Source code for identixone.api.client

import os
import inspect

from importlib import import_module

from identixone.base.exceptions import ImproperlyConfigured
from identixone.http.client import IdentixOneHttpClient
from identixone.utils import constants
from identixone.utils.environment import env_var


[docs]class Client(object): """ High-level client to interact with the Identix.one API. """ def __init__(self, token=None, version=None, http_client=None, environment=None): """ Initialize Client with credentials and optional http client. :param token: Access token to the Identix.one API :param version: Version of the API to use :param http_client: Class of http client to use for making requests :param environment: Environment from which to read config variables """ self.environment = environment or os.environ self.token = token or self.env_var('TOKEN') self.version = str(version) if version else self.env_var('VERSION') if not self.version: raise ImproperlyConfigured( 'Version must be provided. Valid choices are: {}'.format( str(constants.SUPPORTED_API_VERSIONS))) if self.version not in constants.SUPPORTED_API_VERSIONS: raise ImproperlyConfigured( 'Invalid version. Valid choices are: {}'.format( str(constants.SUPPORTED_API_VERSIONS))) if not self.token: raise ImproperlyConfigured('API token must be provided.') if http_client: if not inspect.isclass(http_client): raise ImproperlyConfigured( 'Variable http_client has to be class type') self.http_client = http_client(auth_token=self.token) else: self.http_client = IdentixOneHttpClient(auth_token=self.token)
[docs] def dynamic_import(self, module_path, attribute): """ Imports any attribute from the module specified as string dotted path. Takes into account current supplied version to the Client instance. :param module_path: dotted path of the module from which to import from :param attribute: function, class or any other attr to be imported :return: imported attribute """ version_str = 'v{}'.format(self.version) abs_path = '{}.{}'.format(module_path, version_str) module_object = import_module(abs_path) return getattr(module_object, attribute)
[docs] def env_var(self, name): """ Wrapper around env_var utility function with supplied current environ. :param name: name of the environment variable :return: value of the environment variable or None if it doesn't exist """ return env_var(self.environment, name)
@property def auth(self): cls = self.dynamic_import('identixone.api.auth', 'Auth') return cls(self.http_client) @property def notifications(self): cls = self.dynamic_import( 'identixone.api.notifications', 'Notifications') return cls(self.http_client) @property def persons(self): cls = self.dynamic_import('identixone.api.persons', 'Persons') return cls(self.http_client) @property def sources(self): cls = self.dynamic_import('identixone.api.sources', 'Sources') return cls(self.http_client) @property def entries(self): cls = self.dynamic_import('identixone.api.entries', 'Entries') return cls(self.http_client) @property def users(self): cls = self.dynamic_import('identixone.api.users', 'Users') return cls(self.http_client) @property def utility(self): cls = self.dynamic_import('identixone.api.utility', 'Utility') return cls(self.http_client) @property def persons_lists(self): cls = self.dynamic_import('identixone.api.persons_lists', 'PersonsLists') return cls(self.http_client)