import requests from urllib.parse import urljoin from datetime import date, datetime import json class django_crud_api(): def __init__(self,**kwargs): self.endpoint=kwargs.get('endpoint') def find(self, filter): try: r = requests.request('GET', self.endpoint, params={'format':'json',**filter}) r.raise_for_status() r=r.json() except requests.exceptions.RequestException as e: print(e) return None return r def find_one(self,filter): r=self.find(filter) if r is None: return None if len(r)>1: raise LookupError("Mehr als ein Objekt von der API zurückgegeben filter: %s" % str(filter)) if len(r)==0: return None return r[0] def get(self,pk): try: r = requests.request('GET', urljoin(self.endpoint,pk), params={'format':'json'}) r=r.json() except requests.exceptions.RequestException as e: print(e) return None return r def update(self,pk,d): try: files=d.pop("files",None) headers = None #{'Content-type': 'multipart/form-data'} print("Updated %s " % pk) r = requests.request('PUT', urljoin(self.endpoint,pk)+"/", headers=headers,data=d,files=files) r.raise_for_status() except requests.exceptions.RequestException as e: print(e) if r: print(r.text) print(d.keys()) print("Tryed to reach %s with PUT Action" % urljoin(self.endpoint,pk)) return None if r.status_code==200: r=r.json() return r def create(self, d): try: files=d.pop("files",None) headers = None #{'Content-type': 'application/json'} #print("Create %s" % d["slug"]) # print("Create with data %s" % str(d)) #for k in d: # if type(d[k]) is date: # d[k]=str(d[k]) r = requests.post(self.endpoint,headers=headers,data=d,files=files) r.raise_for_status() except requests.exceptions.RequestException as e: print(e) if r and r.status_code==400: print(r.text) print("Tryed to reach %s with POST Action" % self.endpoint) return r.status_code, None if r.status_code==201: return r.status_code, r.json() #print(r) return r.status_code, r