From 7c48a6a1dcda3e9fc6b369b739ffdd73f054f8a6 Mon Sep 17 00:00:00 2001 From: Untone Date: Wed, 7 Aug 2024 10:30:51 +0300 Subject: [PATCH] dict-fix --- services/db.py | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/services/db.py b/services/db.py index e55f3829..0458c567 100644 --- a/services/db.py +++ b/services/db.py @@ -54,22 +54,25 @@ class Base(declarative_base()): def dict(self) -> Dict[str, Any]: column_names = filter(lambda x: x not in FILTERED_FIELDS, self.__table__.columns.keys()) + data = {} try: - data = {} - for c in column_names: - value = getattr(self, c) - if isinstance(value, JSON): - # save JSON column as dict - data[c] = json.loads(str(value)) + for column_name in column_names: + value = getattr(self, column_name) + # Check if the value is JSON and decode it if necessary + if isinstance(value, (str, bytes)) and isinstance(self.__table__.columns[column_name].type, JSON): + try: + data[column_name] = json.loads(value) + except (TypeError, json.JSONDecodeError) as e: + logger.error(f"Error decoding JSON for column '{column_name}': {e}") + data[column_name] = value else: - data[c] = value - # Add synthetic field .stat + data[column_name] = value + # Add synthetic field .stat if it exists if hasattr(self, "stat"): data["stat"] = self.stat - return data except Exception as e: logger.error(f"Error occurred while converting object to dictionary: {e}") - return {} + return data def update(self, values: Dict[str, Any]) -> None: for key, value in values.items():