64 lines
2.0 KiB
Python
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
|