csv_import: display error message on bad encoding (#37374)

This commit is contained in:
Valentin Deniaud 2019-11-19 14:42:17 +01:00
parent 55ec200c40
commit 2936f25623
2 changed files with 12 additions and 2 deletions

View File

@ -120,7 +120,12 @@ class CsvImporter(object):
def parse_csv():
try:
dialect = csv.Sniffer().sniff(input_fd.read().encode('utf-8'))
content = input_fd.read().encode('utf-8')
except UnicodeDecodeError:
self.error = Error('bad-encoding', _('Bad encoding'))
return False
try:
dialect = csv.Sniffer().sniff(content)
except csv.Error as e:
self.error = Error('unknown-csv-dialect', _('Unknown CSV dialect: %s') % e)
return False
@ -137,7 +142,6 @@ class CsvImporter(object):
input_fd = set_encoding(input_fd, encoding)
if input_fd is None:
return False
return parse_csv()

View File

@ -84,6 +84,12 @@ def test_unknown_csv_dialect_error(profile, user_csv_importer_factory):
assert importer.errors == [Error('unknown-csv-dialect')]
def test_bad_csv_encoding(profile):
importer = CsvImporter()
assert not importer.run(u'é'.encode('utf-8'), 'ascii')
assert importer.error == Error('bad-encoding')
def test_empty_header_row_error(profile, user_csv_importer_factory):
importer = user_csv_importer_factory('\n1,2,3')
assert not importer.run()