diff --git a/InvenTree/InvenTree/exceptions.py b/InvenTree/InvenTree/exceptions.py index f8742fe027..f6fca172a3 100644 --- a/InvenTree/InvenTree/exceptions.py +++ b/InvenTree/InvenTree/exceptions.py @@ -53,7 +53,10 @@ def log_error(path, error_name=None, error_info=None, error_data=None): if error_data: data = error_data else: - data = '\n'.join(traceback.format_exception(kind, info, data)) + try: + data = '\n'.join(traceback.format_exception(kind, info, data)) + except AttributeError: + data = 'No traceback information available' # Log error to stderr logger.error(info) diff --git a/InvenTree/common/api.py b/InvenTree/common/api.py index e2e10ecdf2..7eec94aff2 100644 --- a/InvenTree/common/api.py +++ b/InvenTree/common/api.py @@ -668,6 +668,13 @@ common_api_urls = [ path('', BackgroundTaskOverview.as_view(), name='api-task-overview'), ]), ), + path( + 'error-report/', + include([ + path('/', ErrorMessageDetail.as_view(), name='api-error-detail'), + path('', ErrorMessageList.as_view(), name='api-error-list'), + ]), + ), # Project codes path( 'project-code/', diff --git a/InvenTree/common/tests.py b/InvenTree/common/tests.py index b9368e079b..49c02dd47b 100644 --- a/InvenTree/common/tests.py +++ b/InvenTree/common/tests.py @@ -658,6 +658,30 @@ class PluginSettingsApiTest(PluginMixin, InvenTreeAPITestCase): ... +class ErrorReportTest(InvenTreeAPITestCase): + """Unit tests for the error report API.""" + + def test_error_list(self): + """Test error list.""" + from InvenTree.exceptions import log_error + + url = reverse('api-error-list') + response = self.get(url, expected_code=200) + self.assertEqual(len(response.data), 0) + + # Throw an error! + log_error( + 'test error', error_name='My custom error', error_info={'test': 'data'} + ) + + response = self.get(url, expected_code=200) + self.assertEqual(len(response.data), 1) + + err = response.data[0] + for k in ['when', 'info', 'data', 'path']: + self.assertIn(k, err) + + class TaskListApiTests(InvenTreeAPITestCase): """Unit tests for the background task API endpoints."""