From 8da2c51f1e2a910055936352595d7edd27f60aec Mon Sep 17 00:00:00 2001 From: Karm Soni Date: Mon, 25 May 2026 12:33:04 +0530 Subject: [PATCH 1/3] fix: resolve key error by initializing target dictionary with _dict and converting response in frappe dict --- transaction_parser/transaction_parser/ai_integration/parser.py | 3 ++- transaction_parser/transaction_parser/utils/response_merger.py | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/transaction_parser/transaction_parser/ai_integration/parser.py b/transaction_parser/transaction_parser/ai_integration/parser.py index 101aa55..e3472e1 100644 --- a/transaction_parser/transaction_parser/ai_integration/parser.py +++ b/transaction_parser/transaction_parser/ai_integration/parser.py @@ -1,3 +1,4 @@ +import json import re from typing import Any @@ -97,7 +98,7 @@ def send_message(self, messages: tuple, file_doc_name: str | None = None) -> dic response = self._make_api_call(request_params) log.request_id = response.id - response_dict = response.to_dict() + response_dict = to_dict(json.dumps(response.to_dict())) log.output = response_dict processed_response = self._process_response(response_dict) diff --git a/transaction_parser/transaction_parser/utils/response_merger.py b/transaction_parser/transaction_parser/utils/response_merger.py index 6cee765..06ee95f 100644 --- a/transaction_parser/transaction_parser/utils/response_merger.py +++ b/transaction_parser/transaction_parser/utils/response_merger.py @@ -168,7 +168,7 @@ def _merge_object( source_value: dict, ) -> None: if key not in target or target[key] is None: - target[key] = {} + target[key] = _dict() self._merge_fields(field_type.children, target[key], source_value) From d3839e5f9afbe9a8f8281cc999fbaa96cb8cab17 Mon Sep 17 00:00:00 2001 From: Karm Soni Date: Mon, 25 May 2026 13:02:41 +0530 Subject: [PATCH 2/3] fix: use model_dump_json instead of converting response to dict and again json --- .../transaction_parser/ai_integration/parser.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/transaction_parser/transaction_parser/ai_integration/parser.py b/transaction_parser/transaction_parser/ai_integration/parser.py index e3472e1..91c7bb2 100644 --- a/transaction_parser/transaction_parser/ai_integration/parser.py +++ b/transaction_parser/transaction_parser/ai_integration/parser.py @@ -98,7 +98,9 @@ def send_message(self, messages: tuple, file_doc_name: str | None = None) -> dic response = self._make_api_call(request_params) log.request_id = response.id - response_dict = to_dict(json.dumps(response.to_dict())) + response_dict = json.loads( + response.model_dump_json(), object_hook=frappe._dict + ) log.output = response_dict processed_response = self._process_response(response_dict) From 16981860ea52bd0601691bad9d6613fe8956937d Mon Sep 17 00:00:00 2001 From: Karm Soni Date: Mon, 25 May 2026 13:02:54 +0530 Subject: [PATCH 3/3] fix: replace _dict with frappe._dict for response handling in ResponseMerger --- .../transaction_parser/utils/response_merger.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/transaction_parser/transaction_parser/utils/response_merger.py b/transaction_parser/transaction_parser/utils/response_merger.py index 06ee95f..3fe648c 100644 --- a/transaction_parser/transaction_parser/utils/response_merger.py +++ b/transaction_parser/transaction_parser/utils/response_merger.py @@ -1,7 +1,7 @@ from dataclasses import dataclass from typing import Any -from frappe import _dict +import frappe @dataclass @@ -89,7 +89,9 @@ def __init__( schema: dict, match_keys: dict[str, list[str]] | None = None, ): - self.response = _dict(response) if isinstance(response, dict) else response + self.response = ( + frappe._dict(response) if isinstance(response, dict) else response + ) self.schema = schema self.match_keys = match_keys or {} @@ -168,7 +170,7 @@ def _merge_object( source_value: dict, ) -> None: if key not in target or target[key] is None: - target[key] = _dict() + target[key] = frappe._dict() self._merge_fields(field_type.children, target[key], source_value)