🐛(summary) fix data type serialization issues with Redis and PostHog

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.
This commit is contained in:
lebaudantoine
2025-07-11 10:16:12 +02:00
committed by aleb_the_flash
parent d71e417d58
commit e458272745

View File

@@ -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