def process(self, db_params):
     """Process database data for an activity into a an XML tree in TCX format."""
     garmin_act_db = GarminDB.ActivitiesDB(db_params, self.debug - 1)
     with garmin_act_db.managed_session() as garmin_act_db_session:
         activity = GarminDB.Activities.s_get(garmin_act_db_session,
                                              self.activity_id)
         self.tcx = GarminDbTcx()
         self.tcx.create(activity.sport, activity.start_time)
         laps = GarminDB.ActivityLaps.s_get_activity(
             garmin_act_db_session, self.activity_id)
         records = GarminDB.ActivityRecords.s_get_activity(
             garmin_act_db_session, self.activity_id)
         for lap in laps:
             distance = Distance.from_meters_or_feet(
                 lap.distance, self.measurement_system)
             track = self.tcx.add_lap(lap.start_time, lap.stop_time,
                                      distance, lap.calories)
             for record in records:
                 if record.timestamp >= lap.start_time and record.timestamp <= lap.stop_time:
                     alititude = Distance.from_meters_or_feet(
                         record.altitude, self.measurement_system)
                     speed = Speed.from_kph_or_mph(record.speed,
                                                   self.measurement_system)
                     self.tcx.add_point(track, record.timestamp,
                                        record.position, alititude,
                                        record.hr, speed)
     garmindb = GarminDB.GarminDB(db_params)
     with garmindb.managed_session() as garmin_db_session:
         file = GarminDB.File.s_get(garmin_db_session, self.activity_id)
         device = GarminDB.Device.s_get(garmin_db_session,
                                        file.serial_number)
         self.tcx.add_creator(device.product, file.serial_number)
Example #2
0
 def test_fit_file_import(self):
     db_params = GarminDBConfigManager.get_db_params(test_db=True)
     self.profile_function('fit_mon_import', self.fit_file_import, db_params)
     test_mon_db = GarminDB.GarminDB(db_params)
     self.check_db_tables_exists(test_mon_db, {'device_table' : GarminDB.Device})
     self.check_db_tables_exists(test_mon_db, {'file_table' : GarminDB.File, 'device_info_table' : GarminDB.DeviceInfo}, self.gfd_file_count)
     table_not_none_cols_dict = {GarminDB.Monitoring : [GarminDB.Monitoring.timestamp, GarminDB.Monitoring.activity_type, GarminDB.Monitoring.duration]}
     self.check_not_none_cols(GarminDB.MonitoringDB(db_params), table_not_none_cols_dict)
 def __init__(self, db_params_dict, debug):
     self.garmindb = GarminDB.GarminDB(db_params_dict, debug)
     self.mondb = GarminDB.MonitoringDB(db_params_dict, debug)
     self.garminsumdb = GarminDB.GarminSummaryDB(db_params_dict, debug)
     self.sumdb = HealthDB.SummaryDB(db_params_dict, debug)
     self.garmin_act_db = GarminDB.ActivitiesDB(db_params_dict, debug)
     self.english_units = (GarminDB.Attributes.get(
         self.garmindb, 'dist_setting') == 'statute')
Example #4
0
 def __init__(self, db_params_dict, debug):
     self.garmin_db = GarminDB.GarminDB(db_params_dict, debug)
     self.garmin_mon_db = GarminDB.MonitoringDB(db_params_dict, debug)
     self.garmin_sum_db = GarminDB.GarminSummaryDB(db_params_dict, debug)
     self.sum_db = HealthDB.SummaryDB(db_params_dict, debug)
     self.garmin_act_db = GarminDB.ActivitiesDB(db_params_dict, debug)
     self.measurement_system = GarminDB.Attributes.measurements_type(
         self.garmin_db)
