From cdc917678bf87d337bc467a0d25e9a2c2965a564 Mon Sep 17 00:00:00 2001 From: Francisco Sandoval Date: Tue, 12 Dec 2023 22:49:05 -0300 Subject: [PATCH] lee los trayecto de redis --- project/api/views/linea.py | 64 +++++++++++++++++++++----------------- requirements.txt | 3 +- 2 files changed, 38 insertions(+), 29 deletions(-) diff --git a/project/api/views/linea.py b/project/api/views/linea.py index 1e21cb8..060de30 100755 --- a/project/api/views/linea.py +++ b/project/api/views/linea.py @@ -6,8 +6,12 @@ from django_filters.rest_framework import DjangoFilterBackend from django.db import connection from .. import models, serializers from django.http import JsonResponse +from os import getenv +import redis +import json import logging + class LineaViewSet(viewsets.ModelViewSet): queryset = models.Linea.objects.all() serializer_class = serializers.LineaSerializer @@ -34,8 +38,6 @@ class LineaViewSet(viewsets.ModelViewSet): def paraderos(self, request, pk=None): pk = request.GET['id_linea'] - logging.error(request.GET) - paraderos = models.Paradero.objects \ .filter(vigente=True, lineaparadero__id_linea=pk) \ .values('id_paradero','stop_lat','stop_lon','stop_name') \ @@ -47,33 +49,39 @@ class LineaViewSet(viewsets.ModelViewSet): def buses(self, request, pk=None): pk = request.GET['id_linea'] - query = "SELECT distinct \ - l.route_color, \ - l.route_text_color, \ - gp.vehicle_license_plate as Patente_vehiculo, \ - speed::numeric(5,2) as speed, \ - gp.longitude::numeric, \ - gp.latitude::numeric \ - from gtfs_posiciones gp \ - inner join linea l on (trim(gp.route_id)||'-'||trim(gp.direction_id::varchar)) = l.id_linea \ - where l.id_linea = %s" + db_host = getenv('DB_REDIS_HOST') + db_port = getenv('DB_REDIS_PORT') + r = redis.Redis(host=db_host, port=db_port, decode_responses=True) + + paraderos = models.Paradero.objects \ + .filter(vigente=True, lineaparadero__id_linea=pk) \ + .values('id_paradero') \ + .all() + + obj_buses = {} + array_buses = [] + for p in paraderos: + key = f'stop_id:{p["id_paradero"]}' + data = r.get(key) + + if data != None: + array_trayectos = json.loads(data) + for trayecto in array_trayectos: + key_route = f'{trayecto["route_id"]}-{trayecto["direction_id"]}' + if key_route == pk: + patente = trayecto["vehicle_license_plate"] + if patente not in obj_buses: + obj_buses[patente] = { + 'Patente_vehiculo': trayecto["vehicle_license_plate"], + 'latitude': trayecto["latitude"], + 'longitude': trayecto["longitude"], + 'speed': trayecto["speed"] + } - with connection.cursor() as cursor: - cursor.execute(query, [ pk ]) - rows = cursor.fetchall() - - buses = [] - for row in rows: - buses.append({ - 'route_color': row[0], - 'route_text_color': row[1], - 'Patente_vehiculo': row[2], - 'speed': row[3], - 'longitude': row[4], - 'latitude': row[5], - }) - - return JsonResponse(buses, safe=False) + for patente in obj_buses: + array_buses.append(obj_buses[patente]) + + return JsonResponse(array_buses, safe=False) @action(detail=False, methods=['get']) diff --git a/requirements.txt b/requirements.txt index 087545d..37bbd31 100644 --- a/requirements.txt +++ b/requirements.txt @@ -9,4 +9,5 @@ PyJWT pymongo Pillow openpyxl -google \ No newline at end of file +google +redis[hiredis] \ No newline at end of file