Ejemplo n.º 1
0
def check_db_ire_JOHN_trip_removal():
    with app.app_context():
        assert len(RealTimeUpdate.query.all()) >= 1
        assert len(TripUpdate.query.all()) >= 2
        assert len(StopTimeUpdate.query.all()) >= 0
        db_trip1_removal = TripUpdate.find_by_dated_vj('trip:OCETGV-87686006-87751008-2:25768',
                                                      datetime.date(2015, 9, 21))
        assert db_trip1_removal

        assert db_trip1_removal.vj.navitia_trip_id == 'trip:OCETGV-87686006-87751008-2:25768'
        assert db_trip1_removal.vj.circulation_date == datetime.date(2015, 9, 21)
        assert db_trip1_removal.vj_id == db_trip1_removal.vj.id
        assert db_trip1_removal.status == 'delete'
        # full trip removal : no stop_time to precise
        assert len(db_trip1_removal.stop_time_updates) == 0


        db_trip2_removal = TripUpdate.find_by_dated_vj('trip:OCETrainTER-87212027-85000109-3:11859',
                                                      datetime.date(2015, 9, 21))
        assert db_trip2_removal

        assert db_trip2_removal.vj.navitia_trip_id == 'trip:OCETrainTER-87212027-85000109-3:11859'
        assert db_trip2_removal.vj.circulation_date == datetime.date(2015, 9, 21)
        assert db_trip2_removal.vj_id == db_trip2_removal.vj.id
        assert db_trip2_removal.status == 'delete'
        # full trip removal : no stop_time to precise
        assert len(db_trip2_removal.stop_time_updates) == 0
Ejemplo n.º 2
0
def check_db_ire_JOHN_trip_removal():
    with app.app_context():
        assert len(RealTimeUpdate.query.all()) >= 1
        assert len(TripUpdate.query.all()) >= 2
        assert len(StopTimeUpdate.query.all()) >= 0
        db_trip1_removal = TripUpdate.find_by_dated_vj('trip:OCETGV-87686006-87751008-2:25768',
                                                      datetime.date(2015, 9, 21))
        assert db_trip1_removal

        assert db_trip1_removal.vj.navitia_trip_id == 'trip:OCETGV-87686006-87751008-2:25768'
        assert db_trip1_removal.vj.circulation_date == datetime.date(2015, 9, 21)
        assert db_trip1_removal.vj_id == db_trip1_removal.vj.id
        assert db_trip1_removal.status == 'delete'
        # full trip removal : no stop_time to precise
        assert len(db_trip1_removal.stop_time_updates) == 0


        db_trip2_removal = TripUpdate.find_by_dated_vj('trip:OCETrainTER-87212027-85000109-3:11859',
                                                      datetime.date(2015, 9, 21))
        assert db_trip2_removal

        assert db_trip2_removal.vj.navitia_trip_id == 'trip:OCETrainTER-87212027-85000109-3:11859'
        assert db_trip2_removal.vj.circulation_date == datetime.date(2015, 9, 21)
        assert db_trip2_removal.vj_id == db_trip2_removal.vj.id
        assert db_trip2_removal.status == 'delete'
        # full trip removal : no stop_time to precise
        assert len(db_trip2_removal.stop_time_updates) == 0
Ejemplo n.º 3
0
def check_db_john_trip_removal():
    with app.app_context():
        assert len(RealTimeUpdate.query.all()) >= 1
        assert len(TripUpdate.query.all()) >= 2
        assert len(StopTimeUpdate.query.all()) >= 0
        db_trip1_removal = TripUpdate.find_by_dated_vj(
            'trip:OCETGV-87686006-87751008-2:25768',
            datetime(2015, 9, 21, 10, 37, tzinfo=utc))
        assert db_trip1_removal

        assert db_trip1_removal.vj.navitia_trip_id == 'trip:OCETGV-87686006-87751008-2:25768'
        assert db_trip1_removal.vj.get_start_timestamp() == datetime(
            2015, 9, 21, 10, 37, tzinfo=utc)
        assert db_trip1_removal.vj_id == db_trip1_removal.vj.id
        assert db_trip1_removal.status == 'delete'
        # full trip removal : no stop_time to precise
        assert len(db_trip1_removal.stop_time_updates) == 0

        db_trip2_removal = TripUpdate.find_by_dated_vj(
            'trip:OCETrainTER-87212027-85000109-3:11859',
            datetime(2015, 9, 21, 15, 21, tzinfo=utc))
        assert db_trip2_removal

        assert db_trip2_removal.vj.navitia_trip_id == 'trip:OCETrainTER-87212027-85000109-3:11859'
        assert db_trip2_removal.vj.get_start_timestamp() == datetime(
            2015, 9, 21, 15, 21, tzinfo=utc)
        assert db_trip2_removal.vj_id == db_trip2_removal.vj.id
        assert db_trip2_removal.status == 'delete'
        # full trip removal : no stop_time to precise
        assert len(db_trip2_removal.stop_time_updates) == 0
Ejemplo n.º 4
0
def check_db_john_trip_removal():
    with app.app_context():
        assert len(RealTimeUpdate.query.all()) >= 1
        assert len(TripUpdate.query.all()) >= 2
        assert len(StopTimeUpdate.query.all()) >= 0
        db_trip1_removal = TripUpdate.find_by_dated_vj(
            "trip:OCETGV-87686006-87751008-2:25768", datetime(2015, 9, 21, 13, 37)
        )
        assert db_trip1_removal

        assert db_trip1_removal.vj.navitia_trip_id == "trip:OCETGV-87686006-87751008-2:25768"
        assert db_trip1_removal.vj.start_timestamp == datetime(2015, 9, 21, 13, 37)
        assert db_trip1_removal.vj_id == db_trip1_removal.vj.id
        assert db_trip1_removal.status == "delete"
        assert db_trip1_removal.effect == "NO_SERVICE"
        # full trip removal : no stop_time to precise
        assert len(db_trip1_removal.stop_time_updates) == 0

        db_trip2_removal = TripUpdate.find_by_dated_vj(
            "trip:OCETrainTER-87212027-85000109-3:11859", datetime(2015, 9, 21, 15, 21)
        )
        assert db_trip2_removal

        assert db_trip2_removal.vj.navitia_trip_id == "trip:OCETrainTER-87212027-85000109-3:11859"
        assert db_trip2_removal.vj.start_timestamp == datetime(2015, 9, 21, 15, 21)
        assert db_trip2_removal.vj_id == db_trip2_removal.vj.id
        assert db_trip2_removal.status == "delete"
        assert db_trip2_removal.effect == "NO_SERVICE"
        # full trip removal : no stop_time to precise
        assert len(db_trip2_removal.stop_time_updates) == 0
Ejemplo n.º 5
0
def test_find_by_vj(setup_database):
    with app.app_context():
        assert TripUpdate.find_by_dated_vj("vehicle_journey:1", datetime.datetime(2015, 9, 9, 8, 0)) is None
        row = TripUpdate.find_by_dated_vj("vehicle_journey:1", datetime.datetime(2015, 9, 8, 8, 0))
        assert row is not None
        assert row.vj_id == "70866ce8-0638-4fa1-8556-1ddfa22d09d3"

        row = TripUpdate.find_by_dated_vj("vehicle_journey:2", datetime.datetime(2015, 9, 8, 8, 0))
        assert row is not None
        assert row.vj_id == "70866ce8-0638-4fa1-8556-1ddfa22d09d4"
Ejemplo n.º 6
0
def test_find_by_vj(setup_database):
    with app.app_context():
        assert TripUpdate.find_by_dated_vj('vehicle_journey:1', datetime.date(2015, 9, 9)) is None
        row = TripUpdate.find_by_dated_vj('vehicle_journey:1', datetime.date(2015, 9, 8))
        assert row is not None
        assert row.vj_id == '70866ce8-0638-4fa1-8556-1ddfa22d09d3'

        row = TripUpdate.find_by_dated_vj('vehicle_journey:2', datetime.date(2015, 9, 8))
        assert row is not None
        assert row.vj_id == '70866ce8-0638-4fa1-8556-1ddfa22d09d4'
