0001-jsondatastore-attribute-filter-on-data-endpoint-3578.patch
passerelle/apps/jsondatastore/models.py | ||
---|---|---|
88 | 88 |
objects = JsonData.objects.filter(datastore=self) |
89 | 89 |
if name_id is not None: |
90 | 90 |
objects = objects.filter(name_id=name_id) |
91 |
else: |
|
92 |
params = request.GET |
|
93 |
try: |
|
94 |
key, value = params.items()[0] |
|
95 |
except IndexError: |
|
96 |
pass # return whole list |
|
97 |
else: |
|
98 |
objects = [o for o in objects if o.content.get(key) == value] |
|
99 | ||
91 | 100 |
return {'data': [x.to_json() for x in objects]} |
92 | 101 | |
93 | 102 |
@endpoint(perm='can_access', methods=['post'], name='data', |
tests/test_jsondatastore.py | ||
---|---|---|
193 | 193 |
resp = app.get('/jsondatastore/foobar/data/') |
194 | 194 |
assert resp.json['data'][0]['creation_datetime'] == encoder.default(creation_datetime) |
195 | 195 |
assert resp.json['data'][0]['last_update_datetime'] == encoder.default(last_update_datetime) |
196 | ||
197 | ||
198 |
def test_jsondatastore_data_filter(app, jsondatastore): |
|
199 |
resp = app.post_json('/jsondatastore/foobar/data/create', params={'foo': 'bar'}) |
|
200 |
uuid1 = resp.json['id'] |
|
201 |
resp = app.post_json('/jsondatastore/foobar/data/create', params={'foo': 'baz'}) |
|
202 |
uuid2 = resp.json['id'] |
|
203 |
resp = app.post_json('/jsondatastore/foobar/data/create', params={'foo': 'bar'}) |
|
204 |
uuid3 = resp.json['id'] |
|
205 | ||
206 |
resp = app.get('/jsondatastore/foobar/data/', params={'foo': 'bar'}) |
|
207 |
assert sorted([d['id'] for d in resp.json['data']]) == sorted([uuid1, uuid3]) |
|
208 | ||
209 |
resp = app.get('/jsondatastore/foobar/data/', params={'foo': 'baz'}) |
|
210 |
assert [d['id'] for d in resp.json['data']] == [uuid2] |
|
211 | ||
212 |
resp = app.get('/jsondatastore/foobar/data/', params={'arf': 'bar'}) |
|
213 |
assert [d['id'] for d in resp.json['data']] == [] |
|
196 |
- |