import logging from urllib.parse import urlencode import requests from ..utils import logger as cl, CoreConfig access_token = {} class ApiClient: logger = cl.Logger(logging.DEBUG) session = requests.session() def __init__(self, host_endpoint=CoreConfig.TARGET_API_URL, timeout=60): self.host_endpoint = host_endpoint self.timeout = int(timeout) def get(self, uri): return self.session.get(url=self.host_endpoint + uri, headers=self.headers, timeout=self.timeout) def post(self, uri, json): return self.session.get(url=self.host_endpoint + uri, json=json, headers=self.headers) @property def headers(self): return {"authorization": "Bearer {}".format(self.authorize())} def authorize(self, user=CoreConfig.USER_EMAIL, password=CoreConfig.USER_PASSWORD): global access_token if access_token.get(user): return access_token.get(user) data = { "client_id": CoreConfig.AUTH0_CLIENT_ID, "client_secret": CoreConfig.AUTH0_CLIENT_SECRET, "audience": CoreConfig.AUTH0_AUDIENCE, "grant_type": CoreConfig.AUTH0_GRANT_TYPE, "realm": CoreConfig.AUTH0_REALM, "username": user, "password": password, } headers = {"content-type": "application/x-www-form-urlencoded", "client-type": "autotests"} session_token = self.session.post(CoreConfig.AUTH0_HOST, urlencode(data), headers=headers) access_token[user] = session_token.json().get("access_token") self.logger.info(access_token[user]) if access_token[user] == None: raise ValueError('Can not get the access token!') return access_token[user]