Projet

Général

Profil

0001-opendatasoft-export-and-import-queries-43443.patch

Nicolas Roche, 31 mai 2020 14:21

Télécharger (3,64 ko)

Voir les différences:

Subject: [PATCH] opendatasoft: export and import queries (#43443)

 passerelle/apps/opendatasoft/models.py | 19 +++++++++++++++++++
 tests/test_opendatasoft.py             | 13 +++++++++++++
 2 files changed, 32 insertions(+)
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
-