Ejemplo n.º 7
0
def check_db_ire_96231_delayed(motif_externe_is_null=False):
    with app.app_context():
        assert len(RealTimeUpdate.query.all()) >= 1
        assert len(TripUpdate.query.all()) >= 1
        assert len(StopTimeUpdate.query.all()) >= 6
        db_trip_delayed = TripUpdate.find_by_dated_vj(
            'trip:OCETrainTER-87212027-85000109-3:11859',
            datetime.datetime(2015, 9, 21, 15, 21, tzinfo=utc))
        assert db_trip_delayed

        assert db_trip_delayed.vj.navitia_trip_id == 'trip:OCETrainTER-87212027-85000109-3:11859'
        assert db_trip_delayed.vj.get_start_timestamp() == datetime.datetime(
            2015, 9, 21, 15, 21, tzinfo=utc)
        assert db_trip_delayed.vj_id == db_trip_delayed.vj.id
        assert db_trip_delayed.status == 'update'
        # 6 stop times must have been created
        assert len(db_trip_delayed.stop_time_updates) == 6

        # the first stop (in Strasbourg) is not in the IRE, only on navitia's base schedule
        # no delay then, only base schedule
        # Navitia's time are in local, so departure 17h21 in paris is 15h21 in UTC
        first_st = db_trip_delayed.stop_time_updates[0]
        assert first_st.stop_id == 'stop_point:OCE:SP:TrainTER-87212027'
        assert first_st.arrival == datetime.datetime(2015, 9, 21, 15, 21)
        assert first_st.arrival_status == 'none'
        assert first_st.arrival_delay == timedelta(0)
        assert first_st.departure == datetime.datetime(2015, 9, 21, 15, 21)
        assert first_st.departure_delay == timedelta(0)
        assert first_st.departure_status == 'none'
        assert first_st.message is None

        second_st = db_trip_delayed.stop_time_updates[1]
        assert second_st.stop_id == 'stop_point:OCE:SP:TrainTER-87214056'
        assert second_st.arrival == datetime.datetime(2015, 9, 21, 15, 38)
        assert second_st.arrival_status == 'none'
        assert second_st.arrival_delay == timedelta(0)
        assert second_st.departure == datetime.datetime(2015, 9, 21, 15, 55)
        assert second_st.departure_delay == timedelta(minutes=15)
        assert second_st.departure_status == 'update'
        if motif_externe_is_null:
            assert second_st.message is None
        else:
            assert second_st.message == 'Affluence exceptionnelle de voyageurs'

        # last stop is gare de Basel-SBB, delay's only at the arrival
        last_st = db_trip_delayed.stop_time_updates[-1]
        assert last_st.stop_id == 'stop_point:OCE:SP:TrainTER-85000109'
        assert last_st.arrival == datetime.datetime(2015, 9, 21, 16, 54)
        assert last_st.arrival_status == 'update'
        assert last_st.arrival_delay == timedelta(minutes=15)
        #The departure is consistent with arrival
        assert last_st.departure == datetime.datetime(2015, 9, 21, 16, 54)
        assert last_st.departure_delay == timedelta(minutes=15)
        assert last_st.departure_status == 'none'
        if motif_externe_is_null:
            assert second_st.message is None
        else:
            assert second_st.message == 'Affluence exceptionnelle de voyageurs'

        assert db_trip_delayed.contributor == 'realtime.ire'
Ejemplo n.º 8
0
def check_db_ire_96231_normal():
    with app.app_context():
        assert len(RealTimeUpdate.query.all()) >= 1
        assert len(TripUpdate.query.all()) >= 1
        assert len(StopTimeUpdate.query.all()) >= 6
        db_trip_delayed = TripUpdate.find_by_dated_vj(
            'trip:OCETrainTER-87212027-85000109-3:11859',
            datetime.datetime(2015, 9, 21, 15, 21, tzinfo=utc))
        assert db_trip_delayed

        assert db_trip_delayed.vj.navitia_trip_id == 'trip:OCETrainTER-87212027-85000109-3:11859'
        assert db_trip_delayed.vj.get_start_timestamp() == datetime.datetime(
            2015, 9, 21, 15, 21, tzinfo=utc)
        assert db_trip_delayed.vj_id == db_trip_delayed.vj.id
        assert db_trip_delayed.status == 'update'
        # 6 stop times must have been created
        assert len(db_trip_delayed.stop_time_updates) == 6

        # the first stop (in Strasbourg) is not in the IRE, only on navitia's base schedule
        # no delay then, only base schedule
        # Navitia's time are in local, so departure 17h21 in paris is 15h21 in UTC
        first_st = db_trip_delayed.stop_time_updates[0]
        assert first_st.stop_id == 'stop_point:OCE:SP:TrainTER-87212027'
        assert first_st.arrival == datetime.datetime(2015, 9, 21, 15, 21)
        assert first_st.arrival_status == 'none'
        assert first_st.arrival_delay == timedelta(0)
        assert first_st.departure == datetime.datetime(2015, 9, 21, 15, 21)
        assert first_st.departure_delay == timedelta(0)
        assert first_st.departure_status == 'none'
        assert first_st.message is None

        #the departure time has been updated with a delay at 0
        second_st = db_trip_delayed.stop_time_updates[1]
        assert second_st.stop_id == 'stop_point:OCE:SP:TrainTER-87214056'
        assert second_st.arrival == datetime.datetime(2015, 9, 21, 15, 38)
        assert second_st.arrival_status == 'none'
        assert second_st.arrival_delay == timedelta(0)
        assert second_st.departure == datetime.datetime(2015, 9, 21, 15, 40)
        assert second_st.departure_delay == timedelta(minutes=0)
        assert second_st.departure_status == 'update'
        assert second_st.message == 'Affluence exceptionnelle de voyageurs'

        # last stop is gare de Basel-SBB, the arrival is also updated with a delay at 0
        last_st = db_trip_delayed.stop_time_updates[-1]
        assert last_st.stop_id == 'stop_point:OCE:SP:TrainTER-85000109'
        assert last_st.arrival == datetime.datetime(2015, 9, 21, 16, 39)
        assert last_st.arrival_status == 'update'
        assert last_st.arrival_delay == timedelta(minutes=0)
        #The departure should be the same has the theroric one
        #except that it's not the case, we have messed with it when the vj was delayed, but we didn't put it back
        #like it was when the train catch up is delay
        try:
            assert last_st.departure == datetime.datetime(2015, 9, 21, 16, 39)
            assert last_st.departure_delay == timedelta(minutes=0)
            assert last_st.departure_status == 'none'
            assert last_st.message == 'Affluence exceptionnelle de voyageurs'
        except AssertionError:
            pass  # xfail: we don't change back the departure :(

        assert db_trip_delayed.contributor == 'realtime.ire'
Ejemplo n.º 9
0
def handle(real_time_update, trip_updates):
    """
    receive a RealTimeUpdate with at least one TripUpdate filled with the data received
    by the connector. each TripUpdate is associated with the VehicleJourney returned by jormugandr
    """
    if not real_time_update:
        raise TypeError()

    for trip_update in trip_updates:
        #find if there already a row in db
        old = TripUpdate.find_by_dated_vj(trip_update.vj.navitia_id, trip_update.vj.circulation_date)
        #merge the theoric, the current realtime, and the new relatime
        current_trip_update = merge(trip_update, old)

        # we have to link the current_vj_update with the new real_time_update
        # this link is done quite late to avoid too soon persistence of trip_update by sqlalchemy
        current_trip_update.real_time_updates.append(real_time_update)

    persist(real_time_update)

    feed = convert_to_gtfsrt([real_time_update])

    publish(feed, real_time_update)

    return real_time_update
Ejemplo n.º 10
0
def handle(real_time_update, trip_updates, contributor):
    """
    receive a RealTimeUpdate with at least one TripUpdate filled with the data received
    by the connector. each TripUpdate is associated with the VehicleJourney returned by jormugandr
    """
    if not real_time_update:
        raise TypeError()

    for trip_update in trip_updates:
        # find if there already a row in db
        old = TripUpdate.find_by_dated_vj(trip_update.vj.navitia_trip_id, trip_update.vj.circulation_date)
        # merge the theoric, the current realtime, and the new realtime
        current_trip_update = merge(trip_update.vj.navitia_vj, old, trip_update)

        # manage and adjust consistency if possible
        if manage_consistency(current_trip_update):
            # we have to link the current_vj_update with the new real_time_update
            # this link is done quite late to avoid too soon persistence of trip_update by sqlalchemy
            current_trip_update.real_time_updates.append(real_time_update)

    persist(real_time_update)

    feed = convert_to_gtfsrt(real_time_update.trip_updates)

    publish(feed, contributor)

    return real_time_update
Ejemplo n.º 11
0
def check_db_840427_partial_removal(contributor=None):
    with app.app_context():
        db_trip_partial_removed = TripUpdate.find_by_dated_vj(
            'OCE:SN840427F03001', datetime(2017, 3, 18, 13, 5, tzinfo=utc))
        assert db_trip_partial_removed

        assert db_trip_partial_removed.vj.navitia_trip_id == 'OCE:SN840427F03001'
        assert db_trip_partial_removed.vj.get_start_timestamp() == datetime(
            2017, 3, 18, 13, 5, tzinfo=utc)
        assert db_trip_partial_removed.vj_id == db_trip_partial_removed.vj.id
        assert db_trip_partial_removed.status == 'update'
        assert db_trip_partial_removed.effect == 'REDUCED_SERVICE'

        # 7 stop times must have been created
        assert len(db_trip_partial_removed.stop_time_updates) == 7

        # the first stop have not been changed
        first_st = db_trip_partial_removed.stop_time_updates[0]
        assert first_st.stop_id == 'stop_point:OCE:SP:TrainTER-87713040'
        assert first_st.arrival_status == 'none'
        assert first_st.departure_status == 'none'
        assert first_st.message is None

        for s in db_trip_partial_removed.stop_time_updates[0:3]:
            assert s.arrival_status == 'none'
            assert s.departure_status == 'none'
            assert s.message is None

        # the stops Chaumont, Bar-sur-Aube, Vendeuvre and Troyes should have been marked as deleted
        # (even if Chaumont and Vendeuvre were in a 'PRDebut'/'PRFin' tag
        ch_st = db_trip_partial_removed.stop_time_updates[3]
        assert ch_st.stop_id == 'stop_point:OCE:SP:TrainTER-87142000'  # Chaumont
        assert ch_st.arrival_status == 'none'  # the train still arrives in this stop
        assert ch_st.departure_status == 'delete'
        assert ch_st.message == u"Défaut d'alimentation électrique"

        bar_st = db_trip_partial_removed.stop_time_updates[4]
        assert bar_st.stop_id == 'stop_point:OCE:SP:TrainTER-87118299'  # Bar-sur-Aube
        assert bar_st.arrival_status == 'delete'
        assert bar_st.departure_status == 'delete'
        assert bar_st.message == u"Défaut d'alimentation électrique"

        ven_st = db_trip_partial_removed.stop_time_updates[5]
        assert ven_st.stop_id == 'stop_point:OCE:SP:TrainTER-87118257'  # Vendeuvre
        assert ven_st.arrival_status == 'delete'
        assert ven_st.departure_status == 'delete'
        assert ven_st.message == u"Défaut d'alimentation électrique"

        tro_st = db_trip_partial_removed.stop_time_updates[6]
        assert tro_st.stop_id == 'stop_point:OCE:SP:TrainTER-87118000'  # Troyes
        assert tro_st.arrival_status == 'delete'
        assert tro_st.departure_status == 'none'  # the train still does not leave from this stop
        assert tro_st.message == u"Défaut d'alimentation électrique"

        assert db_trip_partial_removed.contributor == contributor
