forked from CGM_Public/pretix_original
Bankimport: Force re-annotation for badly parsed files
This commit is contained in:
@@ -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):
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
Reference in New Issue
Block a user