def stops(self, route): directions = defaultdict(list) trip_names = defaultdict(list) rid = route.get_id() directory = join('data', route.agency.id) trip_stops = self._trip_stops(directory) direction_stops = defaultdict(list) trips = filter(lambda c: rid == c['route_id'], self._trips(directory)) for i, t in enumerate(trips): tid = t['direction_id'] direction_stops[tid].append(trip_stops[t['trip_id']]) trip_names[tid].append(t['trip_headsign']) all_stops = self._stops(directory) directions = [] stops = {} for d, ts in direction_stops.items(): did = Direction.create_id(route.id, str(d)) # TODO: pick the most common name? direction = Direction(route=route, id=did, name=trip_names[d][0]) # pick the largest set of stops, hopefully that'll cover everything stop_ids = [] for sid in max(ts, key=len): stop = all_stops[sid] sid = Stop.create_id(route.agency.id, sid) stop_type = stop.get('location_type', None) if stop_type: stop_type = stop_types[int(stop_type)] stop = Stop(agency=route.agency, id=sid, name=stop['stop_name'], lat=stop['stop_lat'], lon=stop['stop_lon'], type=stop_type, code=stop.get('code', None)) stop_ids.append(stop.id) stops[stop.id] = stop direction.stop_ids = stop_ids directions.append(direction) return (directions, stops)