Ejemplo n.º 12
0
def check_db_ire_96231_delayed():
    with app.app_context():
        assert len(RealTimeUpdate.query.all()) >= 1
        assert len(TripUpdate.query.all()) >= 1
        assert len(StopTimeUpdate.query.all()) >= 6
        db_trip_delayed = TripUpdate.find_by_dated_vj('trip:OCETrainTER-87212027-85000109-3:11859',
                                                      datetime.date(2015, 9, 21))
        assert db_trip_delayed

        assert db_trip_delayed.vj.navitia_trip_id == 'trip:OCETrainTER-87212027-85000109-3:11859'
        assert db_trip_delayed.vj.circulation_date == datetime.date(2015, 9, 21)
        assert db_trip_delayed.vj_id == db_trip_delayed.vj.id
        assert db_trip_delayed.status == 'update'
        # 6 stop times must have been created
        assert len(db_trip_delayed.stop_time_updates) == 6

        # the first stop (in Strasbourg) is not in the IRE, only on navitia's base schedule
        # no delay then, only base schedule
        # Navitia's time are in local, so departure 17h21 in paris is 15h21 in UTC
        first_st = db_trip_delayed.stop_time_updates[0]
        assert first_st.stop_id == 'stop_point:OCE:SP:TrainTER-87212027'
        assert first_st.arrival == datetime.datetime(2015, 9, 21, 15, 21)
        assert first_st.arrival_status == 'none'
        assert first_st.arrival_delay == timedelta(0)
        assert first_st.departure == datetime.datetime(2015, 9, 21, 15, 21)
        assert first_st.departure_delay == timedelta(0)
        assert first_st.departure_status == 'none'
        assert first_st.message is None

        second_st = db_trip_delayed.stop_time_updates[1]
        assert second_st.stop_id == 'stop_point:OCE:SP:TrainTER-87214056'
        assert second_st.arrival == datetime.datetime(2015, 9, 21, 15, 38)
        assert second_st.arrival_status == 'none'
        assert second_st.arrival_delay == timedelta(0)
        assert second_st.departure == datetime.datetime(2015, 9, 21, 15, 55)
        assert second_st.departure_delay == timedelta(minutes=15)
        assert second_st.departure_status == 'update'
        assert second_st.message == 'Affluence exceptionnelle de voyageurs'

        # last stop is gare de Basel-SBB, delay's only at the arrival
        last_st = db_trip_delayed.stop_time_updates[-1]
        assert last_st.stop_id == 'stop_point:OCE:SP:TrainTER-85000109'
        assert last_st.arrival == datetime.datetime(2015, 9, 21, 16, 54)
        assert last_st.arrival_status == 'update'
        assert last_st.arrival_delay == timedelta(minutes=15)
        #The departure is consistent with arrival
        assert last_st.departure == datetime.datetime(2015, 9, 21, 16, 54)
        assert last_st.departure_delay == timedelta(minutes=15)
        assert last_st.departure_status == 'none'
        assert last_st.message == 'Affluence exceptionnelle de voyageurs'

        assert db_trip_delayed.contributor == 'realtime.ire'
Ejemplo n.º 13
0
def check_db_870154_partial_removal(contributor=None):
    with app.app_context():
        assert len(RealTimeUpdate.query.all()) >= 1
        assert len(TripUpdate.query.all()) == 1
        assert len(StopTimeUpdate.query.all()) == 12
        db_trip = TripUpdate.find_by_dated_vj(
            'OCE:SN870154F01001', datetime(2018, 11, 2, 9, 54, tzinfo=utc))
        assert db_trip

        assert db_trip.vj.navitia_trip_id == 'OCE:SN870154F01001'
        assert db_trip.vj.get_start_timestamp() == datetime(2018,
                                                            11,
                                                            2,
                                                            9,
                                                            54,
                                                            tzinfo=utc)
        assert db_trip.vj_id == db_trip.vj.id
        assert db_trip.status == 'update'
        # Cots contain deleted as well as delayed stop_times
        assert db_trip.effect == 'REDUCED_SERVICE'
        # 12 stop times must have been created
        assert len(db_trip.stop_time_updates) == 12

        # only the first 4 stops are removed (Rodez to Aubin) in both cases (delay or back to normal)
        first_st = db_trip.stop_time_updates[0]
        assert first_st.stop_id == 'stop_point:OCE:SP:TrainTER-87613422'
        assert first_st.arrival_status == 'none'
        assert first_st.departure_status == 'delete'
        assert first_st.message is None

        second_st = db_trip.stop_time_updates[1]
        assert second_st.stop_id == 'stop_point:OCE:SP:TrainTER-87613257'
        assert second_st.arrival_status == 'delete'
        assert second_st.departure_status == 'delete'
        assert second_st.message is None

        third_st = db_trip.stop_time_updates[2]
        assert third_st.stop_id == 'stop_point:OCE:SP:TrainTER-87613232'
        assert third_st.arrival_status == 'delete'
        assert third_st.departure_status == 'delete'
        assert third_st.message is None

        fourth_st = db_trip.stop_time_updates[3]
        assert fourth_st.stop_id == 'stop_point:OCE:SP:TrainTER-87613224'
        assert fourth_st.arrival_status == 'delete'
        assert fourth_st.departure_status == 'delete'
        assert fourth_st.message is None

        assert db_trip.contributor == contributor
Ejemplo n.º 14
0
def check_db_ire_96231_trip_removal():
    with app.app_context():
        assert len(RealTimeUpdate.query.all()) >= 1
        assert len(TripUpdate.query.all()) >= 1
        assert len(StopTimeUpdate.query.all()) >= 0
        db_trip_removal = TripUpdate.find_by_dated_vj('vehicle_journey:OCETrainTER-87212027-85000109-3:11859',
                                                      datetime.date(2015, 9, 21))
        assert db_trip_removal

        assert db_trip_removal.vj.navitia_id == 'vehicle_journey:OCETrainTER-87212027-85000109-3:11859'
        assert db_trip_removal.vj.circulation_date == datetime.date(2015, 9, 21)
        assert db_trip_removal.vj_id == db_trip_removal.vj.id
        assert db_trip_removal.status == 'delete'
        # full trip removal : no stop_time to precise
        assert len(db_trip_removal.stop_time_updates) == 0
Ejemplo n.º 15
0
def check_db_ire_96231_delayed():
    with app.app_context():
        assert len(RealTimeUpdate.query.all()) >= 1
        assert len(TripUpdate.query.all()) >= 1
        assert len(StopTimeUpdate.query.all()) >= 6
        db_trip_delayed = TripUpdate.find_by_dated_vj('vehicle_journey:OCETrainTER-87212027-85000109-3:11859',
                                                      datetime.date(2015, 9, 21))
        assert db_trip_delayed

        assert db_trip_delayed.vj.navitia_id == 'vehicle_journey:OCETrainTER-87212027-85000109-3:11859'
        assert db_trip_delayed.vj.circulation_date == datetime.date(2015, 9, 21)
        assert db_trip_delayed.vj_id == db_trip_delayed.vj.id
        assert db_trip_delayed.status == 'update'
        # 6 stop times must have been created
        assert len(db_trip_delayed.stop_time_updates) == 6
Ejemplo n.º 16
0
def check_db_ire_6113_trip_removal():
    with app.app_context():
        assert len(RealTimeUpdate.query.all()) >= 1
        assert len(TripUpdate.query.all()) >= 1
        assert len(StopTimeUpdate.query.all()) >= 0
        db_trip_removal = TripUpdate.find_by_dated_vj('vehicle_journey:OCETGV-87686006-87751008-2:25768',
                                                      datetime.date(2015, 10, 6))
        assert db_trip_removal

        assert db_trip_removal.vj.navitia_id == 'vehicle_journey:OCETGV-87686006-87751008-2:25768'
        assert db_trip_removal.vj.circulation_date == datetime.date(2015, 10, 6)
        assert db_trip_removal.vj_id == db_trip_removal.vj.id
        assert db_trip_removal.status == 'delete'
        # full trip removal : no stop_time to precise
        assert len(db_trip_removal.stop_time_updates) == 0
