demo-int-table/back/api/views.py

64 lines
2.0 KiB
Python

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