diff --git a/garminexport/backup.py b/garminexport/backup.py index 709cb28..8ad01b7 100644 --- a/garminexport/backup.py +++ b/garminexport/backup.py @@ -88,7 +88,7 @@ def _not_found_activities(backup_dir): if os.path.isfile(_not_found): with open(_not_found, mode="r") as f: failed_activities = [line.strip() for line in f.readlines()] - log.debug("{} tried but failed activities in {}".format(len(failed_activities), _not_found)) + log.debug("%d tried but failed activities in %s", len(failed_activities), _not_found) return failed_activities @@ -117,7 +117,7 @@ def download(client, activity, retryer, backup_dir, export_formats=None): id = activity[0] if 'json_summary' in export_formats: - log.debug("getting json summary for {}".format(id)) + log.debug("getting json summary for %s", id) activity_summary = retryer.call(client.get_activity_summary, id) dest = os.path.join( @@ -126,7 +126,7 @@ def download(client, activity, retryer, backup_dir, export_formats=None): f.write(json.dumps(activity_summary, ensure_ascii=False, indent=4)) if 'json_details' in export_formats: - log.debug("getting json details for {}".format(id)) + log.debug("getting json details for %s", id) activity_details = retryer.call(client.get_activity_details, id) dest = os.path.join(backup_dir, export_filename(activity, 'json_details')) with codecs.open(dest, encoding="utf-8", mode="w") as f: @@ -135,7 +135,7 @@ def download(client, activity, retryer, backup_dir, export_formats=None): not_found_path = os.path.join(backup_dir, not_found_file) with open(not_found_path, mode="a") as not_found: if 'gpx' in export_formats: - log.debug("getting gpx for {}".format(id)) + log.debug("getting gpx for %s", id) activity_gpx = retryer.call(client.get_activity_gpx, id) dest = os.path.join(backup_dir, export_filename(activity, 'gpx')) if activity_gpx is None: @@ -145,7 +145,7 @@ def download(client, activity, retryer, backup_dir, export_formats=None): f.write(activity_gpx) if 'tcx' in export_formats: - log.debug("getting tcx for {}".format(id)) + log.debug("getting tcx for %s", id) activity_tcx = retryer.call(client.get_activity_tcx, id) dest = os.path.join(backup_dir, export_filename(activity, 'tcx')) if activity_tcx is None: @@ -155,7 +155,7 @@ def download(client, activity, retryer, backup_dir, export_formats=None): f.write(activity_tcx) if 'fit' in export_formats: - log.debug("getting fit for {}".format(id)) + log.debug("getting fit for %s", id) activity_fit = retryer.call(client.get_activity_fit, id) dest = os.path.join( backup_dir, export_filename(activity, 'fit')) diff --git a/garminexport/garminclient.py b/garminexport/garminclient.py index 6309841..9bd88f3 100755 --- a/garminexport/garminclient.py +++ b/garminexport/garminclient.py @@ -116,11 +116,11 @@ class GarminClient(object): headers = {'origin': 'https://sso.garmin.com'} auth_response = self.session.post( SSO_LOGIN_URL, headers=headers, params=request_params, data=form_data) - log.debug("got auth response: {}".format(auth_response.text)) + log.debug("got auth response: %s", auth_response.text) if auth_response.status_code != 200: raise ValueError("authentication failure: did you enter valid credentials?") auth_ticket_url = self._extract_auth_ticket_url(auth_response.text) - log.debug("auth ticket url: '{}'".format(auth_ticket_url)) + log.debug("auth ticket url: '%s'", auth_ticket_url) log.info("claiming auth ticket ...") response = self.session.get(auth_ticket_url) @@ -185,7 +185,7 @@ class GarminClient(object): :returns: A list of activity identifiers (along with their starting timestamps). :rtype: tuples of (int, datetime) """ - log.debug("fetching activities {} through {} ...".format(start_index, start_index + max_limit - 1)) + log.debug("fetching activities %d through %d ...", start_index, start_index + max_limit - 1) response = self.session.get( "https://connect.garmin.com/modern/proxy/activitylist-service/activities/search/activities", params={"start": start_index, "limit": max_limit}) @@ -205,7 +205,7 @@ class GarminClient(object): # make sure UTC timezone gets set timestamp_utc = timestamp_utc.replace(tzinfo=dateutil.tz.tzutc()) entries.append((id, timestamp_utc)) - log.debug("got {} activities.".format(len(entries))) + log.debug("got %d activities.", len(entries)) return entries @require_session @@ -222,8 +222,8 @@ class GarminClient(object): response = self.session.get( "https://connect.garmin.com/modern/proxy/activity-service/activity/{}".format(activity_id)) if response.status_code != 200: - log.error(u"failed to fetch json summary for activity {}: {}\n{}".format( - activity_id, response.status_code, response.text)) + log.error(u"failed to fetch json summary for activity %s: %d\n%s", + activity_id, response.status_code, response.text) raise Exception(u"failed to fetch json summary for activity {}: {}\n{}".format( activity_id, response.status_code, response.text)) return json.loads(response.text) diff --git a/garminexport/incremental_backup.py b/garminexport/incremental_backup.py index 181cf8b..18bad9a 100644 --- a/garminexport/incremental_backup.py +++ b/garminexport/incremental_backup.py @@ -35,7 +35,7 @@ def incremental_backup(username: str, """ # if no --format was specified, all formats are to be backed up format = format if format else export_formats - log.info("backing up formats: {}".format(", ".join(format))) + log.info("backing up formats: %s", ", ".join(format)) if not os.path.isdir(backup_dir): os.makedirs(backup_dir) @@ -50,23 +50,23 @@ def incremental_backup(username: str, with GarminClient(username, password) as client: # get all activity ids and timestamps from Garmin account - log.info("scanning activities for {} ...".format(username)) + log.info("scanning activities for %s ...", username) activities = set(retryer.call(client.list_activities)) - log.info("account has a total of {} activities".format(len(activities))) + log.info("account has a total of %d activities", len(activities)) missing_activities = garminexport.backup.need_backup(activities, backup_dir, format) backed_up = activities - missing_activities - log.info("{} contains {} backed up activities".format(backup_dir, len(backed_up))) + log.info("%s contains %d backed up activities", backup_dir, len(backed_up)) - log.info("activities that aren't backed up: {}".format(len(missing_activities))) + log.info("activities that aren't backed up: %d", len(missing_activities)) for index, activity in enumerate(missing_activities): id, start = activity - log.info("backing up activity {} from {} ({} out of {}) ...".format( - id, start, index + 1, len(missing_activities))) + log.info("backing up activity %s from %s (%d out of %d) ...", + id, start, index + 1, len(missing_activities)) try: garminexport.backup.download(client, activity, retryer, backup_dir, format) except Exception as e: - log.error("failed with exception: {}".format(e)) + log.error("failed with exception: %s", e) if not ignore_errors: raise diff --git a/garminexport/retryer.py b/garminexport/retryer.py index b589c81..73454cf 100644 --- a/garminexport/retryer.py +++ b/garminexport/retryer.py @@ -195,21 +195,21 @@ class Retryer(object): while True: try: attempts += 1 - log.info('{{}}: attempt {} ...'.format(name, attempts)) + log.info('{%s}: attempt %d ...', name, attempts) returnval = function(*args, **kw) if self.returnval_predicate(returnval): # return value satisfies predicate, we're done! - log.debug('{{}}: success: "{}"'.format(name, returnval)) + log.debug('{%s}: success: "%s"', name, returnval) return returnval - log.debug('{{}}: failed: return value: {}'.format(name, returnval)) + log.debug('{%s}: failed: return value: %s', name, returnval) except Exception as e: if not self.error_strategy.should_suppress(e): raise e - log.debug('{{}}: failed: error: {}'.format(name, e)) + log.debug('{%s}: failed: error: %s', name, e) elapsed_time = datetime.now() - start # should we make another attempt? if not self.stop_strategy.should_continue(attempts, elapsed_time): raise GaveUpError('{{}}: gave up after {} failed attempt(s)'.format(name, attempts)) delay = self.delay_strategy.next_delay(attempts) - log.info('{{}}: waiting {} seconds for next attempt'.format(name, delay.total_seconds())) + log.info('{%s}: waiting %d seconds for next attempt', name, delay.total_seconds()) time.sleep(delay.total_seconds()) diff --git a/get_activity.py b/get_activity.py index 44b5348..0330ffd 100755 --- a/get_activity.py +++ b/get_activity.py @@ -64,7 +64,7 @@ if __name__ == "__main__": args.password = getpass.getpass("Enter password: ") with GarminClient(args.username, args.password) as client: - log.info("fetching activity {} ...".format(args.activity)) + log.info("fetching activity %s ...", args.activity) summary = client.get_activity_summary(args.activity) # set up a retryer that will handle retries of failed activity downloads retryer = Retryer( @@ -75,5 +75,5 @@ if __name__ == "__main__": garminexport.backup.download( client, (args.activity, start_time), retryer, args.destination, export_formats=[args.format]) except Exception as e: - log.error("failed with exception: {}".format(e)) + log.error("failed with exception: %s", e) raise diff --git a/samples/sample.py b/samples/sample.py index 7df4afc..0b25b52 100755 --- a/samples/sample.py +++ b/samples/sample.py @@ -11,7 +11,7 @@ logging.basicConfig(level=logging.INFO, format="%(asctime)-15s [%(levelname)s] % log = logging.getLogger(__name__) if __name__ == "__main__": - + parser = argparse.ArgumentParser( description="Export all Garmin Connect activities") # positional args @@ -26,22 +26,22 @@ if __name__ == "__main__": if not args.password: args.password = getpass.getpass("Enter password: ") - + try: with GarminClient(args.username, args.password) as client: log.info("activities:") activity_ids = client.list_activities() - log.info("num ids: {}".format(len(activity_ids))) + log.info("num ids: %d", len(activity_ids)) log.info(activity_ids) latest_activity, latest_activity_start = activity_ids[0] activity = client.get_activity_summary(latest_activity) - log.info("activity id: {}".format(activity["activity"]["activityId"])) - log.info("activity name: '{}'".format(activity["activity"]["activityName"])) - log.info("activity description: '{}'".format(activity["activity"]["activityDescription"])) + log.info("activity id: %s", activity["activity"]["activityId"]) + log.info("activity name: '%s'", activity["activity"]["activityName"]) + log.info("activity description: '%s'", activity["activity"]["activityDescription"]) log.info(json.dumps(client.get_activity_details(latest_activity), indent=4)) log.info(client.get_activity_gpx(latest_activity)) except Exception as e: - log.error("failed with exception: {}".format(e)) - finally: + log.error("failed with exception: %s", e) + finally: log.info("done") diff --git a/upload_activity.py b/upload_activity.py index 10ca513..7e8ccac 100755 --- a/upload_activity.py +++ b/upload_activity.py @@ -56,15 +56,15 @@ if __name__ == "__main__": with GarminClient(args.username, args.password) as client: for activity in args.activity: - log.info("uploading activity file {} ...".format(activity.name)) + log.info("uploading activity file %s ...", activity.name) try: id = client.upload_activity(activity, name=args.name, description=args.description, private=args.private, activity_type=args.type) except Exception as e: log.error("upload failed: {!r}".format(e)) else: - log.info("upload successful: https://connect.garmin.com/modern/activity/{}".format(id)) + log.info("upload successful: https://connect.garmin.com/modern/activity/%s", id) except Exception as e: - log.error("failed with exception: {}".format(e)) + log.error("failed with exception: %s", e) raise