"""ApiClient. Client class specifically for making calls to VAPI. Acts as a thin wrapper around the requests library. """ import requests class ApiClient: """VAPI api client.""" API_VERSION = "1" def __init__(self, base_url, access_token): """__init__.""" 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. """ 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)