|
1 | 1 | import re
|
2 | 2 | import csv
|
| 3 | +from http import HTTPStatus |
3 | 4 |
|
4 | 5 | from mfr.extensions.tabular import utilities
|
5 | 6 | from mfr.extensions.tabular.exceptions import EmptyTableError, TabularRendererError
|
@@ -42,35 +43,40 @@ def parse_stdlib(reader):
|
42 | 43 | """
|
43 | 44 | columns = []
|
44 | 45 | # 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 |
| - |
59 | 46 | 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 | + |
60 | 61 | rows = [row for row in reader]
|
61 | 62 | except csv.Error as e:
|
62 | 63 | if any("field larger than field limit" in errorMsg for errorMsg in e.args):
|
63 | 64 | raise TabularRendererError(
|
64 | 65 | 'This file contains a field too large to render. '
|
65 | 66 | 'Please download and view it locally.',
|
66 |
| - code=400, |
| 67 | + code=HTTPStatus.BAD_REQUEST, |
67 | 68 | extension='csv',
|
68 | 69 | ) from e
|
69 | 70 | 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 |
71 | 75 |
|
72 | 76 | 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') |
74 | 80 |
|
75 | 81 | return {'Sheet 1': (columns, rows)}
|
76 | 82 |
|
|
0 commit comments