Skip to content

Commit 2374c83

Browse files
committed
Added code to handle retired gear
1 parent 55cbfaf commit 2374c83

File tree

2 files changed

+39
-1
lines changed

2 files changed

+39
-1
lines changed

garminconnect/__init__.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,11 @@ def _validate_json_exists(response: requests.Response) -> dict[str, Any] | None:
9797
return response.json()
9898

9999

100+
def _is_gear_removed(gearUUID: str) -> bool:
101+
"""Check if gear has been removed/retired (Garmin returns 'REMOVED' as UUID)."""
102+
return str(gearUUID) == "REMOVED"
103+
104+
100105
class Garmin:
101106
"""Class for fetching data from Garmin Connect."""
102107

@@ -1874,6 +1879,13 @@ def get_gear(self, userProfileNumber: str) -> dict[str, Any]:
18741879
return self.connectapi(url)
18751880

18761881
def get_gear_stats(self, gearUUID: str) -> dict[str, Any]:
1882+
# Check if gear has been removed/retired
1883+
if _is_gear_removed(gearUUID):
1884+
logger.warning(
1885+
"Cannot get stats for removed/retired gear (UUID: %s)", gearUUID
1886+
)
1887+
return {}
1888+
18771889
url = f"{self.garmin_connect_gear_baseurl}/stats/{gearUUID}"
18781890
logger.debug("Requesting gear stats for gearUUID %s", gearUUID)
18791891
return self.connectapi(url)
@@ -1889,6 +1901,12 @@ def get_gear_defaults(self, userProfileNumber: str) -> dict[str, Any]:
18891901
def set_gear_default(
18901902
self, activityType: str, gearUUID: str, defaultGear: bool = True
18911903
) -> Any:
1904+
# Check if gear has been removed/retired
1905+
if _is_gear_removed(gearUUID):
1906+
raise GarminConnectConnectionError(
1907+
"Cannot set default for removed/retired gear"
1908+
)
1909+
18921910
defaultGearString = "/default/true" if defaultGear else ""
18931911
method_override = "PUT" if defaultGear else "DELETE"
18941912
url = (
@@ -2036,6 +2054,14 @@ def get_gear_activities(
20362054
:return: List of activities where the specified gear was used
20372055
"""
20382056
gearUUID = str(gearUUID)
2057+
2058+
# Check if gear has been removed/retired
2059+
if _is_gear_removed(gearUUID):
2060+
logger.warning(
2061+
"Cannot get activities for removed/retired gear (UUID: %s)", gearUUID
2062+
)
2063+
return []
2064+
20392065
limit = _validate_positive_integer(limit, "limit")
20402066
# Optional: enforce a reasonable ceiling to avoid heavy responses
20412067
limit = min(limit, MAX_ACTIVITY_LIMIT)
@@ -2061,6 +2087,12 @@ def add_gear_to_activity(
20612087
gearUUID = str(gearUUID)
20622088
activity_id = _validate_positive_integer(int(activity_id), "activity_id")
20632089

2090+
# Check if gear has been removed/retired
2091+
if _is_gear_removed(gearUUID):
2092+
raise GarminConnectConnectionError(
2093+
"Cannot add removed/retired gear to activity"
2094+
)
2095+
20642096
url = (
20652097
f"{self.garmin_connect_gear_baseurl}/link/{gearUUID}/activity/{activity_id}"
20662098
)
@@ -2085,6 +2117,12 @@ def remove_gear_from_activity(
20852117
gearUUID = str(gearUUID)
20862118
activity_id = _validate_positive_integer(int(activity_id), "activity_id")
20872119

2120+
# Check if gear has been removed/retired
2121+
if _is_gear_removed(gearUUID):
2122+
raise GarminConnectConnectionError(
2123+
"Cannot remove removed/retired gear from activity"
2124+
)
2125+
20882126
url = f"{self.garmin_connect_gear_baseurl}/unlink/{gearUUID}/activity/{activity_id}"
20892127
logger.debug("Unlinking gear %s from activity %s", gearUUID, activity_id)
20902128

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "garminconnect"
3-
version = "0.2.31"
3+
version = "0.2.32"
44
description = "Python 3 API wrapper for Garmin Connect"
55
authors = [
66
{name = "Ron Klinkien", email = "[email protected]"},

0 commit comments

Comments
 (0)