Skip to content

Commit 50fd471

Browse files
Better error handling
1 parent 9554e49 commit 50fd471

File tree

1 file changed

+23
-17
lines changed

1 file changed

+23
-17
lines changed

mfr/extensions/tabular/libs/stdlib_tools.py

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import re
22
import csv
3+
from http import HTTPStatus
34

45
from mfr.extensions.tabular import utilities
56
from mfr.extensions.tabular.exceptions import EmptyTableError, TabularRendererError
@@ -42,35 +43,40 @@ def parse_stdlib(reader):
4243
"""
4344
columns = []
4445
# update the reader field names to avoid duplicate column names when performing row extraction
45-
for idx, fieldname in enumerate(reader.fieldnames or []):
46-
column_count = sum(1 for column in columns if fieldname == column['name'])
47-
if column_count:
48-
unique_fieldname = '{}-{}'.format(fieldname, column_count + 1)
49-
reader.fieldnames[idx] = unique_fieldname
50-
else:
51-
unique_fieldname = fieldname
52-
columns.append({
53-
'id': unique_fieldname,
54-
'field': unique_fieldname,
55-
'name': fieldname,
56-
'sortable': True,
57-
})
58-
5946
try:
47+
for idx, fieldname in enumerate(reader.fieldnames or []):
48+
column_count = sum(1 for column in columns if fieldname == column['name'])
49+
if column_count:
50+
unique_fieldname = '{}-{}'.format(fieldname, column_count + 1)
51+
reader.fieldnames[idx] = unique_fieldname
52+
else:
53+
unique_fieldname = fieldname
54+
columns.append({
55+
'id': unique_fieldname,
56+
'field': unique_fieldname,
57+
'name': fieldname,
58+
'sortable': True,
59+
})
60+
6061
rows = [row for row in reader]
6162
except csv.Error as e:
6263
if any("field larger than field limit" in errorMsg for errorMsg in e.args):
6364
raise TabularRendererError(
6465
'This file contains a field too large to render. '
6566
'Please download and view it locally.',
66-
code=400,
67+
code=HTTPStatus.BAD_REQUEST,
6768
extension='csv',
6869
) from e
6970
else:
70-
raise TabularRendererError('csv.Error: {}'.format(e), extension='csv') from e
71+
raise TabularRendererError('Cannot render file as csv/tsv. '
72+
'The file may be empty or corrupt',
73+
code=HTTPStatus.BAD_REQUEST,
74+
extension='csv') from e
7175

7276
if not columns and not rows:
73-
raise EmptyTableError('Table empty or corrupt.', extension='csv')
77+
raise EmptyTableError('Cannot render file as csv/tsv. '
78+
'The file may be empty or corrupt',
79+
code=HTTPStatus.BAD_REQUEST, extension='csv')
7480

7581
return {'Sheet 1': (columns, rows)}
7682

0 commit comments

Comments
 (0)