Ejemplo n.º 17
0
def check_db_ire_6114_trip_removal():
    with app.app_context():
        assert len(RealTimeUpdate.query.all()) >= 1
        assert len(TripUpdate.query.all()) >= 1
        assert len(StopTimeUpdate.query.all()) >= 0
        db_trip_removal = TripUpdate.find_by_dated_vj('trip:OCETGV-87686006-87751008-2:25768-2',
                                                      datetime.date(2015, 10, 6))
        assert db_trip_removal

        assert db_trip_removal.vj.navitia_trip_id == 'trip:OCETGV-87686006-87751008-2:25768-2'
        assert db_trip_removal.vj.circulation_date == datetime.date(2015, 10, 6)
        assert db_trip_removal.vj_id == db_trip_removal.vj.id
        assert db_trip_removal.status == 'delete'
        print db_trip_removal.message
        assert db_trip_removal.message == u'Accident à un Passage à Niveau'
        # full trip removal : no stop_time to precise
        assert len(db_trip_removal.stop_time_updates) == 0
Ejemplo n.º 18
0
def check_db_6114_trip_removal():
    with app.app_context():
        assert len(RealTimeUpdate.query.all()) >= 1
        assert len(TripUpdate.query.all()) >= 1
        assert len(StopTimeUpdate.query.all()) >= 0
        db_trip_removal = TripUpdate.find_by_dated_vj(
            "trip:OCETGV-87686006-87751008-2:25768-2", datetime(2015, 10, 6, 10, 37)
        )
        assert db_trip_removal

        assert db_trip_removal.vj.navitia_trip_id == "trip:OCETGV-87686006-87751008-2:25768-2"
        assert db_trip_removal.vj.start_timestamp == datetime(2015, 10, 6, 10, 37)
        assert db_trip_removal.vj_id == db_trip_removal.vj.id
        assert db_trip_removal.status == "delete"
        assert db_trip_removal.message == "Accident à un Passage à Niveau"
        # full trip removal : no stop_time to precise
        assert len(db_trip_removal.stop_time_updates) == 0
Ejemplo n.º 19
0
def test_cots_delayed_simple_post(mock_rabbitmq):
    """
    simple delayed stops post
    """
    cots_96231 = get_fixture_data('cots_train_96231_delayed.json')
    res = api_post('/cots', data=cots_96231)
    assert res == 'OK'

    with app.app_context():
        assert len(RealTimeUpdate.query.all()) == 1
        assert len(TripUpdate.query.all()) == 1
        assert len(StopTimeUpdate.query.all()) == 6
        db_trip_delayed = TripUpdate.find_by_dated_vj('trip:OCETrainTER-87212027-85000109-3:11859',
                                                      datetime(2015, 9, 21, 15, 21, tzinfo=utc))
        assert db_trip_delayed.stop_time_updates[4].message is None
    check_db_96231_delayed(contributor='realtime.cots')
    assert mock_rabbitmq.call_count == 1
Ejemplo n.º 20
0
def check_db_ire_6113_trip_removal():
    with app.app_context():
        assert len(RealTimeUpdate.query.all()) >= 1
        assert len(TripUpdate.query.all()) >= 1
        assert len(StopTimeUpdate.query.all()) >= 0
        db_trip_removal = TripUpdate.find_by_dated_vj('trip:OCETGV-87686006-87751008-2:25768',
                                                      datetime.date(2015, 10, 6))
        assert db_trip_removal

        assert db_trip_removal.vj.navitia_trip_id == 'trip:OCETGV-87686006-87751008-2:25768'
        assert db_trip_removal.vj.circulation_date == datetime.date(2015, 10, 6)
        assert db_trip_removal.vj_id == db_trip_removal.vj.id
        assert db_trip_removal.status == 'delete'
        print db_trip_removal.message
        assert db_trip_removal.message == u'Accident à un Passage à Niveau'
        # full trip removal : no stop_time to precise
        assert len(db_trip_removal.stop_time_updates) == 0
Ejemplo n.º 21
0
def check_db_6111_trip_removal_pass_midnight():
    with app.app_context():
        assert len(RealTimeUpdate.query.all()) >= 1
        assert len(TripUpdate.query.all()) >= 1
        assert len(StopTimeUpdate.query.all()) >= 0
        db_trip_removal = TripUpdate.find_by_dated_vj(
            'trip:OCETGV-87686006-87751008-2:25768',
            datetime(2015, 10, 6, 20, 37, tzinfo=utc))
        assert db_trip_removal

        assert db_trip_removal.vj.navitia_trip_id == 'trip:OCETGV-87686006-87751008-2:25768'
        assert db_trip_removal.vj.get_start_timestamp() == datetime(2015,
                                                                    10,
                                                                    6,
                                                                    20,
                                                                    37,
                                                                    tzinfo=utc)
        assert db_trip_removal.vj_id == db_trip_removal.vj.id
        assert db_trip_removal.status == 'delete'
        print db_trip_removal.message
        assert db_trip_removal.message == u'Accident à un Passage à Niveau'
        # full trip removal : no stop_time to precise
        assert len(db_trip_removal.stop_time_updates) == 0
Ejemplo n.º 22
0
def check_db_96231_trip_removal():
    with app.app_context():
        assert len(RealTimeUpdate.query.all()) >= 1
        assert len(TripUpdate.query.all()) >= 1
        assert len(StopTimeUpdate.query.all()) >= 0
        db_trip_removal = TripUpdate.find_by_dated_vj(
            'trip:OCETrainTER-87212027-85000109-3:11859',
            datetime(2015, 9, 21, 15, 21, tzinfo=utc))
        assert db_trip_removal

        assert db_trip_removal.vj.navitia_trip_id == 'trip:OCETrainTER-87212027-85000109-3:11859'
        assert db_trip_removal.vj.get_start_timestamp() == datetime(2015,
                                                                    9,
                                                                    21,
                                                                    15,
                                                                    21,
                                                                    tzinfo=utc)
        assert db_trip_removal.vj_id == db_trip_removal.vj.id
        assert db_trip_removal.status == 'delete'
        assert db_trip_removal.effect == 'SIGNIFICANT_DELAYS'
        assert db_trip_removal.message is None
        # full trip removal : no stop_time to precise
        assert len(db_trip_removal.stop_time_updates) == 0
Ejemplo n.º 23
0
def test_gtfs_rt_simple_delay(basic_gtfs_rt_data, mock_rabbitmq):
    """
    test the gtfs-rt post with a simple gtfs-rt

    we have realtime data on only 2 stops, so the model builder should only have 2 stops (even if the VJ
    have 4 stops)

    after the merge, we should have 4 stops (and only 2 delayed)
    """
    tester = app.test_client()
    resp = tester.post('/gtfs_rt', data=basic_gtfs_rt_data.SerializeToString())
    assert resp.status_code == 200

    with app.app_context():
        assert len(RealTimeUpdate.query.all()) == 1
        assert len(TripUpdate.query.all()) == 1
        assert len(StopTimeUpdate.query.all()) == 4

        trip_update = TripUpdate.find_by_dated_vj('R:vj1', datetime.date(2012, 6, 15))

        assert trip_update

        # navitia's time are in local, but we return UTC time, and the stop is in sherbrooke, so UTC-4h
        first_stop = trip_update.stop_time_updates[0]
        assert first_stop.stop_id == 'StopR1'
        assert first_stop.arrival_status == 'none'
        assert first_stop.arrival_delay == timedelta(0)
        assert first_stop.arrival == datetime.datetime(2012, 6, 15, 14, 00)
        assert first_stop.departure_delay == timedelta(0)
        assert first_stop.departure_status == 'none'
        assert first_stop.departure == datetime.datetime(2012, 6, 15, 14, 00)
        assert first_stop.message is None

        second_stop = trip_update.stop_time_updates[1]
        assert second_stop.stop_id == 'StopR2'
        assert second_stop.arrival_status == 'update'
        # 10:30 in local + 4h to get it in UTC + 1minute of delay
        assert second_stop.arrival == datetime.datetime(2012, 6, 15, 14, 31)
        assert second_stop.arrival_delay == timedelta(minutes=1)
        # even if the GTFS-RT has no information of the departure, it have been also delayed by 1mn
        # for coherence
        assert second_stop.departure == datetime.datetime(2012, 6, 15, 14, 31)
        assert second_stop.departure_delay == timedelta(minutes=1)
        assert second_stop.departure_status == 'none'
        assert second_stop.message is None

        third_stop = trip_update.stop_time_updates[2]
        assert third_stop.stop_id == 'StopR3'
        assert third_stop.arrival_status == 'none'
        assert third_stop.arrival_delay == timedelta(0)
        assert third_stop.arrival == datetime.datetime(2012, 6, 15, 15, 00)
        assert third_stop.departure_delay == timedelta(0)
        assert third_stop.departure_status == 'none'
        assert third_stop.departure == datetime.datetime(2012, 6, 15, 15, 00)
        assert third_stop.message is None

        fourth_stop = trip_update.stop_time_updates[3]
        assert fourth_stop.stop_id == 'StopR4'
        assert fourth_stop.arrival_status == 'update'
        assert fourth_stop.arrival_delay == timedelta(minutes=3)
        assert fourth_stop.arrival == datetime.datetime(2012, 6, 15, 15, 33)
        # even if the GTFS-RT has no information of the departure, it have been also delayed by 3mn
        # for coherence
        assert fourth_stop.departure_delay == timedelta(minutes=3)
        assert fourth_stop.departure_status == 'none'
        assert fourth_stop.departure == datetime.datetime(2012, 6, 15, 15, 33)
        assert fourth_stop.message is None
