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)
Beispiel #2
0
    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')