Example #5
0
 def __init__(self, db_params_dict, debug):
     self.garmindb = GarminDB.GarminDB(db_params_dict, debug)
     self.mondb = GarminDB.MonitoringDB(db_params_dict, debug)
     self.garminsumdb = GarminDB.GarminSummaryDB(db_params_dict, debug)
     self.sumdb = HealthDB.SummaryDB(db_params_dict, debug)
     self.garmin_act_db = GarminDB.ActivitiesDB(db_params_dict, debug)
     self.english_units = (GarminDB.Attributes.measurements_type_metric(
         self.garmindb) == False)
Example #6
0
 def __init__(self, db_params_dict, debug):
     """Return an instance of the Analyze class."""
     self.garmin_db = GarminDB.GarminDB(db_params_dict, debug)
     self.garmin_mon_db = GarminDB.MonitoringDB(db_params_dict, debug)
     self.garmin_sum_db = GarminDB.GarminSummaryDB(db_params_dict, debug)
     self.sum_db = HealthDB.SummaryDB(db_params_dict, debug)
     self.garmin_act_db = GarminDB.ActivitiesDB(db_params_dict, debug)
     self.measurement_system = GarminDB.Attributes.measurements_type(self.garmin_db)
 def test_fit_file_import(self):
     db_params_dict = GarminDBConfigManager.get_db_params(test_db=True)
     self.profile_function('fit_activities_import', self.fit_file_import, db_params_dict)
     test_mon_db = GarminDB.GarminDB(db_params_dict)
     self.check_db_tables_exists(test_mon_db, {'device_table' : GarminDB.Device})
     self.check_db_tables_exists(test_mon_db, {'file_table' : GarminDB.File, 'device_info_table' : GarminDB.DeviceInfo}, self.gfd_file_count)
     self.check_not_none_cols(GarminDB.ActivitiesDB(db_params_dict),
         {GarminDB.Activities : [GarminDB.Activities.start_time, GarminDB.Activities.stop_time, GarminDB.Activities.elapsed_time]}
     )
Example #8
0
    def __init__(self, db_params_dict, debug):
        logger.info("Debug: %s", str(debug))
        self.db_params_dict = db_params_dict
        self.debug = debug

        self.garmin_db = GarminDB.GarminDB(db_params_dict, debug - 1)
        self.garmin_mon_db = GarminDB.MonitoringDB(self.db_params_dict,
                                                   self.debug - 1)
        self.garmin_act_db = GarminDB.ActivitiesDB(self.db_params_dict,
                                                   self.debug - 1)
Example #9
0
 def process_files(self, db_params_dict):
     """Import data from files into the databse."""
     garmin_db = GarminDB.GarminDB(db_params_dict, self.debug - 1)
     garmin_act_db = GarminDB.ActivitiesDB(db_params_dict, self.debug)
     with garmin_db.managed_session() as self.garmin_db_session:
         with garmin_act_db.managed_session() as self.garmin_act_db_session:
             for file_name in progressbar.progressbar(self.file_names):
                 self.__process_file(file_name)
                 self.garmin_db_session.commit()
                 self.garmin_act_db_session.commit()
 def process_files(self, db_params):
     """Import data from TCX files into the database."""
     garmin_db = GarminDB.GarminDB(db_params, self.debug - 1)
     garmin_act_db = GarminDB.ActivitiesDB(db_params, self.debug - 1)
     with garmin_db.managed_session() as self.garmin_db_session, garmin_act_db.managed_session() as self.garmin_act_db_session:
         for file_name in tqdm(self.file_names, unit='files'):
             try:
                 self.__process_file(file_name)
             except Exception as e:
                 logger.error('Failed to processes file %s: %s', file_name, e)
             self.garmin_db_session.commit()
             self.garmin_act_db_session.commit()
