diff --git a/transaction_parser/transaction_parser/ai_integration/parser.py b/transaction_parser/transaction_parser/ai_integration/parser.py index f74eec2..946d0cf 100644 --- a/transaction_parser/transaction_parser/ai_integration/parser.py +++ b/transaction_parser/transaction_parser/ai_integration/parser.py @@ -12,7 +12,7 @@ ) from transaction_parser.transaction_parser.utils import is_enabled, to_dict from transaction_parser.transaction_parser.utils.integration_request import ( - enqueue_integration_request, + create_integration_request, ) @@ -79,7 +79,7 @@ def send_message(self, messages: tuple, file_doc_name: str | None = None) -> dic raise e finally: - enqueue_integration_request(**log) + create_integration_request(**log) def _create_log_entry(self, file_doc_name: str | None) -> frappe._dict: """Create a log entry for the API call.""" diff --git a/transaction_parser/transaction_parser/utils/__init__.py b/transaction_parser/transaction_parser/utils/__init__.py index d3b93ff..ba2331d 100644 --- a/transaction_parser/transaction_parser/utils/__init__.py +++ b/transaction_parser/transaction_parser/utils/__init__.py @@ -1,4 +1,5 @@ import json +from functools import wraps import frappe from frappe import _ @@ -33,3 +34,20 @@ def to_dict(value, throw=True): frappe.throw(_("Invalid JSON")) return frappe._dict() + + +def execute_in_new_transaction(fn): + @wraps(fn) + def wrapper(*args, **kwargs): + _db = frappe.local.db + try: + frappe.connect(set_admin_as_user=False) + result = fn(*args, **kwargs) + frappe.db.commit() # nosemgrep + return result + + finally: + frappe.db.close() + frappe.local.db = _db + + return wrapper diff --git a/transaction_parser/transaction_parser/utils/integration_request.py b/transaction_parser/transaction_parser/utils/integration_request.py index bbf2063..fd0edeb 100644 --- a/transaction_parser/transaction_parser/utils/integration_request.py +++ b/transaction_parser/transaction_parser/utils/integration_request.py @@ -3,15 +3,15 @@ import frappe from frappe import _ -from transaction_parser.transaction_parser.utils.__init__ import pretty_json +from transaction_parser.transaction_parser.utils import ( + execute_in_new_transaction, + pretty_json, +) SERVICE_NAME = "Transaction Parser API" -def enqueue_integration_request(**kwargs): - frappe.enqueue(create_integration_request, **kwargs) - - +@execute_in_new_transaction def create_integration_request( url=None, request_id=None,