109 lines
3.2 KiB
Python
109 lines
3.2 KiB
Python
import logging
|
|
import json
|
|
import base64
|
|
|
|
from app_be.services.dropboxservice import DropboxService
|
|
from app_be.services.wrapperservice import WrapperService
|
|
from app_be.views.mongo_db import MongoManager
|
|
|
|
from django.http import JsonResponse
|
|
from django.http import HttpRequest
|
|
|
|
from rest_framework.decorators import api_view
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class TestApiClass:
|
|
@staticmethod
|
|
@api_view(['GET'])
|
|
def test_api(request):
|
|
logger.debug('Test api call: {}'.format(request))
|
|
return JsonResponse({'Result': 'success'}, safe=False)
|
|
|
|
|
|
class ImageEndpoint:
|
|
@staticmethod
|
|
@api_view(['GET'])
|
|
def image_api_get_all(request):
|
|
logger.debug('Image GET all call: {}'.format(request))
|
|
print(request)
|
|
|
|
instance = MongoManager.getInstance()
|
|
|
|
db = instance.AIC
|
|
col = db.metadata
|
|
|
|
try:
|
|
for resp in col.find():
|
|
print(resp)
|
|
|
|
except:
|
|
print("Could not find Metadata")
|
|
|
|
return JsonResponse({'Result': 'success1'}, safe=False)
|
|
|
|
|
|
@staticmethod
|
|
@api_view(['GET'])
|
|
def image_api_get_single(request, identifier):
|
|
logger.debug('Image GET single call: {}'.format(request))
|
|
|
|
instance = MongoManager.getInstance()
|
|
|
|
db = instance.AIC
|
|
col = db.metadata
|
|
metadata = None
|
|
try:
|
|
resp = col.find({"filename": identifier+".jpg"})
|
|
metadata = resp[0]
|
|
except:
|
|
print("Could not find Metadata")
|
|
if metadata is None:
|
|
return JsonResponse({'Result': 'Error - could not find metadata.'}, status=404, safe=False)
|
|
else:
|
|
if '_id' in metadata:
|
|
del metadata['_id']
|
|
|
|
dropbox_image_bytes = DropboxService.read_file(metadata['filename'])
|
|
|
|
if dropbox_image_bytes is None:
|
|
return JsonResponse({'Result': 'Error - could not find image in dropbox.', 'id': identifier}, status=404, safe=False)
|
|
|
|
payload = {
|
|
'id': identifier,
|
|
'metadata': metadata,
|
|
'image_data': WrapperService.wrap_file(dropbox_image_bytes)
|
|
}
|
|
|
|
return JsonResponse(payload, safe=False)
|
|
|
|
@staticmethod
|
|
@api_view(['POST'])
|
|
def image_api_post(request: HttpRequest):
|
|
logger.debug('Image POST call: {}'.format(request))
|
|
payload = json.loads(request.body)
|
|
b64encoded_image = payload['image_data']
|
|
identifier = payload['id']
|
|
metadata = payload['metadata']
|
|
filename = payload['metadata']['filename']
|
|
|
|
instance = MongoManager.getInstance()
|
|
|
|
db = instance.AIC
|
|
col = db.metadata
|
|
|
|
try:
|
|
metadata['location'] = [metadata['longitude'],metadata['latitude']]
|
|
col.insert_one(metadata)
|
|
|
|
except:
|
|
print("Could not insert Metadata")
|
|
|
|
decoded_image = WrapperService.unwrap_file(b64encoded_image)
|
|
if not DropboxService.create_file(filename, decoded_image):
|
|
print("Could not save image to dropbox")
|
|
|
|
return JsonResponse({'id': identifier, 'filename': filename},
|
|
safe=False) # 'metadata': metadata response beinhaltet ObjectId welche nicht serializable is?
|