Example #11
0
def download_data(overwite, latest, stats):
    """Download selected activity types from Garmin Connect and save the data in files. Overwrite previously downloaded data if indicated."""
    logger.info("___Downloading %s Data___", 'Latest' if latest else 'All')
    db_params_dict = GarminDBConfigManager.get_db_params()

    download = Download()
    if not download.login():
        logger.error("Failed to login!")
        sys.exit()

    if Statistics.activities in stats:
        if latest:
            activity_count = gc_config.latest_activity_count()
        else:
            activity_count = gc_config.all_activity_count()
        activities_dir = GarminDBConfigManager.get_or_create_activities_dir()
        root_logger.info("Fetching %d activities to %s", activity_count, activities_dir)
        download.get_activity_types(activities_dir, overwite)
        download.get_activities(activities_dir, activity_count, overwite)

    if Statistics.monitoring in stats:
        date, days = __get_date_and_days(GarminDB.MonitoringDB(db_params_dict), latest, GarminDB.MonitoringHeartRate, GarminDB.MonitoringHeartRate.heart_rate, 'monitoring')
        if days > 0:
            root_logger.info("Date range to update: %s (%d) to %s", date, days, GarminDBConfigManager.get_monitoring_base_dir())
            download.get_daily_summaries(GarminDBConfigManager.get_or_create_monitoring_dir, date, days, overwite)
            download.get_hydration(GarminDBConfigManager.get_or_create_monitoring_dir, date, days, overwite)
            download.get_monitoring(GarminDBConfigManager.get_or_create_monitoring_dir, date, days)
            root_logger.info("Saved monitoring files for %s (%d) to %s for processing", date, days, GarminDBConfigManager.get_monitoring_base_dir())

    if Statistics.sleep in stats:
        date, days = __get_date_and_days(GarminDB.GarminDB(db_params_dict), latest, GarminDB.Sleep, GarminDB.Sleep.total_sleep, 'sleep')
        if days > 0:
            sleep_dir = GarminDBConfigManager.get_or_create_sleep_dir()
            root_logger.info("Date range to update: %s (%d) to %s", date, days, sleep_dir)
            download.get_sleep(sleep_dir, date, days, overwite)
            root_logger.info("Saved sleep files for %s (%d) to %s for processing", date, days, sleep_dir)

    if Statistics.weight in stats:
        date, days = __get_date_and_days(GarminDB.GarminDB(db_params_dict), latest, GarminDB.Weight, GarminDB.Weight.weight, 'weight')
        if days > 0:
            weight_dir = GarminDBConfigManager.get_or_create_weight_dir()
            root_logger.info("Date range to update: %s (%d) to %s", date, days, weight_dir)
            download.get_weight(weight_dir, date, days, overwite)
            root_logger.info("Saved weight files for %s (%d) to %s for processing", date, days, weight_dir)

    if Statistics.rhr in stats:
        date, days = __get_date_and_days(GarminDB.GarminDB(db_params_dict), latest, GarminDB.RestingHeartRate, GarminDB.RestingHeartRate.resting_heart_rate, 'rhr')
        if days > 0:
            rhr_dir = GarminDBConfigManager.get_or_create_rhr_dir()
            root_logger.info("Date range to update: %s (%d) to %s", date, days, rhr_dir)
            download.get_rhr(rhr_dir, date, days, overwite)
            root_logger.info("Saved rhr files for %s (%d) to %s for processing", date, days, rhr_dir)
    def __init__(self, db_params, debug):
        """
        Return a new FitFileProcessor instance.

        Paramters:
        db_params (dict): database access configuration
        debug (Boolean): if True, debug logging is enabled
        """
        root_logger.info("Debug: %s", debug)
        self.debug = debug
        self.garmin_db = GarminDB.GarminDB(db_params, debug - 1)
        self.garmin_mon_db = GarminDB.MonitoringDB(db_params, self.debug - 1)
        self.garmin_act_db = GarminDB.ActivitiesDB(db_params, self.debug - 1)
