Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Refactoring cleanup, pythonic updates, black formatting #169

Merged
merged 2 commits into from
Aug 20, 2024
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 21 additions & 25 deletions withings_sync/garmin.py
Original file line number Diff line number Diff line change
@@ -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.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