From 22c72e025320b916343b48a09c49559c4728bc86 Mon Sep 17 00:00:00 2001 From: "Mike A." Date: Mon, 29 Sep 2025 20:48:16 +0200 Subject: [PATCH] feat: return early when fetching accessory reports --- findmy/reports/reports.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/findmy/reports/reports.py b/findmy/reports/reports.py index 14371fb..f5e3df4 100644 --- a/findmy/reports/reports.py +++ b/findmy/reports/reports.py @@ -384,7 +384,7 @@ class LocationReportsFetcher: if isinstance(device, RollingKeyPairSource): # key generator - return await self._fetch_accessory_report(device) + return await self._fetch_accessory_reports(device, only_latest=True) if not isinstance(device, list) or not all( isinstance(x, HasHashedPublicKey | RollingKeyPairSource) for x in device @@ -406,7 +406,7 @@ class LocationReportsFetcher: static_keys.append(dev) elif isinstance(dev, RollingKeyPairSource): # query immediately - reports[dev] = await self._fetch_accessory_report(dev) + reports[dev] = await self._fetch_accessory_reports(dev, only_latest=True) if static_keys: # batch request for static keys key_reports = await self._fetch_key_reports(static_keys) @@ -414,9 +414,10 @@ class LocationReportsFetcher: return reports - async def _fetch_accessory_report( + async def _fetch_accessory_reports( self, accessory: RollingKeyPairSource, + only_latest: bool = False, ) -> list[LocationReport]: logger.debug("Fetching location report for accessory") @@ -474,6 +475,11 @@ class LocationReportsFetcher: ): ret |= await _fetch() + # if we only want the latest report, we can stop here + # since we are iterating backwards in time + if only_latest and ret: + return sorted(ret) + # build mappings before adding to current keys for key in key_batch: key_to_ind[key].add(cur_index)