csvdatasource: provide a ?id= filter to queries (#31491)
This commit is contained in:
parent
585d1a1656
commit
dc80587d5c
|
@ -369,6 +369,12 @@ class CsvDataSource(BaseResource):
|
|||
new_data.append(dict(zip(titles, new_row)))
|
||||
data = new_data
|
||||
|
||||
if 'id' in request.GET:
|
||||
# always provide a ?id= filter.
|
||||
filters = ["id == %r" % request.GET['id']]
|
||||
data = [row for new_row, row in stream_expressions(filters, data, kind='filters')
|
||||
if new_row[0]]
|
||||
|
||||
# allow jsonp queries by select2
|
||||
# filtering is done there after projection because we need a projection named text for
|
||||
# retro-compatibility with previous use of the csvdatasource with select2
|
||||
|
|
|
@ -691,6 +691,29 @@ def test_query_filter_multiline(app, setup, filetype):
|
|||
assert response.json['err'] == 0
|
||||
assert len(response.json['data']) == 2
|
||||
|
||||
def test_query_builtin_id_filter(app, setup, filetype):
|
||||
csvdata, _url = setup('id,whatever,nom,prenom,sexe', filename=filetype,
|
||||
data=get_file_content(filetype))
|
||||
url = reverse('generic-endpoint', kwargs={
|
||||
'connector': 'csvdatasource',
|
||||
'slug': csvdata.slug,
|
||||
'endpoint': 'query/query-1_/',
|
||||
})
|
||||
|
||||
query = Query(slug='query-1_', resource=csvdata)
|
||||
query.save()
|
||||
|
||||
assert len(app.get(url).json['data']) == 20
|
||||
assert len(app.get(url + '?id=121').json['data']) == 1
|
||||
assert app.get(url + '?id=121').json['data'][0]['prenom'] == 'Eliot'
|
||||
assert app.get(url + '?id=525').json['data'][0]['prenom'] == 'Shanone'
|
||||
|
||||
# check when combined with another filter
|
||||
query.filters = 'sexe == "H"'
|
||||
query.save()
|
||||
assert len(app.get(url).json['data']) == 10
|
||||
assert app.get(url + '?id=121').json['data'][0]['prenom'] == 'Eliot'
|
||||
assert len(app.get(url + '?id=525').json['data']) == 0
|
||||
|
||||
def test_delete_connector_query(admin_user, app, setup, filetype):
|
||||
csvdata, url = setup('id,whatever,nom,prenom,sexe', filename=filetype, data=get_file_content(filetype))
|
||||
|
|
Loading…
Reference in New Issue