@@ -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+
100105class 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
0 commit comments