def _get_navitia_vjs(self, trip, data_time): vj_source_code = trip.trip_id since = floor_datetime(data_time - self.period_filter_tolerance) until = floor_datetime(data_time + self.period_filter_tolerance + datetime.timedelta(hours=1)) self.log.debug('searching for vj {} on [{}, {}] in navitia'.format( vj_source_code, since, until)) return self._make_db_vj(vj_source_code, since, until)
def _build_one_trip_update(self, gtfsrt_trip_update, gtfsrt_data_time): """ Build the smallest TripUpdate from GTFSRT trip, don't try to fill missing information yet Goal is to just convert information to Kirin's model (and add navitia PT objects information, like navitia ids, etc.) """ if not gtfsrt_trip_update.HasField("trip") or not gtfsrt_trip_update.trip.HasField("trip_id"): # TODO: log and count in NR return None # Processing only scheduled trips currently if ( gtfsrt_trip_update.trip.HasField("schedule_relationship") and gtfsrt_trip_update.trip.schedule_relationship != gtfs_realtime_pb2.TripDescriptor.SCHEDULED ): # TODO: log and count in NR return None since_dt = floor_datetime(gtfsrt_data_time - self.period_filter_tolerance) until_dt = floor_datetime(gtfsrt_data_time + self.period_filter_tolerance + datetime.timedelta(hours=1)) self.log.info("get_nav_vj") vj = self._get_navitia_vj(gtfsrt_trip_update.trip.trip_id, since_dt=since_dt, until_dt=until_dt) if vj is None: # if not able to find the base-schedule trip, reject GTFSRT trip as no ADD is handled # TODO: log and count in NR return None trip_update = model.TripUpdate(vj=vj, contributor_id=self.contributor.id) if gtfsrt_trip_update.trip.HasField("schedule_relationship"): trip_effect = trip_gtfsrt_status_to_effect.get(gtfsrt_trip_update.trip.schedule_relationship) if trip_effect is not None: trip_update.effect = trip_effect.name trip_update.status = get_trip_status_from_effect(trip_update.effect) # this variable is used to store the last stop_time's departure in order to check the stop_time consistency # ex. stop_time[i].arrival/departure must be greater than stop_time[i-1].departure previous_rt_stop_event_time = timestamp_to_utc_naive_dt(0) for gtfsrt_stop in gtfsrt_trip_update.stop_time_update: try: st_update, last_stop_event_time = self._build_one_stop_time_update( gtfsrt_stop=gtfsrt_stop, nav_vj=vj.navitia_vj, previous_rt_stop_event_time=previous_rt_stop_event_time, ) if None not in [st_update, last_stop_event_time]: trip_update.stop_time_updates.append(st_update) previous_rt_stop_event_time = last_stop_event_time except Exception as _: del trip_update.stop_time_updates[:] raise return trip_update