🐛(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:
committed by
aleb_the_flash
parent
d71e417d58
commit
e458272745
@@ -73,10 +73,22 @@ class TasksTracker:
|
|||||||
"""Save metadata for a specific task to Redis."""
|
"""Save metadata for a specific task to Redis."""
|
||||||
self._redis.hset(self._get_redis_key(task_id), mapping=metadata)
|
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):
|
def _get_metadata(self, task_id):
|
||||||
"""Retrieve and parse metadata for a specific task from Redis."""
|
"""Retrieve and parse metadata for a specific task from Redis."""
|
||||||
raw_metadata = self._redis.hgetall(self._get_redis_key(task_id))
|
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):
|
def has_task_id(self, task_id):
|
||||||
"""Check if task_id exists in tasks metadata cache."""
|
"""Check if task_id exists in tasks metadata cache."""
|
||||||
@@ -182,9 +194,9 @@ class TasksTracker:
|
|||||||
metadata = self._get_metadata(task_id)
|
metadata = self._get_metadata(task_id)
|
||||||
|
|
||||||
if "start_time" in metadata:
|
if "start_time" in metadata:
|
||||||
metadata["execution_time"] = str(round(
|
metadata["execution_time"] = round(
|
||||||
time.time() - float(metadata["start_time"]), 2
|
time.time() - metadata["start_time"], 2
|
||||||
))
|
)
|
||||||
del metadata["start_time"]
|
del metadata["start_time"]
|
||||||
|
|
||||||
metadata["task_id"] = task_id
|
metadata["task_id"] = task_id
|
||||||
|
|||||||
Reference in New Issue
Block a user