from rest_framework import viewsets from django.http import JsonResponse from django.db.models import F from django.db import connection from django_filters.rest_framework import DjangoFilterBackend from rest_framework.decorators import action from .. import models, serializers import json import logging class DispositivoViewSet(viewsets.ModelViewSet): queryset = models.Dispositivo.objects.all() serializer_class = serializers.DispositivoSerializer filter_backends = [DjangoFilterBackend] filterset_fields = ['id_paradero', 'id_tipo_dispositivo'] @action(detail=False, methods=['post']) def whoami(self, request, pk=None): input = json.loads(request.body) whoami = input['whoami'] record = models.Paradero.objects \ .filter(dispositivo__id_dispositivo=whoami['idDispositivo']) \ .annotate(nro_paradero=F('id_paradero'), nombre_paradero=F('stop_name')) \ .first() if (record): return JsonResponse({ "WhoamiResponse": { "NroParadero": record.nro_paradero, "NombreParadero": record.nombre_paradero, "Status": "OK" } }) # retorna json de no existente return JsonResponse({ "WhoamiResponse": { "Status": "NOK", "errorString": "Dispositivo no identificado" } }) @action(detail=False, methods=['post']) def getInfoDevice(self, request, pk=None): input = json.loads(request.body) getInfoDevice = input['GetInfoDevice'] record = models.Paradero.objects \ .filter(dispositivo__id_dispositivo=getInfoDevice['idDispositivo']) \ .annotate(nro_paradero=F('id_paradero'), nombre_paradero=F('stop_name')) \ .first() query = "SELECT json_data \ from gtfs_posiciones_json \ where stop_id = %s" params = [ record.nro_paradero ] with connection.cursor() as cursor: cursor.execute(query, params) row = cursor.fetchone() connection.close() detalle_lineas = [] for linea in row[0]: # logging.error(linea['linea']) data_linea = { 'Linea': linea['linea'], 'Descripcion': linea['Descripcion'], 'TipoLocomocion': linea['tipo_locomocion'], 'colorFondo': linea['colorFondo'], 'colorLetra': linea['colorLetra'], 'Llegadas': linea['Llegadas'] } detalle_lineas.append(data_linea) return JsonResponse({ "GetInfoDeviceResponse": { "DetalleLineas": detalle_lineas, "MensajeParadero": "No considerar, uso futuro" } })