import base64 import os import tempfile from datetime import datetime from django.core.exceptions import BadRequest from rest_framework import status from rest_framework.response import Response from rest_framework.views import APIView from common.utils.owncloud_utls import Owncloud from containers.models import ContainerPhotos class Damages(APIView): def post(self, request, depot_id): data = request.get_json() photo = data.pop("photo") extension = data.pop("photo_extension") with tempfile.NamedTemporaryFile(suffix=f'.{extension}', delete=False) as temp_file: try: temp_file.write(base64.b64decode(photo.encode("utf-8"))) temp_file.flush() own_filename = Owncloud.upload_damage_photo(temp_file.name, depot_id) container_photo = ContainerPhotos() container_photo.container.pk = depot_id container_photo.photo = own_filename container_photo.uploaded_on = datetime.now() container_photo.uploaded_by = request.user container_photo.save() except Exception as ex: raise BadRequest("Invalid photo encoding") finally: os.unlink(temp_file.name) return Response(status=status.HTTP_201_CREATED) def get(self, request, depot_id): return Owncloud.get_damages(depot_id)