from rest_framework import viewsets from rest_framework.decorators import action, schema, api_view from rest_framework.parsers import MultiPartParser from django.http import JsonResponse, HttpResponse from .. import models, serializers from ..schemas import ParaderoImageSchema from PIL import Image import io import coreapi import logging class ParaderoViewSet(viewsets.ModelViewSet): queryset = models.Paradero.objects.all() serializer_class = serializers.ParaderoSerializer @action(detail=False, methods=['GET','POST'], parser_classes=[MultiPartParser]) @api_view(['GET','POST']) @schema(ParaderoImageSchema()) def image(request, id): if request.method == 'GET': paradero_imagen = models.ParaderoImagen.objects.filter(id_paradero = id).first() if not paradero_imagen: return HttpResponse('') response = HttpResponse(content_type=paradero_imagen.content_type) response.write(paradero_imagen.imagen) return response if request.method == 'POST': paradero = models.Paradero.objects.filter(id_paradero = id).first() imagen = request.FILES['imagen'] content_type = imagen.content_type imagen_bytea = imagen.read() paradero_imagen = models.ParaderoImagen.objects.filter(id_paradero = id).first() if not paradero_imagen: paradero_imagen = models.ParaderoImagen( id_paradero = paradero, imagen = imagen_bytea, content_type = content_type ) paradero_imagen.save() else: paradero_imagen.imagen = imagen_bytea paradero_imagen.content_type = content_type paradero_imagen.save() return JsonResponse({ 'id_paradero': paradero.id_paradero, 'stop_name': paradero.stop_name, 'url_image': url_image_paradero(request, id) }) def url_image_paradero(request, id): paradero_imagen = models.ParaderoImagen.objects.filter(id_paradero = id).first() if not paradero_imagen: return None return request.build_absolute_uri(f'/api/paraderos/image/{id}/')