Bankimport: Force re-annotation for badly parsed files

This commit is contained in:
Raphael Michel
2017-05-30 18:43:53 +02:00
parent 43f4803da7
commit b2dfd8ab11
3 changed files with 10 additions and 5 deletions
+4 -1
View File
@@ -13,6 +13,7 @@ def parse(data, hint):
raise HintMismatchError('Invalid hint') raise HintMismatchError('Invalid hint')
if len(data[0]) != hint['cols']: if len(data[0]) != hint['cols']:
raise HintMismatchError('Wrong column count') raise HintMismatchError('Wrong column count')
good_hint = False
for row in data: for row in data:
resrow = {} resrow = {}
if None in row or len(row) != hint['cols']: 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'] == '': or len(resrow['reference']) == 0 or resrow['date'] == '':
# This is probably a headline or something other special. # This is probably a headline or something other special.
continue continue
if resrow['reference'] or resrow['payer']:
good_hint = True
result.append(resrow) result.append(resrow)
return result return result, good_hint
def get_rows_from_file(file): def get_rows_from_file(file):
+5 -3
View File
@@ -275,12 +275,14 @@ class ImportView(EventPermissionRequiredMixin, ListView):
if self.request.event.settings.get('banktransfer_csvhint') is not None: if self.request.event.settings.get('banktransfer_csvhint') is not None:
hint = self.request.event.settings.get('banktransfer_csvhint', as_type=dict) hint = self.request.event.settings.get('banktransfer_csvhint', as_type=dict)
try: try:
parsed = csvimport.parse(data, hint) parsed, good = csvimport.parse(data, hint)
except csvimport.HintMismatchError: # TODO: narrow down except csvimport.HintMismatchError: # TODO: narrow down
logger.exception('Import using stored hint failed') logger.exception('Import using stored hint failed')
else: else:
return self.start_processing(parsed) if good:
return self.start_processing(parsed)
return self.assign_view(data) return self.assign_view(data)
@@ -308,7 +310,7 @@ class ImportView(EventPermissionRequiredMixin, ListView):
logger.error('Import using stored hint failed: ' + str(e)) logger.error('Import using stored hint failed: ' + str(e))
pass pass
else: else:
parsed = csvimport.parse(data, hint) parsed, __ = csvimport.parse(data, hint)
return self.start_processing(parsed) return self.start_processing(parsed)
def process_csv(self): def process_csv(self):
@@ -15,7 +15,7 @@ class CsvImportTest(TestCase):
with open(os.path.join(DATA_DIR, filename), 'rb') as f: with open(os.path.join(DATA_DIR, filename), 'rb') as f:
data = csvimport.get_rows_from_file(f) data = csvimport.get_rows_from_file(f)
self.assertEqual(data, expected) self.assertEqual(data, expected)
parsed = csvimport.parse(data, hint) parsed, good = csvimport.parse(data, hint)
self.assertEqual(parsed, expected_parsed) self.assertEqual(parsed, expected_parsed)
def test_sample_file_bbbank(self): def test_sample_file_bbbank(self):