Fix userprofile keyerror, remove duplicate gear fetch code

This commit is contained in:
Ron Klinkien
2025-11-06 14:55:29 +01:00
parent 441e4a0018
commit 53b21e92fb
2 changed files with 34 additions and 32 deletions

View File

@@ -385,10 +385,14 @@ class GarminConnectDataUpdateCoordinator(DataUpdateCoordinator):
# Gear data # Gear data
try: try:
gear = await self.hass.async_add_executor_job( # Check if userProfileId exists in summary before fetching gear data
self.api.get_gear, summary[Gear.USERPROFILE_ID] if Gear.USERPROFILE_ID in summary:
) gear = await self.hass.async_add_executor_job(
_LOGGER.debug("Gear data fetched: %s", gear) self.api.get_gear, summary[Gear.USERPROFILE_ID]
)
_LOGGER.debug("Gear data fetched: %s", gear)
else:
_LOGGER.debug("No userProfileId found in summary, skipping gear data fetch")
# Fitness age data # Fitness age data
fitnessage_data = await self.hass.async_add_executor_job( fitnessage_data = await self.hass.async_add_executor_job(
@@ -438,36 +442,34 @@ class GarminConnectDataUpdateCoordinator(DataUpdateCoordinator):
return {} return {}
try: try:
# Gear data like shoes, bike, etc. # Use gear data from the first fetch if available
gear = await self.hass.async_add_executor_job(
self.api.get_gear, summary[Gear.USERPROFILE_ID]
)
if gear: if gear:
_LOGGER.debug("Gear data fetched: %s", gear) # Gear stats data like distance, time, etc.
else: tasks: list[Awaitable] = [
_LOGGER.debug("No gear data found") self.hass.async_add_executor_job(
self.api.get_gear_stats, gear_item[Gear.UUID]
)
for gear_item in gear
]
gear_stats = await asyncio.gather(*tasks)
if gear_stats:
_LOGGER.debug("Gear statistics data fetched: %s", gear_stats)
else:
_LOGGER.debug("No gear statistics data found")
# Gear stats data like distance, time, etc. # Gear defaults data like shoe, bike, etc.
tasks: list[Awaitable] = [ if Gear.USERPROFILE_ID in summary:
self.hass.async_add_executor_job( gear_defaults = await self.hass.async_add_executor_job(
self.api.get_gear_stats, gear_item[Gear.UUID] self.api.get_gear_defaults, summary[Gear.USERPROFILE_ID]
) )
for gear_item in gear if gear_defaults:
] _LOGGER.debug("Gear defaults data fetched: %s", gear_defaults)
gear_stats = await asyncio.gather(*tasks) else:
if gear_stats: _LOGGER.debug("No gear defaults data found")
_LOGGER.debug("Gear statistics data fetched: %s", gear_stats) else:
_LOGGER.debug("No userProfileId found in summary, skipping gear defaults fetch")
else: else:
_LOGGER.debug("No gear statistics data found") _LOGGER.debug("No gear data available, skipping gear stats and defaults fetch")
# Gear defaults data like shoe, bike, etc.
gear_defaults = await self.hass.async_add_executor_job(
self.api.get_gear_defaults, summary[Gear.USERPROFILE_ID]
)
if gear_defaults:
_LOGGER.debug("Gear defaults data fetched: %s", gear_defaults)
else:
_LOGGER.debug("No gear defaults data found")
except GarminConnectAuthenticationError as err: except GarminConnectAuthenticationError as err:
_LOGGER.error( _LOGGER.error(
"Authentication error occurred while fetching Gear data: %s", err.response.text) "Authentication error occurred while fetching Gear data: %s", err.response.text)

View File

@@ -8,5 +8,5 @@
"iot_class": "cloud_polling", "iot_class": "cloud_polling",
"issue_tracker": "https://github.com/cyberjunky/home-assistant-garmin_connect/issues", "issue_tracker": "https://github.com/cyberjunky/home-assistant-garmin_connect/issues",
"requirements": ["garminconnect>=0.2.31"], "requirements": ["garminconnect>=0.2.31"],
"version": "0.2.37" "version": "0.2.38"
} }