Projet

Général

Profil

0001-opendatasoft-quote-full-text-search-parameter-43235.patch

Nicolas Roche, 13 mai 2022 11:42

Télécharger (3,16 ko)

Voir les différences:

Subject: [PATCH] opendatasoft: quote full text search parameter (#43235)

 passerelle/apps/opendatasoft/models.py | 2 +-
 tests/test_opendatasoft.py             | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)
passerelle/apps/opendatasoft/models.py
72 72
        scheme, netloc, path, params, query, fragment = urlparse.urlparse(self.service_url)
73 73
        path = urlparse.urljoin(path, 'api/records/1.0/search/')
74 74
        url = urlparse.urlunparse((scheme, netloc, path, params, query, fragment))
75 75

  
76 76
        params = {'dataset': dataset}
77 77
        if id is not None:
78 78
            params['q'] = 'recordid:%s' % id
79 79
        elif q is not None:
80
            params['q'] = q
80
            params['q'] = '"%s"' % q
81 81
        elif sort:
82 82
            params['sort'] = sort
83 83
        if self.api_key:
84 84
            params['apikey'] = self.api_key
85 85
        if limit:
86 86
            params['rows'] = limit
87 87
        params.update(urlparse.parse_qs(filter_expression))
88 88

  
tests/test_opendatasoft.py
239 239
        'q': "rue de l'aubepine",
240 240
    }
241 241
    mocked_get.return_value = tests.utils.FakedResponse(content=FAKED_CONTENT_Q_SEARCH, status_code=200)
242 242
    resp = app.get(endpoint, params=params, status=200)
243 243
    assert mocked_get.call_args[1]['params'] == {
244 244
        'apikey': 'my_secret',
245 245
        'dataset': 'referentiel-adresse-test',
246 246
        'rows': '3',
247
        'q': "rue de l'aubepine",
247
        'q': '"rue de l\'aubepine"',
248 248
    }
249 249
    assert not resp.json['err']
250 250
    assert len(resp.json['data']) == 3
251 251
    # check order is kept
252 252
    assert [x['id'] for x in resp.json['data']] == [
253 253
        'e00cf6161e52a4c8fe510b2b74d4952036cb3473',
254 254
        '7cafcd5c692773e8b863587b2d38d6be82e023d8',
255 255
        '0984a5e1745701f71c91af73ce764e1f7132e0ff',
......
327 327
    mocked_get.return_value = tests.utils.FakedResponse(content=FAKED_CONTENT_Q_SEARCH, status_code=200)
328 328
    resp = app.get(endpoint, params=params, status=200)
329 329
    assert mocked_get.call_args[1]['params'] == {
330 330
        'apikey': 'my_secret',
331 331
        'dataset': 'referentiel-adresse-test',
332 332
        'refine.source': ['Ville et Eurométropole de Strasbourg'],
333 333
        'exclude.numero': ['42', '43'],
334 334
        'rows': 3,
335
        'q': "rue de l'aubepine",
335
        'q': '"rue de l\'aubepine"',
336 336
    }
337 337
    assert not resp.json['err']
338 338
    assert len(resp.json['data']) == 3
339 339
    # check order is kept
340 340
    assert [x['id'] for x in resp.json['data']] == [
341 341
        'e00cf6161e52a4c8fe510b2b74d4952036cb3473',
342 342
        '7cafcd5c692773e8b863587b2d38d6be82e023d8',
343 343
        '0984a5e1745701f71c91af73ce764e1f7132e0ff',
344
-