def retrieve(self, request, region, agency, pk): try: stop = Stop.objects.select_related('agency') \ .get(pk=Stop.create_id(Agency.create_id(region, agency), pk)) except Stop.DoesNotExist: raise Http404('No Route matches the given query.') agency = stop.agency arrivals = get_provider(stop.agency).arrivals(stop) # odd if we have a mixture of units, but we currently don't so... # sort the arrivals arrivals.sort(key=attrgetter('away')) # never return more than 15 arrivals, limit before the prefetch to # avoid extra work arrivals = arrivals[:15] prefetch_related_objects(arrivals, ['direction__route__directions']) routes = {} for arrival in arrivals: if arrival.direction: route = arrival.direction.route routes[route.id] = route self.object = StopAdapter(stop, arrivals=arrivals, routes=routes.values()) serializer = self.get_serializer(self.object) return Response(serializer.data)
def retrieve(self, request, region, agency, route, pk): try: stop = Stop.objects.select_related('agency', 'agency__region') \ .get(pk=Stop.create_id(Agency.create_id(region, agency), pk)) except Stop.DoesNotExist: raise Http404('No Route matches the given query.') agency = stop.agency route = get_object_or_404(Route, pk=Route.create_id(agency.id, route)) arrivals = get_provider(stop.agency).arrivals(stop, route) self.object = StopAdapter(stop, arrivals=arrivals, route=route) serializer = self.get_serializer(self.object) return Response(serializer.data)