Skip to content

Commit dc19842

Browse files
author
ffaraoneim
authored
Merge pull request #22 from cloudblue/LITE-19829-send-traceback-in-task-output
LITE-19829 send traceback in output field instead of exception message
2 parents 444f193 + c47b1fd commit dc19842

File tree

2 files changed

+13
-7
lines changed

2 files changed

+13
-7
lines changed

connect/eaas/manager.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@
44
# Copyright (c) 2021 Ingram Micro. All Rights Reserved.
55
#
66
import asyncio
7-
from asyncio.futures import Future
87
import inspect
98
import logging
9+
import traceback
10+
from asyncio.futures import Future
1011
from concurrent.futures import ThreadPoolExecutor
1112

1213
from connect.client import AsyncConnectClient, ClientError
@@ -231,7 +232,7 @@ async def build_bg_response(self, task_data, future):
231232
f'Unhandled exception during execution of task {task_data.task_id}',
232233
)
233234
result_message.result = ResultType.RETRY
234-
result_message.output = str(e) or repr(e)
235+
result_message.output = traceback.format_exc()[:4000]
235236
return result_message
236237
logger.debug(f'result: {result}')
237238
result_message.result = result.status
@@ -257,7 +258,7 @@ async def build_interactive_response(self, task_data, future):
257258
f'Unhandled exception during execution of task {task_data.task_id}',
258259
)
259260
result_message.result = ResultType.FAIL
260-
result_message.output = str(e) or repr(e)
261+
result_message.output = traceback.format_exc()[:4000]
261262
if result_message.task_type in (
262263
TaskType.PRODUCT_ACTION_EXECUTION,
263264
TaskType.PRODUCT_CUSTOM_EVENT_PROCESSING,

tests/test_manager.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,8 @@ async def test_background_task_request_error(mocker, extension_cls):
278278
manager = TasksManager(worker)
279279
manager.get_request = mocker.AsyncMock(side_effect=ClientError('Request not found', 404))
280280

281+
mocker.patch('traceback.format_exc', return_value='formatted traceback')
282+
281283
manager.start()
282284

283285
task = TaskPayload(
@@ -293,7 +295,7 @@ async def test_background_task_request_error(mocker, extension_cls):
293295
message = Message(message_type=MessageType.TASK, data=task)
294296
json_msg = message.to_json()
295297
json_msg['data']['result'] = 'retry'
296-
json_msg['data']['output'] = 'Request not found'
298+
json_msg['data']['output'] = 'formatted traceback'
297299
worker.send.assert_awaited_once_with(json_msg)
298300

299301

@@ -408,6 +410,8 @@ async def test_interactive_task_exception(mocker, extension_cls):
408410
'validate_asset_purchase_request',
409411
exception=Exception('validation exception'),
410412
)
413+
long_stack_trace = 'x' * 5000
414+
mocker.patch('traceback.format_exc', return_value=long_stack_trace)
411415
logger_mock = mocker.MagicMock()
412416
extension = extension_class(None, logger_mock, None)
413417

@@ -434,7 +438,7 @@ async def test_interactive_task_exception(mocker, extension_cls):
434438
message = Message(message_type=MessageType.TASK, data=task)
435439
json_msg = message.to_json()
436440
json_msg['data']['result'] = ResultType.FAIL
437-
json_msg['data']['output'] = 'validation exception'
441+
json_msg['data']['output'] = long_stack_trace[:4000]
438442
assert worker.send.mock_calls[1].args[0] == json_msg
439443

440444

@@ -444,6 +448,7 @@ async def test_interactive_task_exception_product_action(mocker, extension_cls):
444448
'execute_product_action',
445449
exception=Exception('validation exception'),
446450
)
451+
mocker.patch('traceback.format_exc', return_value='formatted stacktrace')
447452
logger_mock = mocker.MagicMock()
448453
extension = extension_class(None, logger_mock, None)
449454

@@ -472,7 +477,7 @@ async def test_interactive_task_exception_product_action(mocker, extension_cls):
472477
json_msg['data']['data'] = {
473478
'http_status': 400,
474479
'headers': None,
475-
'body': 'validation exception',
480+
'body': 'formatted stacktrace',
476481
}
477-
json_msg['data']['output'] = 'validation exception'
482+
json_msg['data']['output'] = 'formatted stacktrace'
478483
assert worker.send.mock_calls[1].args[0] == json_msg

0 commit comments

Comments
 (0)