lee los trayecto de redis

francisco/photos
Francisco Sandoval 2023-12-12 22:49:05 -03:00
parent c80988d3ee
commit cdc917678b
2 changed files with 38 additions and 29 deletions

View File

@ -6,8 +6,12 @@ from django_filters.rest_framework import DjangoFilterBackend
from django.db import connection from django.db import connection
from .. import models, serializers from .. import models, serializers
from django.http import JsonResponse from django.http import JsonResponse
from os import getenv
import redis
import json
import logging import logging
class LineaViewSet(viewsets.ModelViewSet): class LineaViewSet(viewsets.ModelViewSet):
queryset = models.Linea.objects.all() queryset = models.Linea.objects.all()
serializer_class = serializers.LineaSerializer serializer_class = serializers.LineaSerializer
@ -34,8 +38,6 @@ class LineaViewSet(viewsets.ModelViewSet):
def paraderos(self, request, pk=None): def paraderos(self, request, pk=None):
pk = request.GET['id_linea'] pk = request.GET['id_linea']
logging.error(request.GET)
paraderos = models.Paradero.objects \ paraderos = models.Paradero.objects \
.filter(vigente=True, lineaparadero__id_linea=pk) \ .filter(vigente=True, lineaparadero__id_linea=pk) \
.values('id_paradero','stop_lat','stop_lon','stop_name') \ .values('id_paradero','stop_lat','stop_lon','stop_name') \
@ -47,33 +49,39 @@ class LineaViewSet(viewsets.ModelViewSet):
def buses(self, request, pk=None): def buses(self, request, pk=None):
pk = request.GET['id_linea'] pk = request.GET['id_linea']
query = "SELECT distinct \ db_host = getenv('DB_REDIS_HOST')
l.route_color, \ db_port = getenv('DB_REDIS_PORT')
l.route_text_color, \ r = redis.Redis(host=db_host, port=db_port, decode_responses=True)
gp.vehicle_license_plate as Patente_vehiculo, \
speed::numeric(5,2) as speed, \ paraderos = models.Paradero.objects \
gp.longitude::numeric, \ .filter(vigente=True, lineaparadero__id_linea=pk) \
gp.latitude::numeric \ .values('id_paradero') \
from gtfs_posiciones gp \ .all()
inner join linea l on (trim(gp.route_id)||'-'||trim(gp.direction_id::varchar)) = l.id_linea \
where l.id_linea = %s" 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: for patente in obj_buses:
cursor.execute(query, [ pk ]) array_buses.append(obj_buses[patente])
rows = cursor.fetchall()
return JsonResponse(array_buses, safe=False)
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)
@action(detail=False, methods=['get']) @action(detail=False, methods=['get'])

View File

@ -9,4 +9,5 @@ PyJWT
pymongo pymongo
Pillow Pillow
openpyxl openpyxl
google google
redis[hiredis]