Example #13
0
    def __init__(self, db_params_dict, english_units, debug):
        self.db_params_dict = db_params_dict
        self.english_units = english_units
        self.debug = debug

        self.garmin_db = GarminDB.GarminDB(db_params_dict, debug - 1)
        self.garmin_mon_db = GarminDB.MonitoringDB(self.db_params_dict, self.debug - 1)
        self.garmin_act_db = GarminDB.ActivitiesDB(self.db_params_dict, self.debug - 1)

        if english_units:
            GarminDB.Attributes.set_newer(self.garmin_db, 'dist_setting', 'statute')
        else:
            GarminDB.Attributes.set_newer(self.garmin_db, 'dist_setting', 'metric')
        logger.info("Debug: %s English units: %s" % (str(debug), str(english_units)))
 def setUpClass(cls):
     cls.garmin_act_db = GarminDB.ActivitiesDB(GarminDBConfigManager.get_db_params())
     table_dict = {
         'activities_table' : GarminDB.Activities,
         'activity_laps_table' : GarminDB.ActivityLaps,
         'activity_records_table' : GarminDB.ActivityRecords,
         'run_activities_table' : GarminDB.StepsActivities,
         'paddle_activities_table' : GarminDB.PaddleActivities,
         'cycle_activities_table' : GarminDB.CycleActivities,
         'elliptical_activities_table' : GarminDB.EllipticalActivities
     }
     super().setUpClass(cls.garmin_act_db, table_dict, {GarminDB.Activities : [GarminDB.Activities.name]})
     cls.test_db_params = GarminDBConfigManager.get_db_params(test_db=True)
     cls.test_mon_db = GarminDB.GarminDB(cls.test_db_params)
     cls.test_act_db = GarminDB.ActivitiesDB(cls.test_db_params)
     cls.measurement_system = Fit.field_enums.DisplayMeasure.statute
 def __init__(self, db_params_dict, input_file, input_dir, latest,
              english_units, debug):
     GarminJsonData.__init__(self, input_file, input_dir,
                             'activity_details_\\d*\.json', latest,
                             english_units, debug)
     self.garmin_act_db = GarminDB.ActivitiesDB(db_params_dict,
                                                self.debug - 1)
 def __process_record(self, tcx, activity_id, record_number, point):
     root_logger.debug("Processing record: %r (%d)", point, record_number)
     if not GarminDB.ActivityRecords.s_exists(self.garmin_act_db_session, {
             'activity_id': activity_id,
             'record': record_number
     }):
         record = {
             'activity_id':
             activity_id,
             'record':
             record_number,
             'timestamp':
             tcx.get_point_time(point),
             'hr':
             tcx.get_point_hr(point),
             'altitude':
             tcx.get_point_altitude(point).meters_or_feet(
                 measurement_system=self.measurement_system),
             'speed':
             tcx.get_point_speed(point).kph_or_mph(
                 measurement_system=self.measurement_system)
         }
         loc = tcx.get_point_loc(point)
         if loc is not None:
             record.update({
                 'position_lat': loc.lat_deg,
                 'position_long': loc.long_deg
             })
         self.garmin_act_db_session.add(GarminDB.ActivityRecords(**record))
Example #17
0
 def graph_date(self, date):
     """Generate a graph for the given date."""
     if date is None:
         date = (datetime.datetime.now() - datetime.timedelta(days=1)).date()
     db_params = GarminDBConfigManager.get_db_params()
     mon_db = GarminDB.MonitoringDB(db_params, self.debug)
     start_ts = datetime.datetime.combine(date, datetime.datetime.min.time())
     end_ts = datetime.datetime.combine(date, datetime.datetime.max.time())
     hr_data = GarminDB.MonitoringHeartRate.get_for_period(mon_db, start_ts, end_ts, GarminDB.MonitoringHeartRate)
     data = GarminDB.Monitoring.get_for_period(mon_db, start_ts, end_ts, GarminDB.Monitoring)
     over_data_dict = [
         {
             'label'     : 'Cumulative Steps',
             'time'      : [entry.timestamp for entry in data],
             'data'      : self.__format_steps(data),
         },
         {
             'label'     : 'Heart Rate',
             'time'      : [entry.timestamp for entry in hr_data],
             'data'      : [entry.heart_rate for entry in hr_data],
             'limits'    : (30, 220)
         }
     ]
     under_data_dict = {
         'time'      : [entry.timestamp for entry in data],
         'data'      : self.__remove_discontinuities([entry.intensity for entry in data]),
         'limits'    : (0, 10)
     }
     # self.__graph_day(date, (hr_time, hr), (mon_time, activity), self.save)
     save_name = f"{date}_daily.png" if self.save else None
     self.__graph_over(date, over_data_dict, under_data_dict, f'Daily Summary for {date}: Heart Rate and Steps over Activity',
                       'Time of Day', 'heart rate', save_name=save_name)
