import requests class InvoiceNinja(object): API_V1 = 'api/v1' ENDPOINT_URLS = { 'clients': 'clients', 'products': 'products', 'invoices': 'invoices', 'recurring invoices': 'recurring_invoices', 'payments': 'payments', 'quotes': 'quotes', 'credits': 'credits', 'reports': 'reports', 'activities': 'activities', 'charts': 'charts', 'companies': 'companies', 'documents': 'documents', 'emails': 'emails', 'expense': 'expenses', 'export': 'export', 'import': 'import_json', 'ping': 'ping', 'health check': 'health_check', 'users': 'users' } 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 = self.build_headers() def _get_url_for(self, endpoint: str = 'ping'): ''' Get complete URL for an endpoint. Endpoint URLs are appended to the Invoice Ninja base URL and returned. ''' if endpoint in self.ENDPOINT_URLS: return '{}/{}'.format(self.endpoint_url, self.ENDPOINT_URLS[endpoint]) else: raise KeyError('Endpoint URL not found') #def _get_headers(self, headers: dict = dict()): 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 headers def ping(self): ''' Ping Invoice Ninja instance. ''' server_response = requests.get(url=self._get_url_for(), headers=self.headers) if server_response.ok: return True else: return False