import requests import logging logger = logging.getLogger(__name__) class TaskService(object): UUID = 'uuid' DESCRIPTION = 'description' TAGS = 'tags' ANNOTATIONS = 'annotations' ENTRY = 'entry' DONE = 'done' DUE = 'due' def __init__(self, **entries): self.__dict__.update(entries) def findAll(): raise NotImplementedError() def modify(): raise NotImplementedError() class RestService(object): def __init__(self, api_url, json=False): self.api_url = api_url self.headers = {} self.json = json def get(self, path, id=None): # TODO: change this to a single pattern assume a pattern then stick with it if self.api_url.endswith('/'): url = '{0}{1}'.format(self.api_url, path[1:]) else: url = '{0}{1}'.format(self.api_url, path) if id: url = '{0}/{1}'.format(url, id) r = requests.get(url, headers=self.headers) if r.raise_for_status(): logger.error(r.raise_for_status()) raise r.raise_for_status() if self.json: return r.json() return r.content def delete(self, path, id): api_url = self.api_url if api_url.endswith('/'): url = '{0}{1}'.format(api_url, path[1:]) else: url = '{0}/{1}'.format(api_url, path) r = requests.get(url, headers=self.headers) if r.raise_for_status(): logger.error(r.raise_for_status()) raise r.raise_for_status() if self.json: return r.json() return r.content def post(self, path, data): api_url = self.api_url print(api_url) if self.api_url.endswith('/'): api_url = api_url[1:] if path.startswith('/'): url ='{0}{1}'.format(api_url, path) else: url = '{0}/{1}'.format(api_url, path) r = requests.post(url, data, headers=self.headers) if r.raise_for_status(): logger.error(r.raise_for_status()) raise r.raise_for_status() if self.json: return r.json() return r.content def addHeader(self, type, value): self.headers[type] = value