Example #18
0
 def test_garmin_mon_db_steps_bounds(self):
     garmin_mon_db = GarminDB.MonitoringDB(self.db_params_dict)
     min = GarminDB.Monitoring.get_col_min(garmin_mon_db, GarminDB.Monitoring.steps)
     self.assertGreater(min, 0)
     max = GarminDB.Monitoring.get_col_max(garmin_mon_db, GarminDB.Monitoring.steps)
     self.assertGreater(max, 0)
     self.assertLess(max, 100000)
Example #19
0
    def __init__(self, db_params, input_dir, latest, measurement_system,
                 debug):
        """
        Return an instance of GarminSummaryData.

        Parameters:
        ----------
        db_params (dict): configuration data for accessing the database
        input_dir (string): directory (full path) to check for data files
        latest (Boolean): check for latest files only
        measurement_system (enum): which measurement system to use when importing the files
        debug (Boolean): enable debug logging

        """
        logger.info("Processing daily summary data")
        super().__init__(r'daily_summary_\d{4}-\d{2}-\d{2}\.json',
                         input_dir=input_dir,
                         latest=latest,
                         debug=debug,
                         recursive=True)
        self.input_dir = input_dir
        self.measurement_system = measurement_system
        self.garmin_db = GarminDB.GarminDB(db_params)
        self.conversions = {
            'calendarDate': dateutil.parser.parse,
            'moderateIntensityMinutes': Fit.conversions.min_to_dt_time,
            'vigorousIntensityMinutes': Fit.conversions.min_to_dt_time,
            'intensityMinutesGoal': Fit.conversions.min_to_dt_time,
        }
Example #20
0
 def test_garmin_mon_db_tables_exists(self):
     garmin_mon_db = GarminDB.MonitoringDB(self.db_params_dict)
     self.assertGreater(GarminDB.MonitoringInfo.row_count(garmin_mon_db), 0)
     self.assertGreater(GarminDB.MonitoringHeartRate.row_count(garmin_mon_db), 0)
     self.assertGreater(GarminDB.MonitoringIntensity.row_count(garmin_mon_db), 0)
     self.assertGreater(GarminDB.MonitoringClimb.row_count(garmin_mon_db), 0)
     self.assertGreater(GarminDB.Monitoring.row_count(garmin_mon_db), 0)
Example #21
0
 def goals(self):
     """Do a checkup of th euser's goals."""
     garmin_db = GarminDB.GarminDB(self.db_params_dict, self.debug)
     look_back_days = GarminDBConfigManager.checkup('look_back_days')
     end_ts = datetime.now()
     start_ts = end_ts - timedelta(days=look_back_days)
     results = GarminDB.DailySummary.get_for_period(garmin_db, start_ts,
                                                    end_ts)
     step_goal_days = 0
     floors_goal_days = 0
     intensity_days = 0
     intensity_weeks = 0
     intensity_time_goal_percent = 0
     intensity_goal_weeks = 0
     for result in results:
         if result.steps_goal_percent >= 100:
             step_goal_days += 1
         if result.floors_goal_percent >= 100:
             floors_goal_days += 1
         if result.day.weekday() == 0:
             intensity_days = 0
         intensity_time_goal_percent += result.intensity_time_goal_percent
         intensity_days += 1
         if result.day.weekday() == 6:
             if intensity_days == 7:
                 intensity_weeks += 1
                 if intensity_time_goal_percent >= 100:
                     intensity_goal_weeks += 1
     logger.info('Steps: on goal %d of %d days', step_goal_days,
                 look_back_days)
     logger.info('Floors: on goal %d of %d days', floors_goal_days,
                 look_back_days)
     logger.info('Intensity mins: on goal %d of %d weeks',
                 intensity_goal_weeks, intensity_weeks)