Ejemplo n.º 24
0
def test_ire_partial_removal(mock_rabbitmq):
    """
    the trip 840427 has been partialy deleted

    Normally there are 7 stops in this VJ, but 2 (Bar-sur-Aube and Vendeuvre) have been removed
    """
    ire_080427 = get_ire_data('train_840427_partial_removal.xml')
    res = api_post('/ire', data=ire_080427)
    assert res == 'OK'

    with app.app_context():
        assert len(RealTimeUpdate.query.all()) == 1
        assert len(TripUpdate.query.all()) == 1
        assert len(StopTimeUpdate.query.all()) == 7

        db_trip_partial_removed = TripUpdate.find_by_dated_vj('OCE:SN840427F03001',
                                                      datetime.date(2017, 3, 18))
        assert db_trip_partial_removed

        assert db_trip_partial_removed.vj.navitia_trip_id == 'OCE:SN840427F03001'
        assert db_trip_partial_removed.vj.circulation_date == datetime.date(2017, 3, 18)
        assert db_trip_partial_removed.vj_id == db_trip_partial_removed.vj.id
        assert db_trip_partial_removed.status == 'update'

        # 7 stop times must have been created
        assert len(db_trip_partial_removed.stop_time_updates) == 7

        # the first stop have not been changed
        first_st = db_trip_partial_removed.stop_time_updates[0]
        assert first_st.stop_id == 'stop_point:OCE:SP:TrainTER-87713040'
        assert first_st.arrival_status == 'none'
        assert first_st.departure_status == 'none'
        assert first_st.message is None

        for s in db_trip_partial_removed.stop_time_updates[0:3]:
            assert s.arrival_status == 'none'
            assert s.departure_status == 'none'
            assert s.message is None

        # the stops Chaumont, Bar-sur-Aube, Vendeuvre and Troyes should have been marked as deleted
        # (even if Chaumont and Vendeuvre were in a 'PRDebut'/'PRFin' tag
        bar_st = db_trip_partial_removed.stop_time_updates[3]
        assert bar_st.stop_id == 'stop_point:OCE:SP:TrainTER-87142000'  # Chaumont
        assert bar_st.arrival_status == 'none'  # the train still arrives in this stop
        assert bar_st.departure_status == 'delete'
        assert bar_st.message == u"Défaut d'alimentation électrique"

        bar_st = db_trip_partial_removed.stop_time_updates[4]
        assert bar_st.stop_id == 'stop_point:OCE:SP:TrainTER-87118299'  # Bar-sur-Aube
        assert bar_st.arrival_status == 'delete'
        assert bar_st.departure_status == 'delete'
        assert bar_st.message == u"Défaut d'alimentation électrique"

        bar_st = db_trip_partial_removed.stop_time_updates[5]
        assert bar_st.stop_id == 'stop_point:OCE:SP:TrainTER-87118257'  # Vendeuvre
        assert bar_st.arrival_status == 'delete'
        assert bar_st.departure_status == 'delete'
        assert bar_st.message == u"Défaut d'alimentation électrique"

        bar_st = db_trip_partial_removed.stop_time_updates[6]
        assert bar_st.stop_id == 'stop_point:OCE:SP:TrainTER-87118000'  # Troyes
        assert bar_st.arrival_status == 'delete'
        assert bar_st.departure_status == 'none'  # the train still does not leave from this stop
        assert bar_st.message == u"Défaut d'alimentation électrique"

        assert db_trip_partial_removed.contributor == 'realtime.ire'

    assert mock_rabbitmq.call_count == 1
Ejemplo n.º 25
0
def check_db_96231_mixed_statuses_inside_stops(contributor_id=None):
    with app.app_context():
        db_trip_delayed = TripUpdate.find_by_dated_vj(
            "trip:OCETrainTER-87212027-85000109-3:11859", datetime(2015, 9, 21, 15, 21)
        )
        assert db_trip_delayed
        assert db_trip_delayed.vj.navitia_trip_id == "trip:OCETrainTER-87212027-85000109-3:11859"
        assert db_trip_delayed.vj.start_timestamp == datetime(2015, 9, 21, 15, 21)
        assert db_trip_delayed.vj_id == db_trip_delayed.vj.id
        assert db_trip_delayed.status == "update"
        # Cots contain delayed as well as removed stop_times
        assert db_trip_delayed.effect == "REDUCED_SERVICE"
        # 6 stop times must have been created
        assert len(db_trip_delayed.stop_time_updates) == 6

        # the first stop (in Strasbourg) is not in the feed, only on navitia's base schedule
        # no delay then, only base schedule
        # Navitia's time are in local, so departure 17h21 in paris is 15h21 in UTC
        first_st = db_trip_delayed.stop_time_updates[0]
        assert first_st.stop_id == "stop_point:OCE:SP:TrainTER-87212027"
        assert first_st.arrival == datetime(2015, 9, 21, 15, 21)
        assert first_st.arrival_status == "none"
        assert first_st.arrival_delay == timedelta(0)
        assert first_st.departure == datetime(2015, 9, 21, 15, 21)
        assert first_st.departure_delay == timedelta(0)
        assert first_st.departure_status == "none"
        assert first_st.message is None

        second_st = db_trip_delayed.stop_time_updates[1]
        assert second_st.stop_id == "stop_point:OCE:SP:TrainTER-87214056"
        assert second_st.arrival == datetime(2015, 9, 21, 15, 38)
        assert second_st.arrival_status == "none"
        assert second_st.arrival_delay == timedelta(0)
        assert second_st.departure == datetime(2015, 9, 21, 15, 40, 30)
        assert second_st.departure_delay == timedelta(seconds=30)  # only departure is delayed
        assert second_st.departure_status == "update"

        third_st = db_trip_delayed.stop_time_updates[2]
        assert third_st.stop_id == "stop_point:OCE:SP:TrainTER-87182014"
        assert third_st.arrival == datetime(2015, 9, 21, 15, 51, 30)
        assert third_st.arrival_status == "update"
        assert third_st.arrival_delay == timedelta(seconds=30)  # only arrival is delayed
        assert third_st.departure == datetime(2015, 9, 21, 15, 53)
        assert third_st.departure_delay == timedelta(0)
        assert third_st.departure_status == "update"

        fourth_st = db_trip_delayed.stop_time_updates[3]
        assert fourth_st.stop_id == "stop_point:OCE:SP:TrainTER-87182063"
        assert fourth_st.arrival == datetime(2015, 9, 21, 16, 15)
        assert fourth_st.arrival_status == "update"
        assert fourth_st.arrival_delay == timedelta(seconds=60)  # arrival delayed
        assert fourth_st.departure_status == "delete"  # departure removed

        # checking the last 2 stops mostly to check that nothing is propagated and they respect input feed
        fifth_st = db_trip_delayed.stop_time_updates[4]
        assert fifth_st.stop_id == "stop_point:OCE:SP:TrainTER-87182139"
        assert fifth_st.arrival == datetime(2015, 9, 21, 16, 30)
        assert fifth_st.arrival_status == "update"  # in the feed, so updated but no delay
        assert fifth_st.arrival_delay == timedelta(0)
        assert fifth_st.departure == datetime(2015, 9, 21, 16, 31)
        assert fifth_st.departure_status == "update"  # in the feed, so updated but no delay
        assert fifth_st.departure_delay == timedelta(0)

        sixth_st = db_trip_delayed.stop_time_updates[5]
        assert sixth_st.stop_id == "stop_point:OCE:SP:TrainTER-85000109"
        assert sixth_st.arrival == datetime(2015, 9, 21, 16, 39)
        assert sixth_st.arrival_status == "update"  # in the feed, so updated but no delay
        assert sixth_st.arrival_delay == timedelta(0)
        assert sixth_st.departure == datetime(2015, 9, 21, 16, 39)
        assert sixth_st.departure_status == "none"  # not in the feed, so none and no delay
        assert sixth_st.departure_delay == timedelta(0)

        assert db_trip_delayed.contributor_id == contributor_id
