import requests class InvoiceNinja(object): API_V1 = 'api/v1' def __init__(self, endpoint_url: str = 'https://invoicing.co', api_token: str = str()): self.endpoint_url = '{}/{}'.format(endpoint_url, self.API_V1) self.api_token = api_token self.headers = dict() def set_url(self, url: str): self.endpoint_url = url def get_url(self): return self.endpoint_url def set_token(self, token: str): self.api_token = token def get_token(self): return self.api_token def get_headers(self): """Get HTTP headers for request.""" return self.headers def add_headers(self, headers: dict): """Add HTTP headers to request.""" self.headers.update(headers) def build_headers(self): """Build Invoice Ninja API headers for request. A header dictionary with the API token is returned by default. """ headers = { 'X-API-TOKEN': self.api_token, 'X-Requested-With': 'XMLHttpRequest'} return self.headers.update(headers) def send(self, uri: str, payload: dict, method: str = 'get'): url = '{}/{}'.format(self.endpoint_url, uri) if method == 'get': return requests.get(url, params=payload) if method == 'post': return requests.post(url, params=payload) def ping(self): ''' Ping Invoice Ninja instance. ''' server_response = requests.get(url=self._get_url_for(), headers=self.build_headers()) if server_response.ok: return True else: return False