Example #22
0
    def __init__(self, db_params, input_dir, latest, debug):
        """
        Return an instance of GarminSleepData.

        Parameters:
        ----------
        db_params (object): configuration data for accessing the database
        input_dir (string): directory (full path) to check for sleep data files
        latest (Boolean): check for latest files only
        debug (Boolean): enable debug logging

        """
        logger.info("Processing sleep data")
        super().__init__(r'sleep_\d{4}-\d{2}-\d{2}\.json',
                         input_dir=input_dir,
                         latest=latest,
                         debug=debug)
        self.garmin_db = GarminDB.GarminDB(db_params)
        self.conversions = {
            'calendarDate': dateutil.parser.parse,
            'sleepTimeSeconds': Fit.conversions.secs_to_dt_time,
            'sleepStartTimestampGMT': Fit.conversions.epoch_ms_to_dt,
            'sleepEndTimestampGMT': Fit.conversions.epoch_ms_to_dt,
            'deepSleepSeconds': Fit.conversions.secs_to_dt_time,
            'lightSleepSeconds': Fit.conversions.secs_to_dt_time,
            'remSleepSeconds': Fit.conversions.secs_to_dt_time,
            'awakeSleepSeconds': Fit.conversions.secs_to_dt_time,
            'startGMT': dateutil.parser.parse,
            'endGMT': dateutil.parser.parse
        }
 def _write_record_entry(self, fit_file, message_dict):
     # We don't get record data from multiple sources so we don't need to coellesce data in the DB.
     # It's fastest to just write the new data out if it doesn't currently exist.
     activity_id = GarminDB.File.id_from_path(fit_file.filename)
     if not GarminDB.ActivityRecords.s_exists(self.garmin_act_db_session, {
             'activity_id': activity_id,
             'record': self.record
     }):
         record = {
             'activity_id':
             activity_id,
             'record':
             self.record,
             'timestamp':
             self.__get_field_value(message_dict, 'timestamp'),
             'position_lat':
             self.__get_field_value(message_dict, 'position_lat'),
             'position_long':
             self.__get_field_value(message_dict, 'position_long'),
             'distance':
             self.__get_field_value(message_dict, 'distance'),
             'cadence':
             self.__get_field_value(message_dict, 'cadence'),
             'hr':
             self.__get_field_value(message_dict, 'heart_rate'),
             'alititude':
             self.__get_field_value(message_dict, 'altitude'),
             'speed':
             self.__get_field_value(message_dict, 'speed'),
             'temperature':
             self.__get_field_value(message_dict, 'temperature'),
         }
         self.garmin_act_db_session.add(GarminDB.ActivityRecords(**record))
         self.record += 1
 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))
Example #25
0
 def __init__(self, debug):
     """Return an instance of the CheckUp class."""
     self.db_params = GarminDBConfigManager.get_db_params()
     self.debug = debug
     self.garmin_db = GarminDB.GarminDB(self.db_params)
     self.measurement_system = GarminDB.Attributes.measurements_type(self.garmin_db)
     self.unit_strings = Fit.units.unit_strings[self.measurement_system]
 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 test_summary_json_file_import(self):
     db_params_dict = GarminDBConfigManager.get_db_params(test_db=True)
     gjsd = GarminJsonSummaryData(db_params_dict, 'test_files/json/activity/summary', latest=False, measurement_system=Fit.field_enums.DisplayMeasure.statute, debug=2)
     if gjsd.file_count() > 0:
         gjsd.process()
     self.check_not_none_cols(GarminDB.ActivitiesDB(db_params_dict),
         {GarminDB.Activities : [GarminDB.Activities.name, GarminDB.Activities.type, GarminDB.Activities.sport, GarminDB.Activities.sub_sport]}
     )
