diff --git a/requirements.txt b/requirements.txt index 490757e..ceae4a5 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ lxml requests garth +setuptools diff --git a/withings_sync/garmin.py b/withings_sync/garmin.py index e17b286..ae5f455 100644 --- a/withings_sync/garmin.py +++ b/withings_sync/garmin.py @@ -1,56 +1,52 @@ """This module handles the Garmin connectivity.""" + +import io import logging -import garth import os -import io -log = logging.getLogger("garmin") +import garth +log = logging.getLogger("garmin") -HOME = os.getenv('HOME', '.') -GARMIN_SESSION = os.getenv('GARMIN_SESSION', HOME + '/.garmin_session') +HOME = os.getenv("HOME", ".") +GARMIN_SESSION = os.getenv('GARMIN_SESSION', os.path.join(HOME, ".garmin_session")) class LoginSucceeded(Exception): - """Used to raise on LoginSucceeded""" + """Raised when login succeeds.""" class LoginFailed(Exception): - """Used to raise on LoginFailed""" + """Raised when login fails.""" class APIException(Exception): - """Used to raise on APIException""" + """Raised for API exceptions.""" class GarminConnect: - """Main GarminConnect class""" + """Main GarminConnect class.""" def __init__(self) -> None: self.client = garth.Client() def login(self, email=None, password=None): - logged_in = False if os.path.exists(GARMIN_SESSION): self.client.load(GARMIN_SESSION) - try: - self.client.username - logged_in = True - except Exception: - pass - - if not logged_in: - try: - self.client.login(email, password) - self.client.dump(GARMIN_SESSION) - except Exception as ex: - raise APIException("Authentication failure: {}. Did you enter correct credentials?".format(ex)) + if hasattr(self.client, "username"): + return + try: + self.client.login(email, password) + self.client.dump(GARMIN_SESSION) + except Exception as ex: + raise APIException( + f"Authentication failure: {ex}. Did you enter correct credentials?" + ) def upload_file(self, ffile): - """upload fit file to Garmin connect""" - # Convert the fitfile to a in-memory file for upload + """Upload fit file to Garmin Connect.""" fit_file = io.BytesIO(ffile.getvalue()) - fit_file.name = 'withings.fit' + fit_file.name = "withings.fit" self.client.upload(fit_file) return True diff --git a/withings_sync/sync.py b/withings_sync/sync.py index dca4363..e874d00 100644 --- a/withings_sync/sync.py +++ b/withings_sync/sync.py @@ -297,6 +297,9 @@ def prepare_syncdata(height, groups): collected_metrics = "weight data" if "BLOOD_PRESSURE" in ARGS.features: collected_metrics += " or blood pressure" + elif "diastolic_blood_pressure" in group_data: + collected_metrics += ", but blood pressure (to enable sync set --features BLOOD_PRESSURE)" + logging.info( "%s This Withings metric contains no %s. Not syncing...", dt, collected_metrics @@ -478,8 +481,10 @@ def sync(): # Save this sync so we don't re-download the same data again (if no range has been specified) if not ARGS.fromdate: withings.set_lastsync() - else: + elif ARGS.garmin_username is None: logging.info("No Garmin username - skipping sync") + else: + logging.info("No Garmin data selected - skipping sync") else: logging.info("Skipping upload") return 0