From e4582727455b95181e50fb84eb5b38eb57ed8348 Mon Sep 17 00:00:00 2001 From: lebaudantoine Date: Fri, 11 Jul 2025 10:16:12 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B(summary)=20fix=20data=20type=20ser?= =?UTF-8?q?ialization=20issues=20with=20Redis=20and=20PostHog?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Resolve float/int to string conversion problems when deserializing Redis data for PostHog. Added type conversion fix - not bulletproof but works for most cases. Avoid using for critical operations. --- src/summary/summary/core/analytics.py | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/summary/summary/core/analytics.py b/src/summary/summary/core/analytics.py index 212f2add..e945e8cc 100644 --- a/src/summary/summary/core/analytics.py +++ b/src/summary/summary/core/analytics.py @@ -73,10 +73,22 @@ class TasksTracker: """Save metadata for a specific task to Redis.""" self._redis.hset(self._get_redis_key(task_id), mapping=metadata) + + @staticmethod + def _convert_value(value): + """Convert a string value to the most appropriate Python type.""" + try: + return int(value) + except ValueError: + try: + return float(value) + except ValueError: + return value + def _get_metadata(self, task_id): """Retrieve and parse metadata for a specific task from Redis.""" raw_metadata = self._redis.hgetall(self._get_redis_key(task_id)) - return {k.decode("utf-8"): v.decode("utf-8") for k, v in raw_metadata.items()} + return {k.decode("utf-8"): self._convert_value(v.decode("utf-8")) for k, v in raw_metadata.items()} def has_task_id(self, task_id): """Check if task_id exists in tasks metadata cache.""" @@ -182,9 +194,9 @@ class TasksTracker: metadata = self._get_metadata(task_id) if "start_time" in metadata: - metadata["execution_time"] = str(round( - time.time() - float(metadata["start_time"]), 2 - )) + metadata["execution_time"] = round( + time.time() - metadata["start_time"], 2 + ) del metadata["start_time"] metadata["task_id"] = task_id