def get_departure_data(self, relevant_stops, route_number, must_stop_at=None, direction=None): """ Fetch the JSON data from the TfL website, for a dictionary of relevant_stops (each a BusStop object) and a particular route_number, and returns a DepartureCollection containing Bus objects must_stop_at and direction are ignored; filtering by direction has already been done by process_individual_request() """ stop_directions = dict([(run, heading_to_direction(stop.heading)) for (run, stop) in relevant_stops.items()]) departures = DepartureCollection() for (run, stop) in relevant_stops.items(): tfl_url = self.urls.BUS_URL % stop.number bus_data = self.browser.fetch_json(tfl_url) departures[stop] = parse_bus_data(bus_data, route_number) if departures[stop]: logging.debug("Stop %s produced buses: %s", stop.get_clean_name(), ', '.join([str(bus) for bus in departures[stop]])) else: logging.debug("Stop %s produced no buses", stop.get_clean_name()) # If the number of runs is 3 or more, get rid of any without buses shown if len(departures) > 2: logging.debug("Number of runs is %s, removing any non-existent entries", len(departures)) for run in range(3, max(relevant_stops.keys()) + 1): if run in relevant_stops.keys() and not departures[relevant_stops[run]]: del departures[relevant_stops[run]] null_constructor = lambda stop: NullDeparture(stop_directions[stop.run]) departures.cleanup(null_constructor) return departures
def test_geo(self): """ Unit test for geo conversion methods """ # Test co-ordinate conversions on the location of St James's Park Station wgs84 = (51.4995893, -0.1342974) osgb36 = (51.4990781, -0.1326920) easting_northing = (529600, 179500) gridref = "TQ2960079500" self.assertEqual(convertWGS84toOSGB36(*wgs84)[:2], osgb36) self.assertEqual(LatLongToOSGrid(*osgb36), easting_northing) self.assertEqual(convertWGS84toOSEastingNorthing(*wgs84), easting_northing) self.assertEqual(gridrefNumToLet(*easting_northing), gridref) # Test heading_to_direction with a series of preset values for (heading, direction) in ((0, "North"), (90, "East"), (135, "SE"), (225, "SW"),): self.assertEqual(heading_to_direction(heading), direction)