Ejemplo n.º 26
0
def check_db_870154_delay():
    with app.app_context():
        assert len(RealTimeUpdate.query.all()) >= 1
        assert len(TripUpdate.query.all()) == 1
        assert len(StopTimeUpdate.query.all()) == 12
        db_trip = TripUpdate.find_by_dated_vj("OCE:SN870154F01001", datetime(2018, 11, 2, 9, 54))
        assert db_trip
        assert db_trip.message == "Régulation du trafic"
        # Cots contain deleted as well as delayed stop_times
        assert db_trip.effect == "REDUCED_SERVICE"

        # only in "delay-case" departure, arrival at 5th (Viviez-Decazeville)
        # and arrival at 6th stops (Capdenac) are deleted with a cause
        fifth_st = db_trip.stop_time_updates[4]
        assert fifth_st.stop_id == "stop_point:OCE:SP:TrainTER-87613661"
        assert fifth_st.arrival_status == "delete"
        assert fifth_st.departure_status == "delete"
        assert fifth_st.message == "Affluence exceptionnelle de voyageurs"

        sixth_st = db_trip.stop_time_updates[5]
        assert sixth_st.stop_id == "stop_point:OCE:SP:TrainTER-87613109"
        assert sixth_st.arrival_status == "delete"

        # the last 7 stops are late by 10 min (starting by departure in Capdenac)
        assert sixth_st.departure_status == "update"
        assert sixth_st.departure == datetime(2018, 11, 2, 11, 5)
        assert sixth_st.departure_delay == timedelta(minutes=10)
        assert sixth_st.message == "Régulation du trafic"  # Only departure cause is used

        seventh_st = db_trip.stop_time_updates[6]
        assert seventh_st.stop_id == "stop_point:OCE:SP:TrainTER-87613091"
        assert seventh_st.arrival_status == "update"
        assert seventh_st.arrival == datetime(2018, 11, 2, 11, 11)
        assert seventh_st.arrival_delay == timedelta(minutes=10)
        assert seventh_st.departure_status == "update"
        assert seventh_st.departure == datetime(2018, 11, 2, 11, 12)
        assert seventh_st.departure_delay == timedelta(minutes=10)
        assert seventh_st.message == "Régulation du trafic"

        eight_st = db_trip.stop_time_updates[7]
        assert eight_st.stop_id == "stop_point:OCE:SP:TrainTER-87613075"
        assert eight_st.arrival_status == "update"
        assert eight_st.arrival == datetime(2018, 11, 2, 11, 27)
        assert eight_st.arrival_delay == timedelta(minutes=10)
        assert eight_st.departure_status == "update"
        assert eight_st.departure == datetime(2018, 11, 2, 11, 28)
        assert eight_st.departure_delay == timedelta(minutes=10)
        assert eight_st.message == "Régulation du trafic"

        ninth_st = db_trip.stop_time_updates[8]
        assert ninth_st.stop_id == "stop_point:OCE:SP:TrainTER-87613059"
        assert ninth_st.arrival_status == "update"
        assert ninth_st.arrival == datetime(2018, 11, 2, 11, 39)
        assert ninth_st.arrival_delay == timedelta(minutes=10)
        assert ninth_st.departure_status == "update"
        assert ninth_st.departure == datetime(2018, 11, 2, 11, 40)
        assert ninth_st.departure_delay == timedelta(minutes=10)
        assert ninth_st.message == "Régulation du trafic"

        tenth_st = db_trip.stop_time_updates[9]
        assert tenth_st.stop_id == "stop_point:OCE:SP:TrainTER-87613042"
        assert tenth_st.arrival_status == "update"
        assert tenth_st.arrival == datetime(2018, 11, 2, 11, 46)
        assert tenth_st.arrival_delay == timedelta(minutes=10)
        assert tenth_st.departure_status == "update"
        assert tenth_st.departure == datetime(2018, 11, 2, 11, 47)
        assert tenth_st.departure_delay == timedelta(minutes=10)
        assert tenth_st.message == "Régulation du trafic"

        eleventh_st = db_trip.stop_time_updates[10]
        assert eleventh_st.stop_id == "stop_point:OCE:SP:TrainTER-87594572"
        assert eleventh_st.arrival_status == "update"
        assert eleventh_st.arrival == datetime(2018, 11, 2, 12, 1)
        assert eleventh_st.arrival_delay == timedelta(minutes=10)
        assert eleventh_st.departure_status == "update"
        assert eleventh_st.departure == datetime(2018, 11, 2, 12, 2)
        assert eleventh_st.departure_delay == timedelta(minutes=10)
        assert eleventh_st.message == "Régulation du trafic"

        twelfth_st = db_trip.stop_time_updates[11]
        assert twelfth_st.stop_id == "stop_point:OCE:SP:TrainTER-87594002"
        assert twelfth_st.arrival_status == "update"
        assert twelfth_st.arrival == datetime(2018, 11, 2, 12, 25)
        assert twelfth_st.arrival_delay == timedelta(minutes=10)
        assert twelfth_st.departure_status == "none"
        assert twelfth_st.departure == datetime(2018, 11, 2, 12, 25)
        assert twelfth_st.departure_delay == timedelta(minutes=10)
        assert twelfth_st.message == "Régulation du trafic"
Ejemplo n.º 27
0
def check_db_96231_delayed(contributor_id=None, motif_externe_is_null=False):
    with app.app_context():
        assert len(RealTimeUpdate.query.all()) >= 1
        assert len(TripUpdate.query.all()) >= 1
        assert len(StopTimeUpdate.query.all()) >= 6
        db_trip_delayed = TripUpdate.find_by_dated_vj(
            "trip:OCETrainTER-87212027-85000109-3:11859", datetime(2015, 9, 21, 15, 21)
        )
        assert db_trip_delayed

        assert db_trip_delayed.vj.navitia_trip_id == "trip:OCETrainTER-87212027-85000109-3:11859"
        assert db_trip_delayed.vj.start_timestamp == datetime(2015, 9, 21, 15, 21)
        assert db_trip_delayed.vj_id == db_trip_delayed.vj.id
        assert db_trip_delayed.status == "update"
        # Cots contain delayed stop_times only
        assert db_trip_delayed.company_id == "company:OCE:SN"
        # At least 6 stop times must have been created
        assert len(db_trip_delayed.stop_time_updates) >= 6

        # the first stop (in Strasbourg) is not in the feed, only on navitia's base schedule
        # no delay then, only base schedule
        # Navitia's time are in local, so departure 17h21 in paris is 15h21 in UTC
        first_st = db_trip_delayed.stop_time_updates[0]
        assert first_st.stop_id == "stop_point:OCE:SP:TrainTER-87212027"
        assert first_st.arrival == datetime(2015, 9, 21, 15, 21)
        assert first_st.arrival_status == "none"
        assert first_st.arrival_delay == timedelta(0)
        assert first_st.departure == datetime(2015, 9, 21, 15, 21)
        assert first_st.departure_delay == timedelta(0)
        assert first_st.departure_status == "none"
        assert first_st.message is None

        second_st = db_trip_delayed.stop_time_updates[1]
        assert second_st.stop_id == "stop_point:OCE:SP:TrainTER-87214056"
        assert second_st.arrival == datetime(2015, 9, 21, 15, 38)
        assert second_st.arrival_status == "none"
        assert second_st.arrival_delay == timedelta(0)
        assert second_st.departure == datetime(2015, 9, 21, 15, 55)
        assert second_st.departure_delay == timedelta(minutes=15)
        assert second_st.departure_status == "update"
        assert db_trip_delayed.company_id == "company:OCE:SN"
        if motif_externe_is_null:
            assert second_st.message is None
        else:
            assert second_st.message == "Affluence exceptionnelle de voyageurs"

        assert db_trip_delayed.stop_time_updates[2].message == second_st.message
        if db_trip_delayed.stop_time_updates[3].arrival_status == "delete":
            # if there is a added/removed stop in the middle, skip it
            assert db_trip_delayed.stop_time_updates[4].message == second_st.message
        else:
            assert db_trip_delayed.stop_time_updates[3].message == second_st.message

        # last stop is gare de Basel-SBB, delay's only at the arrival
        last_st = db_trip_delayed.stop_time_updates[-1]
        assert last_st.stop_id == "stop_point:OCE:SP:TrainTER-85000109"
        assert last_st.arrival == datetime(2015, 9, 21, 16, 54)
        assert last_st.arrival_status == "update"
        assert last_st.arrival_delay == timedelta(minutes=15)
        # The departure is consistent with arrival
        assert last_st.departure == datetime(2015, 9, 21, 16, 54)
        assert last_st.departure_delay == timedelta(minutes=15)
        assert last_st.departure_status == "none"
        if motif_externe_is_null:
            assert second_st.message is None
        else:
            assert second_st.message == "Affluence exceptionnelle de voyageurs"

        assert db_trip_delayed.contributor_id == contributor_id

        return db_trip_delayed  # for additional testing if needed
