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))
Exemplo n.º 2
0
 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))