""" ApiClient ========= Client class specifically for making calls to VAPI. Acts as a thin wrapper around the requests library. http://docs.python-requests.org/en/latest/ """ import requests class ApiClient: API_VERSION = '1' def __init__(self, base_url, access_token): self.base_url = base_url self.access_token = access_token def get(self, path, **kwargs): """Execute a GET request against the given endpoint.""" return self.request('get', path, **kwargs) def post(self, path, **kwargs): """Execute a POST request against the given endpoint.""" return self.request('post', path, **kwargs) def put(self, path, **kwargs): """Execute a PUT request against the given endpoint.""" return self.request('put', path, **kwargs) def delete(self, path, **kwargs): """Execute a DELETE request against the given endpoint.""" return self.request('delete', path, **kwargs) def request(self, method, path, **kwargs): """Execute a request against the API. Passes the given keyword args through to the requests library, with the 'version' and 'access-token' headers injected. Return requests Response object. http://docs.python-requests.org/en/latest """ full_url = self.base_url.rstrip('/') + '/' + path.lstrip('/') req_kwargs = kwargs.copy() if 'headers' not in req_kwargs: req_kwargs['headers'] = {} # inject the necessary headers req_kwargs['headers']['version'] = self.API_VERSION req_kwargs['headers']['access-token'] = self.access_token # pass the given kwargs through to requests, with our changes return requests.request(method, full_url, **req_kwargs)