Ejemplo n.º 28
0
def check_db_870154_delay():
    with app.app_context():
        assert len(RealTimeUpdate.query.all()) >= 1
        assert len(TripUpdate.query.all()) == 1
        assert len(StopTimeUpdate.query.all()) == 12
        db_trip = TripUpdate.find_by_dated_vj(
            'OCE:SN870154F01001', datetime(2018, 11, 2, 9, 54, tzinfo=utc))
        assert db_trip
        assert db_trip.message == u'Régulation du trafic'

        # only in "delay-case" departure, arrival at 5th (Viviez-Decazeville)
        # and arrival at 6th stops (Capdenac) are deleted with a cause
        fifth_st = db_trip.stop_time_updates[4]
        assert fifth_st.stop_id == 'stop_point:OCE:SP:TrainTER-87613661'
        assert fifth_st.arrival_status == 'delete'
        assert fifth_st.departure_status == 'delete'
        assert fifth_st.message == u'Affluence exceptionnelle de voyageurs'

        sixth_st = db_trip.stop_time_updates[5]
        assert sixth_st.stop_id == 'stop_point:OCE:SP:TrainTER-87613109'
        assert sixth_st.arrival_status == 'delete'

        # the last 7 stops are late by 10 min (starting by departure in Capdenac)
        assert sixth_st.departure_status == 'update'
        assert sixth_st.departure == datetime(2018, 11, 2, 11, 5)
        assert sixth_st.departure_delay == timedelta(minutes=10)
        assert sixth_st.message == u'Régulation du trafic'  # Only departure cause is used

        seventh_st = db_trip.stop_time_updates[6]
        assert seventh_st.stop_id == 'stop_point:OCE:SP:TrainTER-87613091'
        assert seventh_st.arrival_status == 'update'
        assert seventh_st.arrival == datetime(2018, 11, 2, 11, 11)
        assert seventh_st.arrival_delay == timedelta(minutes=10)
        assert seventh_st.departure_status == 'update'
        assert seventh_st.departure == datetime(2018, 11, 2, 11, 12)
        assert seventh_st.departure_delay == timedelta(minutes=10)
        assert seventh_st.message == u'Régulation du trafic'

        eight_st = db_trip.stop_time_updates[7]
        assert eight_st.stop_id == 'stop_point:OCE:SP:TrainTER-87613075'
        assert eight_st.arrival_status == 'update'
        assert eight_st.arrival == datetime(2018, 11, 2, 11, 27)
        assert eight_st.arrival_delay == timedelta(minutes=10)
        assert eight_st.departure_status == 'update'
        assert eight_st.departure == datetime(2018, 11, 2, 11, 28)
        assert eight_st.departure_delay == timedelta(minutes=10)
        assert eight_st.message == u'Régulation du trafic'

        ninth_st = db_trip.stop_time_updates[8]
        assert ninth_st.stop_id == 'stop_point:OCE:SP:TrainTER-87613059'
        assert ninth_st.arrival_status == 'update'
        assert ninth_st.arrival == datetime(2018, 11, 2, 11, 39)
        assert ninth_st.arrival_delay == timedelta(minutes=10)
        assert ninth_st.departure_status == 'update'
        assert ninth_st.departure == datetime(2018, 11, 2, 11, 40)
        assert ninth_st.departure_delay == timedelta(minutes=10)
        assert ninth_st.message == u'Régulation du trafic'

        tenth_st = db_trip.stop_time_updates[9]
        assert tenth_st.stop_id == 'stop_point:OCE:SP:TrainTER-87613042'
        assert tenth_st.arrival_status == 'update'
        assert tenth_st.arrival == datetime(2018, 11, 2, 11, 46)
        assert tenth_st.arrival_delay == timedelta(minutes=10)
        assert tenth_st.departure_status == 'update'
        assert tenth_st.departure == datetime(2018, 11, 2, 11, 47)
        assert tenth_st.departure_delay == timedelta(minutes=10)
        assert tenth_st.message == u'Régulation du trafic'

        eleventh_st = db_trip.stop_time_updates[10]
        assert eleventh_st.stop_id == 'stop_point:OCE:SP:TrainTER-87594572'
        assert eleventh_st.arrival_status == 'update'
        assert eleventh_st.arrival == datetime(2018, 11, 2, 12, 1)
        assert eleventh_st.arrival_delay == timedelta(minutes=10)
        assert eleventh_st.departure_status == 'update'
        assert eleventh_st.departure == datetime(2018, 11, 2, 12, 2)
        assert eleventh_st.departure_delay == timedelta(minutes=10)
        assert eleventh_st.message == u'Régulation du trafic'

        twelfth_st = db_trip.stop_time_updates[11]
        assert twelfth_st.stop_id == 'stop_point:OCE:SP:TrainTER-87594002'
        assert twelfth_st.arrival_status == 'update'
        assert twelfth_st.arrival == datetime(2018, 11, 2, 12, 25)
        assert twelfth_st.arrival_delay == timedelta(minutes=10)
        assert twelfth_st.departure_status == 'none'
        assert twelfth_st.departure == datetime(2018, 11, 2, 12, 25)
        assert twelfth_st.departure_delay == timedelta(minutes=10)
        assert twelfth_st.message == u'Régulation du trafic'
Ejemplo n.º 29
0
def check_db_870154_normal():
    with app.app_context():
        assert len(RealTimeUpdate.query.all()) >= 1
        assert len(TripUpdate.query.all()) == 1
        assert len(StopTimeUpdate.query.all()) == 12
        db_trip = TripUpdate.find_by_dated_vj(
            'OCE:SN870154F01001', datetime(2018, 11, 2, 9, 54, tzinfo=utc))
        assert db_trip
        assert db_trip.message is None

        # departure, arrival at 5th and arrival at 6th stops are back to normal
        fifth_st = db_trip.stop_time_updates[4]
        assert fifth_st.stop_id == 'stop_point:OCE:SP:TrainTER-87613661'
        assert fifth_st.arrival_status == 'update'
        assert fifth_st.arrival == datetime(2018, 11, 2, 10, 38)
        assert fifth_st.arrival_delay == timedelta(minutes=0)
        assert fifth_st.departure_status == 'update'
        assert fifth_st.departure == datetime(2018, 11, 2, 10, 39)
        assert fifth_st.departure_delay == timedelta(minutes=0)
        assert fifth_st.message is None

        sixth_st = db_trip.stop_time_updates[5]
        assert sixth_st.stop_id == 'stop_point:OCE:SP:TrainTER-87613109'
        assert sixth_st.arrival_status == 'update'
        assert sixth_st.arrival == datetime(2018, 11, 2, 10, 53)
        assert sixth_st.arrival_delay == timedelta(minutes=0)
        # the last 7 stops are late by 10 min (starting by departure in Capdenac)
        sixth_st = db_trip.stop_time_updates[5]
        assert sixth_st.departure_status == 'update'
        assert sixth_st.departure == datetime(2018, 11, 2, 10, 55)
        assert sixth_st.departure_delay == timedelta(minutes=0)
        assert sixth_st.message is None

        # "listeHoraireProjeteArrivee" is empty, so it's considered (back to) normal
        seventh_st = db_trip.stop_time_updates[6]
        assert seventh_st.stop_id == 'stop_point:OCE:SP:TrainTER-87613091'
        assert seventh_st.arrival_status == 'none'
        assert seventh_st.arrival == datetime(2018, 11, 2, 11, 1)
        assert seventh_st.arrival_delay == timedelta(minutes=0)
        assert seventh_st.departure_status == 'none'
        assert seventh_st.departure == datetime(2018, 11, 2, 11, 2)
        assert seventh_st.departure_delay == timedelta(minutes=0)
        assert seventh_st.message is None

        eight_st = db_trip.stop_time_updates[7]
        assert eight_st.stop_id == 'stop_point:OCE:SP:TrainTER-87613075'
        assert eight_st.arrival_status == 'update'
        assert eight_st.arrival == datetime(2018, 11, 2, 11, 17)
        assert eight_st.arrival_delay == timedelta(minutes=0)
        assert eight_st.departure_status == 'update'
        assert eight_st.departure == datetime(2018, 11, 2, 11, 18)
        assert eight_st.departure_delay == timedelta(minutes=0)
        assert eight_st.message is None

        ninth_st = db_trip.stop_time_updates[8]
        assert ninth_st.stop_id == 'stop_point:OCE:SP:TrainTER-87613059'
        assert ninth_st.arrival_status == 'update'
        assert ninth_st.arrival == datetime(2018, 11, 2, 11, 29)
        assert ninth_st.arrival_delay == timedelta(minutes=0)
        assert ninth_st.departure_status == 'update'
        assert ninth_st.departure == datetime(2018, 11, 2, 11, 30)
        assert ninth_st.departure_delay == timedelta(minutes=0)
        assert ninth_st.message is None

        # absolutely no information on that stop_time is provided (so the feed is incomplete)
        # no strict specification on that, Kirin keeps previous information (same as IRE)
        tenth_st = db_trip.stop_time_updates[9]
        assert tenth_st.stop_id == 'stop_point:OCE:SP:TrainTER-87613042'
        assert tenth_st.arrival_status == 'update'
        assert tenth_st.arrival == datetime(2018, 11, 2, 11, 46)
        assert tenth_st.arrival_delay == timedelta(minutes=10)
        assert tenth_st.departure_status == 'update'
        assert tenth_st.departure == datetime(2018, 11, 2, 11, 47)
        assert tenth_st.departure_delay == timedelta(minutes=10)
        assert tenth_st.message == u'Régulation du trafic'

        eleventh_st = db_trip.stop_time_updates[10]
        assert eleventh_st.stop_id == 'stop_point:OCE:SP:TrainTER-87594572'
        assert eleventh_st.arrival_status == 'update'
        assert eleventh_st.arrival == datetime(2018, 11, 2, 11, 51)
        assert eleventh_st.arrival_delay == timedelta(minutes=0)
        assert eleventh_st.departure_status == 'update'
        assert eleventh_st.departure == datetime(2018, 11, 2, 11, 52)
        assert eleventh_st.departure_delay == timedelta(minutes=0)
        assert eleventh_st.message is None

        twelfth_st = db_trip.stop_time_updates[11]
        assert twelfth_st.stop_id == 'stop_point:OCE:SP:TrainTER-87594002'
        assert twelfth_st.arrival_status == 'update'
        assert twelfth_st.arrival == datetime(2018, 11, 2, 12, 15)
        assert twelfth_st.arrival_delay == timedelta(minutes=0)
        assert twelfth_st.departure_status == 'none'
        assert twelfth_st.departure == datetime(2018, 11, 2, 12, 15)
        assert twelfth_st.departure_delay == timedelta(minutes=0)
        assert twelfth_st.message is None
