From b2dfd8ab11dbd4060da132983d848f4654f03db1 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Tue, 30 May 2017 18:43:53 +0200 Subject: [PATCH] Bankimport: Force re-annotation for badly parsed files --- src/pretix/plugins/banktransfer/csvimport.py | 5 ++++- src/pretix/plugins/banktransfer/views.py | 8 +++++--- src/tests/plugins/banktransfer/test_csvparser.py | 2 +- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/pretix/plugins/banktransfer/csvimport.py b/src/pretix/plugins/banktransfer/csvimport.py index 9c534f9a71..fb0f3ee91c 100644 --- a/src/pretix/plugins/banktransfer/csvimport.py +++ b/src/pretix/plugins/banktransfer/csvimport.py @@ -13,6 +13,7 @@ def parse(data, hint): raise HintMismatchError('Invalid hint') if len(data[0]) != hint['cols']: raise HintMismatchError('Wrong column count') + good_hint = False for row in data: resrow = {} if None in row or len(row) != hint['cols']: @@ -31,8 +32,10 @@ def parse(data, hint): or len(resrow['reference']) == 0 or resrow['date'] == '': # This is probably a headline or something other special. continue + if resrow['reference'] or resrow['payer']: + good_hint = True result.append(resrow) - return result + return result, good_hint def get_rows_from_file(file): diff --git a/src/pretix/plugins/banktransfer/views.py b/src/pretix/plugins/banktransfer/views.py index 6e4b3b1dde..262c0a92ae 100644 --- a/src/pretix/plugins/banktransfer/views.py +++ b/src/pretix/plugins/banktransfer/views.py @@ -275,12 +275,14 @@ class ImportView(EventPermissionRequiredMixin, ListView): if self.request.event.settings.get('banktransfer_csvhint') is not None: hint = self.request.event.settings.get('banktransfer_csvhint', as_type=dict) + try: - parsed = csvimport.parse(data, hint) + parsed, good = csvimport.parse(data, hint) except csvimport.HintMismatchError: # TODO: narrow down logger.exception('Import using stored hint failed') else: - return self.start_processing(parsed) + if good: + return self.start_processing(parsed) return self.assign_view(data) @@ -308,7 +310,7 @@ class ImportView(EventPermissionRequiredMixin, ListView): logger.error('Import using stored hint failed: ' + str(e)) pass else: - parsed = csvimport.parse(data, hint) + parsed, __ = csvimport.parse(data, hint) return self.start_processing(parsed) def process_csv(self): diff --git a/src/tests/plugins/banktransfer/test_csvparser.py b/src/tests/plugins/banktransfer/test_csvparser.py index 0e65cb7f72..792245a212 100644 --- a/src/tests/plugins/banktransfer/test_csvparser.py +++ b/src/tests/plugins/banktransfer/test_csvparser.py @@ -15,7 +15,7 @@ class CsvImportTest(TestCase): with open(os.path.join(DATA_DIR, filename), 'rb') as f: data = csvimport.get_rows_from_file(f) self.assertEqual(data, expected) - parsed = csvimport.parse(data, hint) + parsed, good = csvimport.parse(data, hint) self.assertEqual(parsed, expected_parsed) def test_sample_file_bbbank(self):