from rest_framework.parsers import JSONParser, MultiPartParser from rest_framework.views import APIView from django.http import JsonResponse from api.tracer import parse_image, read_image, numpy_zip_str_to_arr from .serializers import FloorplanSerializer, ProductSerializer from .models import Floorplan, Product import logging logger = logging.getLogger("root") class Products(APIView): def get(self, request): tasks = Product.objects.all() serializer = ProductSerializer(tasks, many=True) return JsonResponse(serializer.data, safe=False) def post(self, request): data = JSONParser().parse(request) serializer = ProductSerializer(data=data) if serializer.is_valid(): serializer.save() return JsonResponse(serializer.data, status=201) return JsonResponse(serializer.errors, status=400) class FloorplanView(APIView): parser_classes = (MultiPartParser,) def post(self, request): try: file = request.FILES["demo"] logger.info(file.__dict__) res = parse_image(read_image(file.read())) serializer = FloorplanSerializer( data={"title": file.name, "np_field": res["b64"].decode()} ) logger.info(res["b64"]) if serializer.is_valid(): serializer.save() return JsonResponse( data={"response": {"array": res["array"]}}, status=201 ) return JsonResponse(serializer.errors, status=500) except Exception as e: logger.error(e) raise e def get(self, request): try: item = Floorplan.objects.last() serializer = FloorplanSerializer(item, many=False) data = serializer.data data["np_field"] = numpy_zip_str_to_arr(data["np_field"]) return JsonResponse(data, safe=False) except Exception as e: logger.error(e) raise e