import logging import json import base64 from app_be.services.dropboxservice import DropboxService from app_be.services.minioservice import MinioService 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']) #minio_image_bytes = MinioService.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: resp = 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") if not MinioService.create_file(filename, decoded_image): print("Could not save image to minio") return JsonResponse({'id': identifier, 'filename': filename}, safe=False) # 'metadata': metadata response beinhaltet ObjectId welche nicht serializable is?