--- a/busui/schedule_viewer.py +++ b/busui/schedule_viewer.py @@ -88,8 +88,11 @@ def StopToTuple(stop): """Return tuple as expected by javascript function addStopMarkerFromList""" return (stop.stop_id, stop.stop_name, float(stop.stop_lat), - float(stop.stop_lon), stop.location_type) - + float(stop.stop_lon), stop.location_type, stop.stop_code) +def StopZoneToTuple(stop): + """Return tuple as expected by javascript function addStopMarkerFromList""" + return (stop.stop_id, stop.stop_name, float(stop.stop_lat), + float(stop.stop_lon), stop.location_type, stop.stop_code, stop.zone_id) class ScheduleRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler): def do_GET(self): @@ -256,7 +259,12 @@ schedule = self.server.schedule result = [] for r in schedule.GetRouteList(): - result.append( (r.route_id, r.route_short_name, r.route_long_name) ) + servicep = None + for t in schedule.GetTripList(): + if t.route_id == r.route_id: + servicep = t.service_period + break + result.append( (r.route_id, r.route_short_name, r.route_long_name, servicep.service_id) ) result.sort(key = lambda x: x[1:3]) return result @@ -264,7 +272,17 @@ schedule = self.server.schedule route = schedule.GetRoute(params.get('route', None)) return [transitfeed.Route._FIELD_NAMES, route.GetFieldValuesTuple()] - + + def handle_json_GET_routetrips(self, params): + """ Get a trip for a route_id (preferablly the next one) """ + schedule = self.server.schedule + query = params.get('route_id', None).lower() + result = [] + for t in schedule.GetTripList(): + if t.route_id == query: + result.append ( (t.GetStartTime(), t.trip_id) ) + return sorted(result, key=lambda trip: trip[0]) + def handle_json_GET_triprows(self, params): """Return a list of rows from the feed file that are related to this trip.""" @@ -286,11 +304,11 @@ except KeyError: # if a non-existent trip is searched for, the return nothing return - time_stops = trip.GetTimeStops() + time_stops = trip.GetTimeInterpolatedStops() stops = [] times = [] - for arr,dep,stop in time_stops: - stops.append(StopToTuple(stop)) + for arr,ts,is_timingpoint in time_stops: + stops.append(StopToTuple(ts.stop)) times.append(arr) return [stops, times] @@ -351,7 +369,34 @@ query = params.get('q', None).lower() matches = [] for s in schedule.GetStopList(): - if s.stop_id.lower().find(query) != -1 or s.stop_name.lower().find(query) != -1: + if s.stop_name.lower().find(query) != -1 or s.stop_code.lower().find(query) != -1: + matches.append(StopToTuple(s)) + return matches + + def handle_json_GET_stopnamesearch(self, params): + schedule = self.server.schedule + query = params.get('q', None).lower() + matches = [] + for s in schedule.GetStopList(): + if s.stop_name.lower().find(query) != -1: + matches.append(StopToTuple(s)) + return matches + + def handle_json_GET_stopcodesearch(self, params): + schedule = self.server.schedule + query = params.get('q', None).lower() + matches = [] + for s in schedule.GetStopList(): + if s.stop_code.lower().find(query) != -1: + matches.append(StopToTuple(s)) + return matches + + def handle_json_GET_stopzonesearch(self, params): + schedule = self.server.schedule + query = params.get('q', None).lower() + matches = [] + for s in schedule.GetStopList(): + if s.zone_id != None and s.zone_id.lower().find(query) != -1: matches.append(StopToTuple(s)) return matches @@ -369,13 +414,13 @@ schedule = self.server.schedule stop = schedule.GetStop(params.get('stop', None)) time = int(params.get('time', 0)) + service_period = params.get('service_period', None) time_trips = stop.GetStopTimeTrips(schedule) time_trips.sort() # OPT: use bisect.insort to make this O(N*ln(N)) -> O(N) # Keep the first 15 after param 'time'. # Need make a tuple to find correct bisect point time_trips = time_trips[bisect.bisect_left(time_trips, (time, 0)):] time_trips = time_trips[:15] - # TODO: combine times for a route to show next 2 departure times result = [] for time, (trip, index), tp in time_trips: headsign = None @@ -395,10 +440,11 @@ if len(trip_name): trip_name += " - " trip_name += route.route_long_name - if headsign: - trip_name += " (Direction: %s)" % headsign - - result.append((time, (trip.trip_id, trip_name, trip.service_id), tp)) + # comment out directions because we already have them in the long name + #if headsign: + # trip_name += " (Direction: %s)" % headsign + if service_period == None or trip.service_id == service_period: + result.append((time, (trip.trip_id, trip_name, trip.service_id), tp)) return result def handle_GET_ttablegraph(self,params):