def post(self, request, format=None): ALLOWED_FORMATS = ['jpeg', 'jpg', 'png', 'svs'] reqData = request.data image_name = reqData.get("image_name") image_format = reqData.get("image_format").lower() bucket_name = reqData.get("image_data").get("bucketName") object_name = reqData.get("image_data").get("objectName") user = reqData.get("user") is_private = reqData.get("is_private") pub_date = reqData.get("pub_date") processed = reqData.get("processed") preview_url = '' if not (image_format in ALLOWED_FORMATS): m_status = status.HTTP_403_FORBIDDEN msg = "Format not supported" data = {"status": m_status, "msg": msg} return Response(data=json.dumps(data), status=m_status, content_type='application/json') ''' # TODO: Make Preview images to show ''' preview_path = "" # Test if user exists if not (Users.objects.all().filter(name=user).exists()): m_status = status.HTTP_404_NOT_FOUND msg = "User Not Found" data = {"status": m_status, "msg": msg} return Response(data=json.dumps(data), status=m_status, content_type='application/json') else: m_user = Users.objects.all().filter(name=user).get() # Save to DB try: if (oid.objects.all().filter(bucket_name=bucket_name).filter( object_name=object_name).exists()): m_status = status.HTTP_409_CONFLICT msg = "Image already exists" data = {"status": m_status, "msg": msg} return Response(data=json.dumps(data), status=m_status, content_type='application/json') else: m_oid = oid(url='192.168.0.162:9000', bucket_name=bucket_name, object_name=object_name) m_oid.save() if (is_private == "True"): is_private = True else: is_private = False m_image = Image(image_name=image_name, image_oid=m_oid, preview_url=preview_path, user=m_user, is_private=is_private, pub_date=pub_date, processed=processed) try: m_image.save() except Exception as e: logger.error(e) logger.info('image saved') try: if (processed is False): mt = DeepZoomWrapper() mt.put(m_image) mt.process() except Exception as e: logger.error(e) except Exception as e: logger.error(e) m_status = status.HTTP_406_NOT_ACCEPTABLE msg = "Failed inserting DB" data = {"status": m_status, "msg": msg} return Response(data=json.dumps(data), status=m_status, content_type='application/json') m_status = status.HTTP_201_CREATED msg = "Success" data = {"status": m_status, "msg": msg} return Response(data=json.dumps(data), status=m_status, content_type='application/json')
def updateImage(self, image, imagePath, logger): logger.debug("Start sending to minio server") minioClient = Minio( '192.168.0.162:9000', access_key='FM9GO6CT17O8122165HB', secret_key='yLyai1DFC03hzN17srK0PvYTIZFvHDnDxRKYAjK4', secure=False ) imageName = os.path.splitext(image.image_name)[0] + '.dzi' image_oid = image.image_oid bucketName = image_oid.bucket_name user = image.user is_private = image.is_private pub_date = image.pub_date processed = True dataDirPath = os.path.join( os.path.split(imagePath)[0], os.path.splitext( os.path.split(imagePath)[1])[0]+"_files" ) try: with open(imagePath, 'rb') as file_data: file_stat = os.stat(imagePath) minioClient.put_object( bucketName, imageName, file_data, file_stat.st_size, content_type='application/dzi' ) file_data.close() logger.info( "Starting upload \ recursively to minio server, starting from " + dataDirPath) self.uploadRecursively( minioClient, dataDirPath, logger, os.path.split(dataDirPath)[0], bucketName, os.path.split(dataDirPath)[1], os.path.splitext(imageName)[0] ) logger.info("Successfully sent to minio server") logger.info("Copying files to frontend/public/") try: dir_util.copy_tree( os.path.split(dataDirPath)[0], '/code/frontend_app/deepzoom/' + bucketName) logger.info("[DeepZeeomWrapper] Successfully copied files") except Exception as e: logger.error("Error occured copying files: ") logger.error("" + str(e)) logger.info("Deleting temporary files") shutil.rmtree(os.path.split(dataDirPath)[0]) shutil.rmtree('/code/imageuploader/image_tmp/source/' + os.path.splitext(imageName)[0] ) logger.info("Successfully \ deleted temporary files") logger.info("Start update db") try: if (oid.objects.all().filter(bucket_name=bucketName) .filter(object_name=imageName).exists()): raise Exception else: m_oid = oid( url='192.168.0.162:9000', bucket_name=bucketName, object_name=imageName ) m_oid.save() m_user = Users.objects.all().filter(name=user).get() m_image = Image( image_name=imageName, image_oid=m_oid, preview_url="", user=m_user, is_private=is_private, pub_date=pub_date, processed=processed ) m_image.save() logger.debug("\ Deleting original image from db") m_image2del = Image.objects.all() \ .filter(image_oid__bucket_name=bucketName) \ .filter(image_name=image.image_name).get() m_image2del.delete() logger.debug("\ Deleting original image from minio") minioClient.remove_object(bucketName, image.image_name) logger.info("\ Successfully deleted unprocessed image") except Exception as e: logger.error("[Exception] at DeepZoomWrapper:183 " + e) logger.error("Object exists?") logger.info("Succesfully updated db") except ResponseError as err: logger.error("[ResponseError] at DeepZoomWrapper:190 " + err) return