81 lines
2.6 KiB
Python
81 lines
2.6 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)
|
|
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
|