85 lines
2.5 KiB
Python
85 lines
2.5 KiB
Python
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
|