diff --git a/edi_oca/models/edi_backend.py b/edi_oca/models/edi_backend.py index f907373a42..77686353da 100644 --- a/edi_oca/models/edi_backend.py +++ b/edi_oca/models/edi_backend.py @@ -7,6 +7,8 @@ import base64 import logging +import traceback +from io import StringIO from odoo import _, exceptions, fields, models, tools @@ -17,10 +19,12 @@ _logger = logging.getLogger(__name__) -def _get_exception_msg(exc): - if hasattr(exc, "args") and isinstance(exc.args[0], str): - return exc.args[0] - return repr(exc) +def _get_exception_msg(): + buff = StringIO() + traceback.print_exc(file=buff) + traceback_txt = buff.getvalue() + buff.close() + return traceback_txt class EDIBackend(models.Model): @@ -227,8 +231,8 @@ def exchange_generate(self, exchange_record, store=True, force=False, **kw): if output: try: self._validate_data(exchange_record, output) - except EDIValidationError as err: - error = _get_exception_msg(err) + except EDIValidationError: + error = _get_exception_msg() state = "validate_error" message = exchange_record._exchange_status_message("validate_ko") exchange_record.update( @@ -290,10 +294,10 @@ def exchange_send(self, exchange_record): message = None try: self._exchange_send(exchange_record) - except self._swallable_exceptions() as err: + except self._swallable_exceptions(): if self.env.context.get("_edi_send_break_on_error"): raise - error = _get_exception_msg(err) + error = _get_exception_msg() state = "output_error_on_send" message = exchange_record._exchange_status_message("send_ko") res = False @@ -458,10 +462,10 @@ def exchange_process(self, exchange_record): message = None try: self._exchange_process(exchange_record) - except self._swallable_exceptions() as err: + except self._swallable_exceptions(): if self.env.context.get("_edi_process_break_on_error"): raise - error = _get_exception_msg(err) + error = _get_exception_msg() state = "input_processed_error" res = False else: @@ -505,15 +509,15 @@ def exchange_receive(self, exchange_record): if content: exchange_record._set_file_content(content) self._validate_data(exchange_record) - except EDIValidationError as err: - error = _get_exception_msg(err) + except EDIValidationError: + error = _get_exception_msg() state = "validate_error" message = exchange_record._exchange_status_message("validate_ko") res = False - except self._swallable_exceptions() as err: + except self._swallable_exceptions(): if self.env.context.get("_edi_receive_break_on_error"): raise - error = _get_exception_msg(err) + error = _get_exception_msg() state = "input_receive_error" message = exchange_record._exchange_status_message("receive_ko") res = False diff --git a/edi_oca/tests/test_backend_output.py b/edi_oca/tests/test_backend_output.py index c6ec5a971b..179c98b696 100644 --- a/edi_oca/tests/test_backend_output.py +++ b/edi_oca/tests/test_backend_output.py @@ -70,10 +70,10 @@ def test_send_record_with_error(self): [ { "edi_exchange_state": "output_error_on_send", - "exchange_error": "OOPS! Something went wrong :(", } ], ) + self.assertIn("OOPS! Something went wrong :(", self.record.exchange_error) def test_send_invalid_direction(self): vals = { diff --git a/edi_oca/tests/test_backend_process.py b/edi_oca/tests/test_backend_process.py index 09742b4a06..5633bc705c 100644 --- a/edi_oca/tests/test_backend_process.py +++ b/edi_oca/tests/test_backend_process.py @@ -57,10 +57,10 @@ def test_process_record_with_error(self): [ { "edi_exchange_state": "input_processed_error", - "exchange_error": "OOPS! Something went wrong :(", } ], ) + self.assertIn("OOPS! Something went wrong :(", self.record.exchange_error) @mute_logger("odoo.models.unlink") def test_process_no_file_record(self): diff --git a/edi_oca/tests/test_backend_validate.py b/edi_oca/tests/test_backend_validate.py index cb0bcd90ee..16b8b3181c 100644 --- a/edi_oca/tests/test_backend_validate.py +++ b/edi_oca/tests/test_backend_validate.py @@ -62,10 +62,10 @@ def test_receive_validate_record_error(self): [ { "edi_exchange_state": "validate_error", - "exchange_error": "Data seems wrong!", } ], ) + self.assertIn("Data seems wrong!", self.record_in.exchange_error) def test_generate_validate_record(self): self.record_out.write({"edi_exchange_state": "new"}) @@ -87,7 +87,7 @@ def test_generate_validate_record_error(self): [ { "edi_exchange_state": "validate_error", - "exchange_error": "Data seems wrong!", } ], ) + self.assertIn("Data seems wrong!", self.record_out.exchange_error)