Skip to content

Commit

Permalink
Merge pull request #1381 from matthewhegarty/collect-failed-rows-crash
Browse files Browse the repository at this point in the history
Fix crash when import_data() called with empty Dataset and collect_failed_rows=True (#1381)
  • Loading branch information
matthewhegarty committed Feb 17, 2022
2 parents 0d4340f + 15d38b4 commit 0ad13e0
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 1 deletion.
2 changes: 1 addition & 1 deletion docs/changelog.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Changelog
2.7.2 (unreleased)
------------------

- Nothing changed yet.
- Fix crash when import_data() called with empty Dataset and `collect_failed_rows=True` (#1381)


2.7.1 (2021-12-23)
Expand Down
1 change: 1 addition & 0 deletions import_export/results.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,7 @@ def append_base_error(self, error):
self.base_errors.append(error)

def add_dataset_headers(self, headers):
headers = list() if not headers else headers
self.failed_dataset.headers = headers + ["Error"]

def append_failed_row(self, row, error):
Expand Down
5 changes: 5 additions & 0 deletions tests/core/tests/test_resources.py
Original file line number Diff line number Diff line change
Expand Up @@ -469,6 +469,11 @@ def test_import_data_raises_field_specific_validation_errors(self):
self.assertIs(result.rows[0].import_type, results.RowResult.IMPORT_TYPE_INVALID)
self.assertIn('birthday', result.invalid_rows[0].field_specific_errors)

def test_import_data_empty_dataset_with_collect_failed_rows(self):
resource = AuthorResource()
result = resource.import_data(tablib.Dataset(), collect_failed_rows=True)
self.assertEqual(['Error'], result.failed_dataset.headers)

def test_collect_failed_rows(self):
resource = ProfileResource()
headers = ['id', 'user']
Expand Down
10 changes: 10 additions & 0 deletions tests/core/tests/test_results.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,20 @@ def setUp(self):
self.dataset = Dataset(*rows, headers=headers)

def test_add_dataset_headers(self):
target = ['some_header', 'Error']
self.result.add_dataset_headers(['some_header'])
self.assertEqual(target, self.result.failed_dataset.headers)

def test_add_dataset_headers_empty_list(self):
target = ['Error']
self.result.add_dataset_headers([])
self.assertEqual(target, self.result.failed_dataset.headers)

def test_add_dataset_headers_None(self):
target = ['Error']
self.result.add_dataset_headers(None)
self.assertEqual(target, self.result.failed_dataset.headers)

def test_result_append_failed_row_with_ValidationError(self):
target = [[1, 'Some book', "['some error']"]]
self.result.append_failed_row(self.dataset.dict[0], ValidationError('some error'))
Expand Down

0 comments on commit 0ad13e0

Please sign in to comment.