def _write_lap_entry(self, fit_file, message_fields, lap_num): # we don't get laps data from multiple sources so we don't need to coellesce data in the DB. # It's fastest to just write new data out if the it doesn't currently exist. activity_id = GarminDB.File.id_from_path(fit_file.filename) plugin_lap = self._plugin_dispatch('write_lap_entry', self.garmin_act_db_session, fit_file, activity_id, message_fields, lap_num) if not GarminDB.ActivityLaps.s_exists(self.garmin_act_db_session, {'activity_id' : activity_id, 'lap' : lap_num}): lap = { 'activity_id' : GarminDB.File.id_from_path(fit_file.filename), 'lap' : lap_num, 'start_time' : fit_file.utc_datetime_to_local(message_fields.start_time), 'stop_time' : fit_file.utc_datetime_to_local(message_fields.timestamp), 'elapsed_time' : self._get_field_value(message_fields, 'total_elapsed_time'), 'moving_time' : self._get_field_value(message_fields, 'total_timer_time'), 'start_lat' : self._get_field_value(message_fields, 'start_position_lat'), 'start_long' : self._get_field_value(message_fields, 'start_position_long'), 'stop_lat' : self._get_field_value(message_fields, 'end_position_lat'), 'stop_long' : self._get_field_value(message_fields, 'end_position_long'), 'distance' : self._get_field_value(message_fields, 'total_distance'), 'cycles' : self._get_field_value(message_fields, 'total_cycles'), 'avg_hr' : self._get_field_value(message_fields, 'avg_heart_rate'), 'max_hr' : self._get_field_value(message_fields, 'max_heart_rate'), 'avg_rr' : self._get_field_value(message_fields, 'avg_respiration_rate'), 'max_rr' : self._get_field_value(message_fields, 'max_respiration_rate'), 'calories' : self._get_field_value(message_fields, 'total_calories'), 'avg_cadence' : self._get_field_value(message_fields, 'avg_cadence'), 'max_cadence' : self._get_field_value(message_fields, 'max_cadence'), 'avg_speed' : self._get_field_value(message_fields, 'avg_speed'), 'max_speed' : self._get_field_value(message_fields, 'max_speed'), 'ascent' : self._get_field_value(message_fields, 'total_ascent'), 'descent' : self._get_field_value(message_fields, 'total_descent'), 'max_temperature' : self._get_field_value(message_fields, 'max_temperature'), 'avg_temperature' : self._get_field_value(message_fields, 'avg_temperature'), } lap.update(plugin_lap) self.garmin_act_db_session.add(GarminDB.ActivityLaps(**lap))
def _write_lap_entry(self, fit_file, message_dict): # we don't get laps data from multiple sources so we don't need to coellesce data in the DB. # It's fastest to just write new data out if the it doesn't currently exist. activity_id = GarminDB.File.id_from_path(fit_file.filename) if not GarminDB.ActivityLaps.s_exists(self.garmin_act_db_session, { 'activity_id': activity_id, 'lap': self.lap }): lap = { 'activity_id': GarminDB.File.id_from_path(fit_file.filename), 'lap': self.lap, 'start_time': self.__get_field_value(message_dict, 'start_time'), 'stop_time': self.__get_field_value(message_dict, 'timestamp'), 'elapsed_time': self.__get_field_value(message_dict, 'total_elapsed_time'), 'moving_time': self.__get_field_value(message_dict, 'total_timer_time'), 'start_lat': self.__get_field_value(message_dict, 'start_position_lat'), 'start_long': self.__get_field_value(message_dict, 'start_position_long'), 'stop_lat': self.__get_field_value(message_dict, 'end_position_lat'), 'stop_long': self.__get_field_value(message_dict, 'end_position_long'), 'distance': self.__get_field_list_value( message_dict, ['user_distance', 'total_distance']), 'cycles': self.__get_field_value(message_dict, 'total_cycles'), 'avg_hr': self.__get_field_value(message_dict, 'avg_heart_rate'), 'max_hr': self.__get_field_value(message_dict, 'max_heart_rate'), 'calories': self.__get_field_value(message_dict, 'total_calories'), 'avg_cadence': self.__get_field_value(message_dict, 'avg_cadence'), 'max_cadence': self.__get_field_value(message_dict, 'max_cadence'), 'avg_speed': self.__get_field_value(message_dict, 'avg_speed'), 'max_speed': self.__get_field_value(message_dict, 'max_speed'), 'ascent': self.__get_field_value(message_dict, 'total_ascent'), 'descent': self.__get_field_value(message_dict, 'total_descent'), 'max_temperature': self.__get_field_value(message_dict, 'max_temperature'), 'avg_temperature': self.__get_field_value(message_dict, 'avg_temperature'), } self.garmin_act_db_session.add(GarminDB.ActivityLaps(**lap)) self.lap += 1
def __process_lap(self, tcx, activity_id, lap_number, lap): root_logger.info("Processing lap: %d", lap_number) for record_number, point in enumerate(tcx.get_lap_points(lap)): self.__process_record(tcx, activity_id, record_number, point) if not GarminDB.ActivityLaps.s_exists(self.garmin_act_db_session, { 'activity_id': activity_id, 'lap': lap_number }): lap_data = { 'activity_id': activity_id, 'lap': lap_number, 'start_time': tcx.get_lap_start(lap), 'stop_time': tcx.get_lap_end(lap), 'elapsed_time': tcx.get_lap_duration(lap), 'distance': tcx.get_lap_distance(lap).meters_or_feet( measurement_system=self.measurement_system), 'calories': tcx.get_lap_calories(lap) } start_loc = tcx.get_lap_start_loc(lap) if start_loc is not None: lap_data.update({ 'start_lat': start_loc.lat_deg, 'start_long': start_loc.long_deg }) end_loc = tcx.get_lap_end_loc(lap) if end_loc is not None: lap_data.update({ 'stop_lat': end_loc.lat_deg, 'stop_long': end_loc.long_deg }) root_logger.info("Inserting lap: %r (%d): %r", lap, lap_number, lap_data) self.garmin_act_db_session.add(GarminDB.ActivityLaps(**lap_data))