def test_get_waypoints_between_two_bus_stops( starting_bus_stop=None, ending_bus_stop=None, starting_bus_stop_name=None, ending_bus_stop_name=None ): """ bus_stop_document: {'_id', 'osm_id', 'name', 'point': {'longitude', 'latitude'}} :param starting_bus_stop: bus_stop_document :param ending_bus_stop: bus_stop_document :param starting_bus_stop_name: string :param ending_bus_stop_name: string """ log( module_name="route_generator_test", log_type="INFO", log_message="test_get_waypoints_between_two_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'}}, # 'waypoints': [[{ # '_id', 'starting_node': {'osm_id', 'point': {'longitude', 'latitude'}}, # 'ending_node': {'osm_id', 'point': {'longitude', 'latitude'}}, # 'max_speed', 'road_type', 'way_id', 'traffic_density' # }]] # } response = get_waypoints_between_two_bus_stops( starting_bus_stop=starting_bus_stop, ending_bus_stop=ending_bus_stop, starting_bus_stop_name=starting_bus_stop_name, ending_bus_stop_name=ending_bus_stop_name, ) starting_bus_stop = response.get("starting_bus_stop") ending_bus_stop = response.get("ending_bus_stop") waypoints = response.get("waypoints") output = "\nstarting_bus_stop: " + str(starting_bus_stop) + "\nending_bus_stop: " + str(ending_bus_stop) print output for separate_waypoints in waypoints: print "waypoints: " + str(separate_waypoints) elapsed_time = time.time() - start_time time.sleep(0.1) log( module_name="route_generator_test", log_type="INFO", log_message="test_get_waypoints_between_two_bus_stops: finished - elapsed_time = " + str(elapsed_time) + " sec", )
def test_get_waypoints_between_two_bus_stops(starting_bus_stop=None, ending_bus_stop=None, starting_bus_stop_name=None, ending_bus_stop_name=None): """ :param starting_bus_stop: bus_stop_document :param ending_bus_stop: bus_stop_document :param starting_bus_stop_name: string :param ending_bus_stop_name: string """ log(module_name='route_generator_test', log_type='INFO', log_message='test_get_waypoints_between_two_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'}}, # 'waypoints': [[{ # '_id', 'starting_node': {'osm_id', 'point': {'longitude', 'latitude'}}, # 'ending_node': {'osm_id', 'point': {'longitude', 'latitude'}}, # 'max_speed', 'road_type', 'way_id', 'traffic_density' # }]] # } response = get_waypoints_between_two_bus_stops( starting_bus_stop=starting_bus_stop, ending_bus_stop=ending_bus_stop, starting_bus_stop_name=starting_bus_stop_name, ending_bus_stop_name=ending_bus_stop_name ) starting_bus_stop = response.get('starting_bus_stop') ending_bus_stop = response.get('ending_bus_stop') waypoints = response.get('waypoints') output = '\nstarting_bus_stop: ' + str(starting_bus_stop) + \ '\nending_bus_stop: ' + str(ending_bus_stop) print output for separate_waypoints in waypoints: print 'waypoints: ' + str(separate_waypoints) elapsed_time = time.time() - start_time time.sleep(0.1) log(module_name='route_generator_test', log_type='INFO', log_message='test_get_waypoints_between_two_bus_stops: finished - elapsed_time = ' + str(elapsed_time) + ' sec')
def generate_bus_line(self, bus_stop_names, bus_line_id=None): """ Generate a bus_line, consisted of a bus_line_id and a list of bus_stops, and store it to the corresponding collection of the System Database. Moreover, identify all the possible waypoints between the bus_stops of the bus_line, and populate the BusStopWaypoints collection. :param bus_stop_names: [string] :param bus_line_id: int :return: None """ # 1: The inputs: bus_line_id and bus_stop_names are provided to the function, so as as a bus_line # with the corresponding bus_line_id and bus_stops to be generated. # # 2: The Look Ahead connects to the System Database and retrieves the bus_stops which correspond to # the provided bus_stop_names. The function returns None and the bus_line is not generated, # in case there is a bus_stop_name which does not correspond to a stored bus_stop. # if bus_line_id is None: maximum_bus_line_id = self.mongodb_database_connection.get_maximum_or_minimum(collection='bus_line') bus_line_id = maximum_bus_line_id + 1 bus_stops = [] for bus_stop_name in bus_stop_names: bus_stop_document = self.mongodb_database_connection.find_bus_stop_document(name=bus_stop_name) if bus_stop_document is None: log_message = 'find_bus_stop_document (mongodb_database) - name:', bus_stop_name, '- result: None' log(module_name='look_ahead_handler', log_type='DEBUG', log_message=log_message) return None else: bus_stops.append(bus_stop_document) # 3: The intermediate waypoints of the bus_routes, which are generated while combining starting and # ending bus_stops of the bus_line, should be stored as bus_stop_waypoints_documents at the System Database. # The Look Ahead checks the existing bus_stop_waypoints_documents and communicates with the Route Generator # in order to identify the waypoints of the bus_routes which are not already stored. The newly generated # bus_stop_waypoints_documents are getting stored to the corresponding collection of the System Database. # The function returns None and the bus_line is not generated, in case the Route Generator can not identify # a possible route in order to connect the bus_stops of the bus_line. # number_of_bus_stops = len(bus_stops) for i in range(0, number_of_bus_stops - 1): starting_bus_stop = bus_stops[i] ending_bus_stop = bus_stops[i + 1] bus_stop_waypoints_document = self.mongodb_database_connection.find_bus_stop_waypoints_document( starting_bus_stop=starting_bus_stop, ending_bus_stop=ending_bus_stop ) if bus_stop_waypoints_document is None: route_generator_response = get_waypoints_between_two_bus_stops( starting_bus_stop=starting_bus_stop, ending_bus_stop=ending_bus_stop ) if route_generator_response is None: log(module_name='look_ahead_handler', log_type='DEBUG', log_message='get_waypoints_between_two_bus_stops (route_generator): None') return None else: waypoints = route_generator_response.get('waypoints') if len(waypoints) == 0: log(module_name='look_ahead_handler', log_type='DEBUG', log_message='get_waypoints_between_two_bus_stops (route_generator): None') return None lists_of_edge_object_ids = [] for list_of_edges in waypoints: list_of_edge_object_ids = [] for edge in list_of_edges: edge_object_id = edge.get('_id') list_of_edge_object_ids.append(edge_object_id) lists_of_edge_object_ids.append(list_of_edge_object_ids) # waypoints: [[edge_object_id]] # waypoints = lists_of_edge_object_ids self.mongodb_database_connection.insert_bus_stop_waypoints_document( starting_bus_stop=starting_bus_stop, ending_bus_stop=ending_bus_stop, waypoints=waypoints ) # 4: The Look Ahead stores the newly generated bus_line_document, which is consisted of the bus_line_id # and the list of bus_stops, to the corresponding collection of the System Database. # In case there is an already existing bus_line_document, with the same bus_line_id, # then the list of bus_stops gets updated. # bus_line_document = {'bus_line_id': bus_line_id, 'bus_stops': bus_stops} self.mongodb_database_connection.insert_bus_line_document(bus_line_document=bus_line_document) log(module_name='look_ahead_handler', log_type='DEBUG', log_message='insert_bus_line_document (mongodb_database): ok')
def generate_bus_line(self, bus_stop_names, bus_line_id=None): """ Generate a bus_line, consisted of a bus_line_id and a list of bus_stops, and store it to the corresponding collection of the System Database. Moreover, identify all the possible waypoints between the bus_stops of the bus_line, and populate the BusStopWaypoints collection. :param bus_stop_names: [string] :param bus_line_id: int :return: None """ # 1: The inputs: bus_line_id and bus_stop_names are provided to the function, so as as a bus_line # with the corresponding bus_line_id and bus_stops to be generated. # # 2: The Look Ahead connects to the System Database and retrieves the bus_stops which correspond to # the provided bus_stop_names. The function returns None and the bus_line is not generated, # in case there is a bus_stop_name which does not correspond to a stored bus_stop. # if bus_line_id is None: maximum_bus_line_id = self.mongodb_database_connection.get_maximum_or_minimum( collection='bus_line') bus_line_id = maximum_bus_line_id + 1 bus_stops = [] for bus_stop_name in bus_stop_names: bus_stop_document = self.mongodb_database_connection.find_bus_stop_document( name=bus_stop_name) if bus_stop_document is None: log_message = 'find_bus_stop_document (mongodb_database) - name:', bus_stop_name, '- result: None' log(module_name='look_ahead_handler', log_type='DEBUG', log_message=log_message) return None else: bus_stops.append(bus_stop_document) # 3: The intermediate waypoints of the bus_routes, which are generated while combining starting and # ending bus_stops of the bus_line, should be stored as bus_stop_waypoints_documents at the System Database. # The Look Ahead checks the existing bus_stop_waypoints_documents and communicates with the Route Generator # in order to identify the waypoints of the bus_routes which are not already stored. The newly generated # bus_stop_waypoints_documents are getting stored to the corresponding collection of the System Database. # The function returns None and the bus_line is not generated, in case the Route Generator can not identify # a possible route in order to connect the bus_stops of the bus_line. # number_of_bus_stops = len(bus_stops) for i in range(0, number_of_bus_stops - 1): starting_bus_stop = bus_stops[i] ending_bus_stop = bus_stops[i + 1] bus_stop_waypoints_document = self.mongodb_database_connection.find_bus_stop_waypoints_document( starting_bus_stop=starting_bus_stop, ending_bus_stop=ending_bus_stop) if bus_stop_waypoints_document is None: route_generator_response = get_waypoints_between_two_bus_stops( starting_bus_stop=starting_bus_stop, ending_bus_stop=ending_bus_stop) if route_generator_response is None: log(module_name='look_ahead_handler', log_type='DEBUG', log_message= 'get_waypoints_between_two_bus_stops (route_generator): None' ) return None else: waypoints = route_generator_response.get('waypoints') if len(waypoints) == 0: log(module_name='look_ahead_handler', log_type='DEBUG', log_message= 'get_waypoints_between_two_bus_stops (route_generator): None' ) return None lists_of_edge_object_ids = [] for list_of_edges in waypoints: list_of_edge_object_ids = [] for edge in list_of_edges: edge_object_id = edge.get('_id') list_of_edge_object_ids.append(edge_object_id) lists_of_edge_object_ids.append( list_of_edge_object_ids) # waypoints: [[edge_object_id]] # waypoints = lists_of_edge_object_ids self.mongodb_database_connection.insert_bus_stop_waypoints_document( starting_bus_stop=starting_bus_stop, ending_bus_stop=ending_bus_stop, waypoints=waypoints) # 4: The Look Ahead stores the newly generated bus_line_document, which is consisted of the bus_line_id # and the list of bus_stops, to the corresponding collection of the System Database. # In case there is an already existing bus_line_document, with the same bus_line_id, # then the list of bus_stops gets updated. # bus_line_document = { 'bus_line_id': bus_line_id, 'bus_stops': bus_stops } self.mongodb_database_connection.insert_bus_line_document( bus_line_document=bus_line_document) log(module_name='look_ahead_handler', log_type='DEBUG', log_message='insert_bus_line_document (mongodb_database): ok')