csvdatasource: fix order on missing columns by using empty strings (#44044)

This commit is contained in:
Thomas NOËL 2020-06-13 00:53:55 +02:00
parent 26931166d6
commit 3b4d90c918
2 changed files with 18 additions and 2 deletions

View File

@ -277,7 +277,7 @@ class CsvDataSource(BaseResource):
try:
return row[index]
except IndexError:
return None
return ''
return [{caption: get_cell(row, index) for caption, index in zip(caption, indexes)} for row in rows]

View File

@ -349,7 +349,7 @@ def test_missing_columns(client, setup):
result = json_loads(resp.content)
assert result['err'] == 0
assert len(result['data']) == 21
assert result['data'][-1] == {'lname': 'C', 'sex': None, 'id': 'B', 'fname': None, 'fam': 'A'}
assert result['data'][-1] == {'lname': 'C', 'sex': '', 'id': 'B', 'fname': '', 'fam': 'A'}
def test_unknown_sheet_name(client, setup):
@ -553,6 +553,22 @@ def test_query_order(app, setup, filetype):
row['prenom'].lower())
def test_query_order_missing_column(app, setup):
csvdata, url = setup(data=StringIO(data + '42;42;STOPHERE\n'))
url = reverse('generic-endpoint', kwargs={
'connector': 'csvdatasource',
'slug': csvdata.slug,
'endpoint': 'query/query-1_/',
})
query = Query(slug='query-1_', resource=csvdata, order='fname')
query.save()
response = app.get(url)
assert response.json['err'] == 0
assert isinstance(response.json['data'], list)
assert response.json['data'] == sorted(response.json['data'], key=lambda row:
row['fname'])
def test_query_error(app, setup, filetype):
csvdata, url = setup('id,whatever,nom,prenom,sexe', filename=filetype, data=get_file_content(filetype))
url = reverse('generic-endpoint', kwargs={