From 2ee0472f20360703003e09852c9aec5fde316053 Mon Sep 17 00:00:00 2001 From: Kirill Krivov Date: Wed, 30 Apr 2025 01:27:12 +0300 Subject: [PATCH 1/2] Clarify inner stats expected type --- core/utils/stats_timer.py | 11 ++++++----- smart_kit/start_points/main_loop_kafka.py | 3 +-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/core/utils/stats_timer.py b/core/utils/stats_timer.py index c37da6df..adcf942f 100644 --- a/core/utils/stats_timer.py +++ b/core/utils/stats_timer.py @@ -2,6 +2,7 @@ import time import timeit +from collections.abc import Iterable from typing import TYPE_CHECKING, Any if TYPE_CHECKING: @@ -36,17 +37,17 @@ def __exit__(self, *args): class Stats: def __init__(self, start_ts: float | None = None, finish_ts: float | None = None, time: float | None = None, system: str | None = None, version: str | None = None, - inner_stats: list[dict[str, Any]] | list[Stats] | None = None, optional: dict | None = None, **kwargs): + inner_stats: Iterable[Stats | dict[str, Any]] = (), optional: dict | None = None, **kwargs): self.system = system self.version = version self.optional = optional self.start_ts = start_ts self.finish_ts = finish_ts self.time = time or ((start_ts - finish_ts) if start_ts and finish_ts else None) - self._inner_stats: list[Stats] = [] - if inner_stats: - self._inner_stats = ([Stats(**stats) for stats in inner_stats] if isinstance(inner_stats[0], dict) - else inner_stats) + self._inner_stats: list[Stats] = [ + stats if isinstance(stats, Stats) else Stats(**stats) + for stats in inner_stats + ] def add_inner_stats(self, stats: dict[str, Any], copy_system: bool = True, copy_version: bool = True) -> None: self._inner_stats = [Stats(**stats)] diff --git a/smart_kit/start_points/main_loop_kafka.py b/smart_kit/start_points/main_loop_kafka.py index 616d99a0..65e902c9 100644 --- a/smart_kit/start_points/main_loop_kafka.py +++ b/smart_kit/start_points/main_loop_kafka.py @@ -779,8 +779,7 @@ def _stats_for_incoming(user: User): Stats(system=((None if callback.action_params.get("answer_stats_system_copy_off") else user.message.payload.get("stats", {}).get("system")) or callback.action_params["stats_system"]), - inner_stats=([user.message.payload.get("stats")] if user.message.payload.get("stats") - else []), + inner_stats=([s] if (s := user.message.payload.get("stats")) else []), time=(finish_ts - callback.action_params["stats_request_ts"]) * 1000, version=user.message.payload.get("stats", {}).get("version"), start_ts=callback.action_params["stats_request_ts"], From 9ae041411468c9563996e10a1de230310a5cece1 Mon Sep 17 00:00:00 2001 From: Kirill Krivov Date: Wed, 30 Apr 2025 01:29:02 +0300 Subject: [PATCH 2/2] Ensure there are no errors when deleting mid variables --- core/basic_models/variables/mid_variables.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/core/basic_models/variables/mid_variables.py b/core/basic_models/variables/mid_variables.py index 14f6e555..3b2c2839 100644 --- a/core/basic_models/variables/mid_variables.py +++ b/core/basic_models/variables/mid_variables.py @@ -1,6 +1,7 @@ from __future__ import annotations import time +from functools import cached_property from typing import TYPE_CHECKING, Any from core.basic_models.variables.variables import Variables @@ -16,16 +17,19 @@ def __init__(self, items: dict | None, user: User, savable: bool = True): self._user = user def get(self, key: Any, default: Any = None) -> Any: - return super().get(key=str(self._user.message.incremental_id), default={}).get(key, default) + return super().get(key=self._mid, default={}).get(key, default) def update(self, key: Any, value: Any, ttl: int | None = None) -> None: - mid = str(self._user.message.incremental_id) - mid_variable, old_expire_time = self._storage.get(mid, ({}, self.DEFAULT_TTL + time.time())) + mid_variable, old_expire_time = self._storage.get(self._mid, ({}, self.DEFAULT_TTL + time.time())) mid_variable[key] = value - self._storage[mid] = mid_variable, ttl + time.time() if ttl else old_expire_time + self._storage[self._mid] = mid_variable, ttl + time.time() if ttl else old_expire_time def delete_mid_variables(self) -> None: - del self._storage[str(self._user.message.incremental_id)] + self._storage.pop(self._mid, None) def set(self, key, value, ttl=None): raise NotImplementedError + + @cached_property + def _mid(self) -> str: + return str(self._user.message.incremental_id)