updated get_activity code to make use of a Retryer

This commit is contained in:
petergardfjall 2018-08-30 19:58:53 +02:00
parent 01a08e14ab
commit ed32d335ad

View File

@ -3,9 +3,13 @@
Connect account and stores it locally on the user's computer. Connect account and stores it locally on the user's computer.
""" """
import argparse import argparse
from datetime import timedelta
import getpass import getpass
from garminexport.garminclient import GarminClient from garminexport.garminclient import GarminClient
import garminexport.backup import garminexport.backup
from garminexport.retryer import (
Retryer, ExponentialBackoffDelayStrategy, MaxRetriesStopStrategy)
import json
import logging import logging
import os import os
import sys import sys
@ -25,7 +29,7 @@ LOG_LEVELS = {
"""Command-line (string-based) log-level mapping to logging module levels.""" """Command-line (string-based) log-level mapping to logging module levels."""
if __name__ == "__main__": if __name__ == "__main__":
parser = argparse.ArgumentParser( parser = argparse.ArgumentParser(
description=("Downloads one particular activity for a given " description=("Downloads one particular activity for a given "
"Garmin Connect account.")) "Garmin Connect account."))
@ -50,7 +54,7 @@ if __name__ == "__main__":
"--log-level", metavar="LEVEL", type=str, "--log-level", metavar="LEVEL", type=str,
help=("Desired log output level (DEBUG, INFO, WARNING, ERROR). " help=("Desired log output level (DEBUG, INFO, WARNING, ERROR). "
"Default: INFO."), default="INFO") "Default: INFO."), default="INFO")
args = parser.parse_args() args = parser.parse_args()
if not args.log_level in LOG_LEVELS: if not args.log_level in LOG_LEVELS:
raise ValueError("Illegal log-level argument: {}".format( raise ValueError("Illegal log-level argument: {}".format(
@ -60,7 +64,7 @@ if __name__ == "__main__":
"Uncrecognized export format: '{}'. Must be one of {}".format( "Uncrecognized export format: '{}'. Must be one of {}".format(
args.format, garminexport.backup.export_formats)) args.format, garminexport.backup.export_formats))
logging.root.setLevel(LOG_LEVELS[args.log_level]) logging.root.setLevel(LOG_LEVELS[args.log_level])
try: try:
if not os.path.isdir(args.destination): if not os.path.isdir(args.destination):
os.makedirs(args.destination) os.makedirs(args.destination)
@ -70,11 +74,17 @@ if __name__ == "__main__":
with GarminClient(args.username, args.password) as client: with GarminClient(args.username, args.password) as client:
log.info("fetching activity {} ...".format(args.activity)) log.info("fetching activity {} ...".format(args.activity))
summary = client.get_activity_summary(args.activity) summary = client.get_activity_summary(args.activity)
starttime = dateutil.parser.parse(summary["activity"]["activitySummary"]["BeginTimestamp"]["value"]) # set up a retryer that will handle retries of failed activity
# downloads
retryer = Retryer(
delay_strategy=ExponentialBackoffDelayStrategy(
initial_delay=timedelta(seconds=1)),
stop_strategy=MaxRetriesStopStrategy(5))
starttime = dateutil.parser.parse(summary["summaryDTO"]["startTimeGMT"])
garminexport.backup.download( garminexport.backup.download(
client, (args.activity, starttime), args.destination, export_formats=[args.format]) client, (args.activity, starttime), retryer, args.destination, export_formats=[args.format])
except Exception as e: except Exception as e:
exc_type, exc_value, exc_traceback = sys.exc_info() exc_type, exc_value, exc_traceback = sys.exc_info()
log.error(u"failed with exception: %s", e) log.error(u"failed with exception: %s", e)
raise raise