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) 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'} 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