0001-opendatasoft-export-and-import-queries-43443.patch
passerelle/apps/opendatasoft/models.py | ||
---|---|---|
39 | 39 |
help_text=_('API key used as credentials'), |
40 | 40 |
) |
41 | 41 | |
42 | 42 |
category = _('Data Sources') |
43 | 43 | |
44 | 44 |
class Meta: |
45 | 45 |
verbose_name = _('OpenDataSoft Web Service') |
46 | 46 | |
47 |
def export_json(self): |
|
48 |
data = super(OpenDataSoft, self).export_json() |
|
49 |
data['queries'] = [query.export_json() for query in self.queries.all()] |
|
50 |
return data |
|
51 | ||
52 |
@classmethod |
|
53 |
def import_json_real(cls, overwrite, instance, data, **kwargs): |
|
54 |
data_queries = data.pop('queries', []) |
|
55 |
instance = super(OpenDataSoft, cls).import_json_real(overwrite, instance, data, **kwargs) |
|
56 |
queries = [] |
|
57 |
if instance and overwrite: |
|
58 |
Query.objects.filter(resource=instance).delete() |
|
59 |
for data_query in data_queries: |
|
60 |
query = Query.import_json(data_query) |
|
61 |
query.resource = instance |
|
62 |
queries.append(query) |
|
63 |
Query.objects.bulk_create(queries) |
|
64 |
return instance |
|
65 | ||
47 | 66 |
@endpoint( |
48 | 67 |
perm='can_access', |
49 | 68 |
description=_('Search'), |
50 | 69 |
parameters={ |
51 | 70 |
'dataset': {'description': _('Dataset')}, |
52 | 71 |
'text_template': {'description': _('Text template')}, |
53 | 72 |
'id': {'description': _('Record identifier')}, |
54 | 73 |
'q': {'description': _('Full text query')}, |
tests/test_opendatasoft.py | ||
---|---|---|
17 | 17 | |
18 | 18 |
import mock |
19 | 19 |
import json |
20 | 20 |
import pytest |
21 | 21 | |
22 | 22 |
import utils |
23 | 23 | |
24 | 24 |
from passerelle.apps.opendatasoft.models import OpenDataSoft, Query |
25 |
from passerelle.utils import import_site |
|
25 | 26 | |
26 | 27 |
from test_manager import login, admin_user |
27 | 28 | |
28 | 29 | |
29 | 30 |
FAKED_CONTENT_Q_SEARCH = json.dumps({ |
30 | 31 |
"nhits": 76, |
31 | 32 |
"parameters": { |
32 | 33 |
"dataset": "referentiel-adresse-test", |
... | ... | |
180 | 181 |
resp.form['name'] = 'my query' |
181 | 182 |
resp.form['slug'] = 'my-query' |
182 | 183 |
resp.form['dataset'] = 'my-dataset' |
183 | 184 |
resp = resp.form.submit() |
184 | 185 |
resp = resp.follow() |
185 | 186 |
assert resp.html.find('div', {'id': 'queries'}).ul.li.a.text == 'my query' |
186 | 187 | |
187 | 188 | |
189 |
def test_export_import(query): |
|
190 |
assert OpenDataSoft.objects.count() == 1 |
|
191 |
assert Query.objects.count() == 1 |
|
192 |
serialization = {'resources': [query.resource.export_json()]} |
|
193 |
OpenDataSoft.objects.all().delete() |
|
194 |
assert OpenDataSoft.objects.count() == 0 |
|
195 |
assert Query.objects.count() == 0 |
|
196 |
import_site(serialization) |
|
197 |
assert OpenDataSoft.objects.count() == 1 |
|
198 |
assert Query.objects.count() == 1 |
|
199 | ||
200 | ||
188 | 201 |
@mock.patch('passerelle.utils.Request.get') |
189 | 202 |
def test_search_empty_contents(mocked_get, app, connector): |
190 | 203 |
endpoint = utils.generic_endpoint_url('opendatasoft', 'search', slug=connector.slug) |
191 | 204 |
assert endpoint == '/opendatasoft/my_connector/search' |
192 | 205 | |
193 | 206 |
# error returned by opendadasoft server |
194 | 207 |
json_response = json.dumps({'error': "The query is invalid : Field 00 doesn't exist"}) |
195 | 208 |
mocked_get.return_value = utils.FakedResponse(content=json_response, status_code=200) |
196 |
- |