From 10800730595bf7f47ccb5f7d396b512b60f2b655 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Wed, 15 Feb 2023 22:17:31 -0600 Subject: [PATCH] Speed up fetching statistics by using attrgetter Uses the faster native code vs a lambda https://github.com/python/cpython/blob/4aeae286715a3a9fa624429733582917606000c3/Modules/_operator.c#L1406 --- homeassistant/components/recorder/statistics.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/recorder/statistics.py b/homeassistant/components/recorder/statistics.py index 4f812265f11..911484c0ea2 100644 --- a/homeassistant/components/recorder/statistics.py +++ b/homeassistant/components/recorder/statistics.py @@ -10,6 +10,7 @@ from functools import lru_cache, partial from itertools import chain, groupby import json import logging +from operator import attrgetter import os import re from statistics import mean @@ -2020,10 +2021,8 @@ def _sorted_statistics_to_dict( # Identify metadata IDs for which no data was available at the requested start time stats_by_meta_id: dict[int, list[Row]] = {} seen_statistic_ids: set[str] = set() - for meta_id, group in groupby( - stats, - lambda stat: stat.metadata_id, # type: ignore[no-any-return] - ): + key_func = attrgetter("metadata_id") + for meta_id, group in groupby(stats, key_func): stats_list = stats_by_meta_id[meta_id] = list(group) seen_statistic_ids.add(metadata[meta_id]["statistic_id"]) first_start_time_ts = stats_list[0].start_ts