def __init__(self, bus_stops, timetables, travel_requests): """ Initialize the TimetableUpdater and send a request to the Route Generator in order to identify the less time-consuming route which connects the provided bus_stops. :param bus_stops: [bus_stop_document] :param timetables: [timetable_document] :param travel_requests: [travel_request_document] :return: None """ self.bus_stops = bus_stops self.timetables = timetables self.travel_requests = travel_requests self.route_generator_response = get_route_between_multiple_bus_stops(bus_stops=bus_stops)
def __init__(self, bus_stops, timetables, travel_requests): """ Initialize the TimetableUpdater and send a request to the Route Generator in order to identify the less time-consuming route which connects the provided bus_stops. bus_stop_document: { '_id', 'osm_id', 'name', 'point': {'longitude', 'latitude'} } timetable_document: { '_id', 'line_id', 'timetable_entries': [{ 'starting_bus_stop': {'_id', 'osm_id', 'name', 'point': {'longitude', 'latitude'}}, 'ending_bus_stop': {'_id', 'osm_id', 'name', 'point': {'longitude', 'latitude'}}, 'departure_datetime', 'arrival_datetime', 'number_of_onboarding_passengers', 'number_of_deboarding_passengers', 'number_of_current_passengers', 'route': {'total_distance', 'total_time', 'node_osm_ids', 'points', 'edges', 'distances_from_starting_node', 'times_from_starting_node', 'distances_from_previous_node', 'times_from_previous_node'}}], 'travel_requests': [{ '_id', 'client_id', 'line_id', 'starting_bus_stop': {'_id', 'osm_id', 'name', 'point': {'longitude', 'latitude'}}, 'ending_bus_stop': {'_id', 'osm_id', 'name', 'point': {'longitude', 'latitude'}}, 'departure_datetime', 'arrival_datetime', 'starting_timetable_entry_index', 'ending_timetable_entry_index'}] } travel_request_document: { '_id', 'client_id', 'line_id', 'starting_bus_stop': {'_id', 'osm_id', 'name', 'point': {'longitude', 'latitude'}}, 'ending_bus_stop': {'_id', 'osm_id', 'name', 'point': {'longitude', 'latitude'}}, 'departure_datetime', 'arrival_datetime', 'starting_timetable_entry_index', 'ending_timetable_entry_index' } route_generator_response: [{ 'starting_bus_stop': {'_id', 'osm_id', 'name', 'point': {'longitude', 'latitude'}}, 'ending_bus_stop': {'_id', 'osm_id', 'name', 'point': {'longitude', 'latitude'}}, 'route': {'total_distance', 'total_time', 'node_osm_ids', 'points', 'edges', 'distances_from_starting_node', 'times_from_starting_node', 'distances_from_previous_node', 'times_from_previous_node'} }] :param bus_stops: [bus_stop_document] :param timetables: [timetable_document] :param travel_requests: [travel_request_document] :return: None """ self.bus_stops = bus_stops self.timetables = timetables self.travel_requests = travel_requests self.route_generator_response = get_route_between_multiple_bus_stops(bus_stops=bus_stops)
def test_get_route_between_multiple_bus_stops(bus_stops=None, bus_stop_names=None): """ bus_stop_document: {'_id', 'osm_id', 'name', 'point': {'longitude', 'latitude'}} :param bus_stops: [bus_stop_document] :param bus_stop_names: [string] """ log( module_name="route_generator_test", log_type="INFO", log_message="get_route_between_multiple_bus_stops: starting", ) start_time = time.time() # response = [{ # 'starting_bus_stop': {'_id', 'osm_id', 'name', 'point': {'longitude', 'latitude'}}, # 'ending_bus_stop': {'_id', 'osm_id', 'name', 'point': {'longitude', 'latitude'}}, # 'route': { # 'total_distance', 'total_time', 'node_osm_ids', 'points', 'edges', # 'distances_from_starting_node', 'times_from_starting_node', # 'distances_from_previous_node', 'times_from_previous_node' # } # }] response = get_route_between_multiple_bus_stops(bus_stops=bus_stops, bus_stop_names=bus_stop_names) for intermediate_response in response: starting_bus_stop = intermediate_response.get("starting_bus_stop") ending_bus_stop = intermediate_response.get("ending_bus_stop") intermediate_route = intermediate_response.get("route") if intermediate_route is not None: total_distance = intermediate_route.get("total_distance") total_time = intermediate_route.get("total_time") node_osm_ids = intermediate_route.get("node_osm_ids") points = intermediate_route.get("points") edges = intermediate_route.get("edges") distances_from_starting_node = intermediate_route.get("distances_from_starting_node") times_from_starting_node = intermediate_route.get("times_from_starting_node") distances_from_previous_node = intermediate_route.get("distances_from_previous_node") times_from_previous_node = intermediate_route.get("times_from_previous_node") output = ( "\nstarting_bus_stop: " + str(starting_bus_stop) + "\nending_bus_stop: " + str(ending_bus_stop) + "\ntotal_distance: " + str(total_distance) + "\ntotal_time: " + str(total_time) + "\nnode_osm_ids: " + str(node_osm_ids) + "\npoints: " + str(points) + "\nedges: " + str(edges) + "\ndistances_from_starting_node: " + str(distances_from_starting_node) + "\ntimes_from_starting_node: " + str(times_from_starting_node) + "\ndistances_from_previous_node: " + str(distances_from_previous_node) + "\ntimes_from_previous_node: " + str(times_from_previous_node) ) else: output = ( "\nstarting_bus_stop: " + str(starting_bus_stop) + "\nending_bus_stop: " + str(ending_bus_stop) + "\nroute: None" ) print output elapsed_time = time.time() - start_time time.sleep(0.1) log( module_name="route_generator_test", log_type="INFO", log_message="test_get_route_between_multiple_bus_stops: finished - elapsed_time = " + str(elapsed_time) + " sec", )
def test_get_route_between_multiple_bus_stops(bus_stops=None, bus_stop_names=None): """ :param bus_stops: [bus_stop_document] :param bus_stop_names: [string] """ log(module_name='route_generator_test', log_type='INFO', log_message='get_route_between_multiple_bus_stops: starting') start_time = time.time() route_distance = 0 route_traveling_time = 0 # response = [{ # 'starting_bus_stop': {'_id', 'osm_id', 'name', 'point': {'longitude', 'latitude'}}, # 'ending_bus_stop': {'_id', 'osm_id', 'name', 'point': {'longitude', 'latitude'}}, # 'route': { # 'total_distance', 'total_time', 'node_osm_ids', 'points', 'edges', # 'distances_from_starting_node', 'times_from_starting_node', # 'distances_from_previous_node', 'times_from_previous_node' # } # }] response = get_route_between_multiple_bus_stops( bus_stops=bus_stops, bus_stop_names=bus_stop_names ) for intermediate_response in response: starting_bus_stop = intermediate_response.get('starting_bus_stop') ending_bus_stop = intermediate_response.get('ending_bus_stop') intermediate_route = intermediate_response.get('route') if intermediate_route is not None: total_distance = intermediate_route.get('total_distance') route_distance += total_distance total_time = intermediate_route.get('total_time') route_traveling_time += total_time node_osm_ids = intermediate_route.get('node_osm_ids') points = intermediate_route.get('points') edges = intermediate_route.get('edges') distances_from_starting_node = intermediate_route.get('distances_from_starting_node') times_from_starting_node = intermediate_route.get('times_from_starting_node') distances_from_previous_node = intermediate_route.get('distances_from_previous_node') times_from_previous_node = intermediate_route.get('times_from_previous_node') output = '\nstarting_bus_stop: ' + str(starting_bus_stop) + \ '\nending_bus_stop: ' + str(ending_bus_stop) + \ '\ntotal_distance: ' + str(total_distance) + \ '\ntotal_time: ' + str(total_time) + \ '\nnode_osm_ids: ' + str(node_osm_ids) + \ '\npoints: ' + str(points) + \ '\nedges: ' + str(edges) + \ '\ndistances_from_starting_node: ' + str(distances_from_starting_node) + \ '\ntimes_from_starting_node: ' + str(times_from_starting_node) + \ '\ndistances_from_previous_node: ' + str(distances_from_previous_node) + \ '\ntimes_from_previous_node: ' + str(times_from_previous_node) else: output = '\nstarting_bus_stop: ' + str(starting_bus_stop) + \ '\nending_bus_stop: ' + str(ending_bus_stop) + \ '\nroute: None' print output route_average_speed = (route_distance / 1000) / (route_traveling_time / 3600) print '\nroute_distance: ' + str(route_distance / 1000) + \ ' - route_traveling_time: ' + str(route_traveling_time / 60) + \ ' - route_average_speed: ' + str(route_average_speed) elapsed_time = time.time() - start_time time.sleep(0.1) log(module_name='route_generator_test', log_type='INFO', log_message='test_get_route_between_multiple_bus_stops: finished - elapsed_time = ' + str(elapsed_time) + ' sec')