Processing GET requests to pass timetables for specific route_ids

This commit is contained in:
Johannes Randerath 2024-06-11 19:49:28 +02:00
parent 0031646016
commit 9f674f345b

View File

@ -9,16 +9,30 @@ index(request)
Home page Home page
""" """
from django.shortcuts import render from django.shortcuts import render
from django.http import HttpResponse from django.http import HttpResponse, HttpRequest
from .models import * from .models import *
from .forms import * from .forms import *
import json import json
from datetime import datetime
def print_r(r, s): def print_r(r, s):
if not len(r): if not len(r):
print(s) print(s)
return r return r
def get_timetable(r, trips, stop_sequences):
timetable = {"stop_sequence": stop_sequences[r.route_id]}
sts = {}
for stop in stop_sequences[r.route_id]:
times = []
for t in trips[r.route_id]:
for st in StopTime.objects.filter(trip_id=t.trip_id):
times.append(st.departure_time.strftime("%H:%M"))
sts[stop] = times
timetable["stop_times"] = sts
return timetable
def index(request): def index(request):
stops = [{name: getattr(s, name) for name in ['stop_id', 'stop_name', 'stop_lat', 'stop_lon']} for s in Stop.objects.all()] stops = [{name: getattr(s, name) for name in ['stop_id', 'stop_name', 'stop_lat', 'stop_lon']} for s in Stop.objects.all()]
route_name = lambda r : r.route_short_name if r.route_short_name else r.route_long_name route_name = lambda r : r.route_short_name if r.route_short_name else r.route_long_name
@ -30,21 +44,14 @@ def index(request):
t = trips[r["route_id"]] t = trips[r["route_id"]]
for s in StopTime.objects.filter(trip_id_id__exact=t[0].trip_id): for s in StopTime.objects.filter(trip_id_id__exact=t[0].trip_id):
seq.append(s) seq.append(s)
stop_sequences[r["route_id"]] = sorted(seq, key=lambda st : st.stop_sequence) stop_sequences[r["route_id"]] = [s.stop_id.stop_id for s in sorted(seq, key=lambda st : st.stop_sequence)]
timetables = {} timetable = {}
for r in routes: if request.GET.get("timetable"):
timetable = {"stop_sequence": stop_sequences[r["route_id"]]} try:
sts = {} r = Route.objects.get(route_id=request.GET.get("timetable"))
for stop in stop_sequences[r["route_id"]]: timetable = get_timetable(r, trips, stop_sequences)
times = [] except Route.DoesNotExist:
for t in trips[r["route_id"]]: print(f"Invalid request for Route with id {request.GET['timetable']}")
for st in StopTime.objects.filter(trip_id=t.trip_id): context = {"data": json.dumps({"stops": stops, "routes": routes, "timetable": timetable})}
times.append(st.departure_time)
sts[stop.stop_id] = times
timetable["stop_times"] = sts
print(timetable)
timetables[r["route_id"]] = timetable
context = {"data": json.dumps({"stops": stops, "routes": routes, "timetables": timetables})}
return render(request,"map.html", context) return render(request,"map.html", context)