Ejemplo n.º 30
0
def check_db_96231_mixed_statuses_delay_removal_delay(contributor=None):
    with app.app_context():
        db_trip_delayed = TripUpdate.find_by_dated_vj(
            'trip:OCETrainTER-87212027-85000109-3:11859',
            datetime(2015, 9, 21, 15, 21, tzinfo=utc))
        assert db_trip_delayed
        assert db_trip_delayed.vj.navitia_trip_id == 'trip:OCETrainTER-87212027-85000109-3:11859'
        assert db_trip_delayed.vj.get_start_timestamp() == datetime(2015,
                                                                    9,
                                                                    21,
                                                                    15,
                                                                    21,
                                                                    tzinfo=utc)
        assert db_trip_delayed.vj_id == db_trip_delayed.vj.id
        assert db_trip_delayed.status == 'update'
        # 6 stop times must have been created
        assert len(db_trip_delayed.stop_time_updates) == 6

        # the first stop (in Strasbourg) is not in the feed, only on navitia's base schedule
        # no delay then, only base schedule
        # Navitia's time are in local, so departure 17h21 in paris is 15h21 in UTC
        first_st = db_trip_delayed.stop_time_updates[0]
        assert first_st.stop_id == 'stop_point:OCE:SP:TrainTER-87212027'
        assert first_st.arrival == datetime(2015, 9, 21, 15, 21)
        assert first_st.arrival_status == 'none'
        assert first_st.arrival_delay == timedelta(0)
        assert first_st.departure == datetime(2015, 9, 21, 15, 21)
        assert first_st.departure_status == 'none'
        assert first_st.departure_delay == timedelta(0)
        assert first_st.message is None

        second_st = db_trip_delayed.stop_time_updates[1]
        assert second_st.stop_id == 'stop_point:OCE:SP:TrainTER-87214056'
        assert second_st.arrival == datetime(2015, 9, 21, 15, 43)
        assert second_st.arrival_status == 'update'
        assert second_st.arrival_delay == timedelta(
            seconds=300)  # delayed by 5 min
        assert second_st.departure == datetime(2015, 9, 21, 15, 45)
        assert second_st.departure_status == 'update'
        assert second_st.departure_delay == timedelta(seconds=300)

        third_st = db_trip_delayed.stop_time_updates[2]
        assert third_st.stop_id == 'stop_point:OCE:SP:TrainTER-87182014'
        assert third_st.arrival_status == 'delete'  # removed
        assert third_st.departure_status == 'delete'

        fourth_st = db_trip_delayed.stop_time_updates[3]
        assert fourth_st.stop_id == 'stop_point:OCE:SP:TrainTER-87182063'
        assert fourth_st.arrival == datetime(2015, 9, 21, 16, 16)
        assert fourth_st.arrival_status == 'update'
        assert fourth_st.arrival_delay == timedelta(
            seconds=120)  # delayed by 2 min
        assert fourth_st.departure == datetime(2015, 9, 21, 16, 18)
        assert fourth_st.departure_status == 'update'
        assert fourth_st.departure_delay == timedelta(seconds=120)

        # checking the last 2 stops mostly to check that nothing is propagated and they respect input feed
        fifth_st = db_trip_delayed.stop_time_updates[4]
        assert fifth_st.stop_id == 'stop_point:OCE:SP:TrainTER-87182139'
        assert fifth_st.arrival == datetime(2015, 9, 21, 16, 30)
        assert fifth_st.arrival_status == 'update'  # in the feed, so updated but no delay
        assert fifth_st.arrival_delay == timedelta(0)
        assert fifth_st.departure == datetime(2015, 9, 21, 16, 31)
        assert fifth_st.departure_status == 'update'  # in the feed, so updated but no delay
        assert fifth_st.departure_delay == timedelta(0)

        sixth_st = db_trip_delayed.stop_time_updates[5]
        assert sixth_st.stop_id == 'stop_point:OCE:SP:TrainTER-85000109'
        assert sixth_st.arrival == datetime(2015, 9, 21, 16, 39)
        assert sixth_st.arrival_status == 'update'  # in the feed, so updated but no delay
        assert sixth_st.arrival_delay == timedelta(0)
        assert sixth_st.departure == datetime(2015, 9, 21, 16, 39)
        assert sixth_st.departure_status == 'none'  # not in the feed, so none and no delay
        assert sixth_st.departure_delay == timedelta(0)

        assert db_trip_delayed.contributor == contributor
Ejemplo n.º 31
0
def check_db_96231_partial_removal(contributor=None):
    with app.app_context():
        assert len(RealTimeUpdate.query.all()) >= 1
        assert len(TripUpdate.query.all()) >= 1
        assert len(StopTimeUpdate.query.all()) >= 6
        db_trip_partial_removed = TripUpdate.find_by_dated_vj(
            'trip:OCETrainTER-87212027-85000109-3:11859',
            datetime(2015, 9, 21, 15, 21, tzinfo=utc))
        assert db_trip_partial_removed

        assert db_trip_partial_removed.vj.navitia_trip_id == 'trip:OCETrainTER-87212027-85000109-3:11859'
        assert db_trip_partial_removed.vj.get_start_timestamp() == datetime(
            2015, 9, 21, 15, 21, tzinfo=utc)
        assert db_trip_partial_removed.vj_id == db_trip_partial_removed.vj.id
        assert db_trip_partial_removed.status == 'update'
        # 6 stop times must have been created
        assert len(db_trip_partial_removed.stop_time_updates) == 6

        # the first stop (in Strasbourg) is not in the feed, only on navitia's base schedule
        # no delay then, only base schedule
        # Navitia's time are in local, so departure 17h21 in paris is 15h21 in UTC
        first_st = db_trip_partial_removed.stop_time_updates[0]
        assert first_st.stop_id == 'stop_point:OCE:SP:TrainTER-87212027'
        assert first_st.arrival == datetime(2015, 9, 21, 15, 21)
        assert first_st.arrival_status == 'none'
        assert first_st.arrival_delay == timedelta(0)
        assert first_st.departure == datetime(2015, 9, 21, 15, 21)
        assert first_st.departure_delay == timedelta(0)
        assert first_st.departure_status == 'none'
        assert first_st.message is None

        # the departure time has been updated with a delay at 0
        second_st = db_trip_partial_removed.stop_time_updates[1]
        assert second_st.stop_id == 'stop_point:OCE:SP:TrainTER-87214056'
        assert second_st.arrival == datetime(2015, 9, 21, 15, 38)
        assert second_st.arrival_status == 'none'
        assert second_st.arrival_delay == timedelta(0)
        assert second_st.departure == datetime(2015, 9, 21, 15, 40)
        assert second_st.departure_delay == timedelta(minutes=0)
        assert second_st.departure_status == 'none'

        # the departure time has been updated with a delay at 0
        second_st = db_trip_partial_removed.stop_time_updates[2]
        assert second_st.stop_id == 'stop_point:OCE:SP:TrainTER-87182014'
        assert second_st.arrival == datetime(2015, 9, 21, 15, 51)
        assert second_st.arrival_status == 'none'
        assert second_st.arrival_delay == timedelta(0)
        assert second_st.departure == datetime(2015, 9, 21, 15, 53)
        assert second_st.departure_delay == timedelta(minutes=0)
        assert second_st.departure_status == 'none'

        # At 4th stop, only departure is deleted
        second_st = db_trip_partial_removed.stop_time_updates[3]
        assert second_st.stop_id == 'stop_point:OCE:SP:TrainTER-87182063'
        assert second_st.arrival == datetime(2015, 9, 21, 16, 14)
        assert second_st.arrival_status == 'none'
        assert second_st.arrival_delay == timedelta(0)
        assert second_st.departure_status == 'delete'

        # All the 5th stop is deleted
        third_st = db_trip_partial_removed.stop_time_updates[4]
        assert third_st.stop_id == 'stop_point:OCE:SP:TrainTER-87182139'
        assert third_st.arrival_status == 'delete'
        assert third_st.departure_status == 'delete'

        # last stop is gare de Basel-SBB, the arrival is also deleted
        last_st = db_trip_partial_removed.stop_time_updates[5]
        assert last_st.stop_id == 'stop_point:OCE:SP:TrainTER-85000109'
        assert last_st.arrival_status == 'delete'
        # The departure should be the same than the base-schedule one
        assert last_st.departure == datetime(2015, 9, 21, 16, 39)
        assert last_st.departure_delay == timedelta(minutes=0)
        assert last_st.departure_status == 'none'

        assert db_trip_partial_removed.contributor == contributor