0002-opendatasoft-manage-empty-contents-returned-43223.patch
passerelle/apps/opendatasoft/models.py | ||
---|---|---|
74 | 74 |
params.update({'rows': limit}) |
75 | 75 | |
76 | 76 |
result_response = self.requests.get(url, params=params) |
77 | 77 |
err_desc = result_response.json().get('error') |
78 | 78 |
if err_desc: |
79 | 79 |
return {'err': 1, 'err_desc': err_desc} |
80 | 80 | |
81 | 81 |
result = [] |
82 |
for record in result_response.json().get('records'): |
|
83 |
data = {} |
|
84 |
data['id'] = record.get('recordid') |
|
85 | ||
86 |
context = {} |
|
87 |
for key, value in record.get('fields').items(): |
|
88 |
context[key] = force_text(value) |
|
89 |
template = Template(text_template) |
|
90 |
data['text'] = template.render(Context(context)).strip() |
|
91 | ||
92 |
result.append(data) |
|
82 |
err_desc = '' |
|
83 |
if result_response.json().get('records') is None: |
|
84 |
err_desc = "field records doesn't exist" |
|
85 |
else: |
|
86 |
for idx, record in enumerate(result_response.json().get('records')): |
|
87 |
data = {} |
|
88 |
data['id'] = record.get('recordid') |
|
89 |
if not data['id']: |
|
90 |
err_desc = 'no recordid on record %s' % (idx + 1) |
|
91 |
break |
|
92 |
if not isinstance(record.get('fields'), dict): |
|
93 |
err_desc = 'no fields dictionary on record %s' % (idx + 1) |
|
94 |
break |
|
95 |
context = {} |
|
96 |
for key, value in record.get('fields').items(): |
|
97 |
context[key] = force_text(value) |
|
98 |
template = Template(text_template) |
|
99 |
data['text'] = template.render(Context(context)).strip() |
|
100 |
result.append(data) |
|
101 |
if err_desc: |
|
102 |
return {'err': 1, 'err_desc': "The JSON reply is invalid: " + err_desc} |
|
93 | 103 |
return {'data': result} |
94 | 104 | |
95 | 105 |
@endpoint(name='q', |
96 | 106 |
description=_('Query'), |
97 | 107 |
pattern=r'^(?P<query_slug>[\w:_-]+)/$', |
98 | 108 |
perm='can_access', |
99 | 109 |
show=False) |
100 | 110 |
def q(self, request, query_slug, **kwargs): |
tests/test_opendatasoft.py | ||
---|---|---|
192 | 192 | |
193 | 193 |
# error returned by opendadasoft server |
194 | 194 |
json_response = json.dumps({'error': "The query is invalid : Field 00 doesn't exist"}) |
195 | 195 |
mocked_get.return_value = utils.FakedResponse(content=json_response, status_code=200) |
196 | 196 |
resp = app.get(endpoint, status=200) |
197 | 197 |
assert resp.json['err'] |
198 | 198 |
assert resp.json['err_desc'] == "The query is invalid : Field 00 doesn't exist" |
199 | 199 | |
200 |
# empty reply |
|
201 |
mocked_get.return_value = utils.FakedResponse(content='{"records": []}', status_code=200) |
|
202 |
resp = app.get(endpoint, status=200) |
|
203 |
assert not resp.json['err'] |
|
204 |
assert resp.json['data'] == [] |
|
205 | ||
206 |
# empty fields |
|
207 |
json_response = json.dumps({'records': [{'recordid': '42', 'fields': {}}]}) |
|
208 |
mocked_get.return_value = utils.FakedResponse(content=json_response, status_code=200) |
|
209 |
resp = app.get(endpoint, status=200) |
|
210 |
assert not resp.json['err'] |
|
211 |
assert resp.json['data'] == [{'id': '42', 'text': ''}] |
|
212 | ||
213 |
mocked_get.return_value = utils.FakedResponse(content='{}', status_code=200) |
|
214 |
resp = app.get(endpoint, status=200) |
|
215 |
assert resp.json['err'] |
|
216 |
assert resp.json['err_desc'] == "The JSON reply is invalid: field records doesn't exist" |
|
217 | ||
218 |
json_response = json.dumps({'records': [{'fields': {}}]}) |
|
219 |
mocked_get.return_value = utils.FakedResponse(content=json_response, status_code=200) |
|
220 |
resp = app.get(endpoint, status=200) |
|
221 |
assert resp.json['err'] |
|
222 |
assert resp.json['err_desc'] == 'The JSON reply is invalid: no recordid on record 1' |
|
223 | ||
224 |
json_response = json.dumps({'records': [{'recordid': '42'}]}) |
|
225 |
mocked_get.return_value = utils.FakedResponse(content=json_response, status_code=200) |
|
226 |
resp = app.get(endpoint, status=200) |
|
227 |
assert resp.json['err'] |
|
228 |
assert resp.json['err_desc'] == 'The JSON reply is invalid: no fields dictionary on record 1' |
|
229 | ||
200 | 230 | |
201 | 231 |
@mock.patch('passerelle.utils.Request.get') |
202 | 232 |
def test_search_using_q(mocked_get, app, connector): |
203 | 233 |
endpoint = utils.generic_endpoint_url('opendatasoft', 'search', slug=connector.slug) |
204 | 234 |
assert endpoint == '/opendatasoft/my_connector/search' |
205 | 235 |
params = { |
206 | 236 |
'dataset': 'referentiel-adresse-test', |
207 | 237 |
'text_template': '{{numero}} {{nom_rue|safe}} {{nom_commun}}', |
208 |
- |