Skip to content

Commit

Permalink
Improved request error checks
Browse files Browse the repository at this point in the history
  • Loading branch information
cyberjunky committed Mar 28, 2023
1 parent a184095 commit 31f222a
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 20 deletions.
5 changes: 2 additions & 3 deletions example.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
Garmin,
GarminConnectAuthenticationError,
GarminConnectConnectionError,
GarminConnectTooManyRequestsError,
GarminConnectTooManyRequestsError
)

# Configure debug logging
Expand Down Expand Up @@ -156,8 +156,7 @@ def init_api(email, password):
except (
GarminConnectConnectionError,
GarminConnectAuthenticationError,
GarminConnectTooManyRequestsError,
requests.exceptions.HTTPError,
GarminConnectTooManyRequestsError
) as err:
logger.error("Error occurred during Garmin Connect communication: %s", err)
return None
Expand Down
39 changes: 23 additions & 16 deletions garminconnect/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,18 +68,22 @@ def get(self, addurl, additional_headers=None, params=None):
try:
response = self.session.get(url, headers=total_headers, params=params)
response.raise_for_status()
# logger.debug("Response: %s", response.content)
return response
except Exception as err:
logger.debug("Response in exception: %s", response.content)

except requests.exceptions.HTTPError as err:
if response.status_code == 429:
raise GarminConnectTooManyRequestsError("Too many requests") from err
raise GarminConnectTooManyRequestsError("429 Too many requests: {url}") from err
if response.status_code == 401:
raise GarminConnectAuthenticationError("Authentication error") from err
raise GarminConnectAuthenticationError("401 Authentication error: {url}") from err
if response.status_code == 403:
raise GarminConnectConnectionError(f"Forbidden url: {url}") from err
raise GarminConnectConnectionError(f"403 Forbidden error: {url}") from err
except requests.exceptions.ConnectionError as err:
raise GarminConnectConnectionError(f"Connection error: {url}") from err
except requests.exceptions.Timeout as err:
raise GarminConnectConnectionError(f"Timeout error: {url}") from err
except requests.exceptions.RequestException as err:
raise GarminConnectConnectionError(f"Request exception error: {url}") from err

raise GarminConnectConnectionError(err) from err

def post(self, addurl, additional_headers=None, params=None, data=None, files=None):
"""Make an API call using the POST method."""
Expand All @@ -97,18 +101,21 @@ def post(self, addurl, additional_headers=None, params=None, data=None, files=No
url, headers=total_headers, params=params, data=data, files=files
)
response.raise_for_status()
# logger.debug("Response: %s", response.content)
return response
except Exception as err:
logger.debug("Response in exception: %s", response.content)

except requests.exceptions.HTTPError as err:
if response.status_code == 429:
raise GarminConnectTooManyRequestsError("Too many requests") from err
raise GarminConnectTooManyRequestsError("429 Too many requests: {url}") from err
if response.status_code == 401:
raise GarminConnectAuthenticationError("Authentication error") from err
raise GarminConnectAuthenticationError("401 Authentication error: {url}") from err
if response.status_code == 403:
raise GarminConnectConnectionError(f"Forbidden url: {url}") from err

raise GarminConnectConnectionError(err) from err
raise GarminConnectConnectionError(f"403 Forbidden error: {url}") from err
except requests.exceptions.ConnectionError as err:
raise GarminConnectConnectionError(f"Connection error: {url}") from err
except requests.exceptions.Timeout as err:
raise GarminConnectConnectionError(f"Timeout error: {url}") from err
except requests.exceptions.RequestException as err:
raise GarminConnectConnectionError(f"Request exception error: {url}") from err


class Garmin:
Expand Down Expand Up @@ -720,6 +727,7 @@ def get_last_activity(self):
def upload_activity(self, activity_path: str):
"""Upload activity in fit format from file."""
# This code is borrowed from python-garminconnect-enhanced ;-)

file_base_name = os.path.basename(activity_path)
file_extension = file_base_name.split(".")[-1]
allowed_file_extension = file_extension.upper() in Garmin.ActivityUploadFormat.__members__
Expand All @@ -728,7 +736,6 @@ def upload_activity(self, activity_path: str):
files = {
"file": (file_base_name, open(activity_path, "rb" or "r")),
}

url = self.garmin_connect_upload
return self.modern_rest_client.post(url, files=files).json()
else:
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,5 +35,5 @@ def read(*parts):
long_description=readme,
url="https://github.com/cyberjunky/python-garminconnect",
packages=["garminconnect"],
version="0.1.54"
version="0.1.55"
)

0 comments on commit 31f222a

Please sign in to comment.