Example #28
0
def export_activity(debug, directory, export_activity_id):
    """Export an activity given its database id."""
    db_params_dict = GarminDBConfigManager.get_db_params()
    garmindb = GarminDB.GarminDB(db_params_dict)
    measurement_system = GarminDB.Attributes.measurements_type(garmindb)
    ae = ActivityExporter(directory, export_activity_id, measurement_system, debug)
    ae.process(db_params_dict)
    return ae.write('activity_%s.tcx' % export_activity_id)
Example #29
0
 def test_summary_json_file_import(self):
     db_params = GarminDBConfigManager.get_db_params(test_db=True)
     gjsd = GarminSummaryData(db_params, 'test_files/json/monitoring/summary', latest=False, measurement_system=Fit.field_enums.DisplayMeasure.statute, debug=2)
     if gjsd.file_count() > 0:
         gjsd.process()
     table_not_none_cols_dict = {
         GarminDB.DailySummary : [GarminDB.DailySummary.rhr, GarminDB.DailySummary.distance, GarminDB.DailySummary.steps, GarminDB.DailySummary.floors_goal]
     }
     self.check_not_none_cols(GarminDB.GarminDB(db_params), table_not_none_cols_dict)
Example #30
0
 def test_garminsumdb_cols_have_values(self):
     garminsumdb = GarminDB.GarminSummaryDB(self.db_params_dict)
     self.assertGreater(
         GarminDB.MonthsSummary.get_col_max(garminsumdb,
                                            GarminDB.MonthsSummary.hr_avg),
         0)
     self.assertGreater(
         GarminDB.MonthsSummary.get_col_max(garminsumdb,
                                            GarminDB.MonthsSummary.hr_min),
         0)
     self.assertGreater(
         GarminDB.MonthsSummary.get_col_max(garminsumdb,
                                            GarminDB.MonthsSummary.hr_max),
         0)
     self.assertGreater(
         GarminDB.MonthsSummary.get_col_max(garminsumdb,
                                            GarminDB.MonthsSummary.rhr_avg),
         0)
     self.assertGreater(
         GarminDB.MonthsSummary.get_col_max(garminsumdb,
                                            GarminDB.MonthsSummary.rhr_min),
         0)
     self.assertGreater(
         GarminDB.MonthsSummary.get_col_max(garminsumdb,
                                            GarminDB.MonthsSummary.rhr_max),
         0)
     self.assertGreater(
         GarminDB.MonthsSummary.get_col_max(
             garminsumdb, GarminDB.MonthsSummary.weight_avg), 0)
     self.assertGreater(
         GarminDB.MonthsSummary.get_col_max(
             garminsumdb, GarminDB.MonthsSummary.weight_min), 0)
     self.assertGreater(
         GarminDB.MonthsSummary.get_col_max(
             garminsumdb, GarminDB.MonthsSummary.weight_max), 0)
     self.assertGreater(
         GarminDB.MonthsSummary.get_col_max(
             garminsumdb, GarminDB.MonthsSummary.stress_avg), 0)
     self.assertGreater(
         GarminDB.MonthsSummary.get_col_max(
             garminsumdb, GarminDB.MonthsSummary.calories_avg), 0)
     self.assertGreater(
         GarminDB.MonthsSummary.get_col_max(
             garminsumdb, GarminDB.MonthsSummary.calories_bmr_avg), 0)
     self.assertGreater(
         GarminDB.MonthsSummary.get_col_max(
             garminsumdb, GarminDB.MonthsSummary.calories_active_avg), 0)
     self.assertGreater(
         GarminDB.MonthsSummary.get_col_max(
             garminsumdb, GarminDB.MonthsSummary.activities), 0)
     self.assertGreater(
         GarminDB.MonthsSummary.get_col_max(
             garminsumdb, GarminDB.MonthsSummary.activities_calories), 0)
     self.assertGreater(
         GarminDB.MonthsSummary.get_col_max(
             garminsumdb, GarminDB.MonthsSummary.activities_distance), 0)