Projet

Général

Profil

Development #39387

base adresse: rendre /search/ compatible avec l'autocomplétion wcs

Ajouté par Valentin Deniaud il y a environ 4 ans. Mis à jour il y a environ 4 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
29 janvier 2020
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

On continue à se baser sur l'API adresse, une partie du travail consiste à contourner une limitation de l'API qui ne permet pas de recherche par id. Pour cela on va mettre en place un système de cache en db.
Il faut aussi permettre d'indiquer une préférence géographique sous forme de latitude/longitude.


Fichiers

Révisions associées

Révision 5d4722f9 (diff)
Ajouté par Valentin Deniaud il y a environ 4 ans

base_adresse: add /addresses/ endpoint (#39387)

Compatible with wcs API.

Historique

#1

Mis à jour par Valentin Deniaud il y a environ 4 ans

Patch pour info, je me mets à l'écriture des tests.

Le titre du ticket est incorrect parce que je me suis aperçu qu'on ne pouvait pas modifier /search/ sans casser l'existant, puisque qu'il renvoie results_list et que wcs veut {'data': results_list}. J'ajoute donc /addresses/ et je marque /search/ comme déprécié.

Aussi, après un rapide tour des sites qui proposent de l'autocomplétion d'adresse, le consensus manifeste est de 5 résultats affichés, ce qui nous arrange bien vu qu'on enregistre en db tout ce qu'on affiche.

#2

Mis à jour par Frédéric Péters il y a environ 4 ans

/search/ est une interface compatible avec l'API de nominatim, ce n'est pas à déprécier, plutôt la marquer pour ce qu'elle est,

-    @endpoint(pattern='(?P<q>.+)?$', description=_('Deprecated, use /addresses/'),)
+    @endpoint(pattern='(?P<q>.+)?$', description=_('Geocoding (Nominatim API)'),)
#3

Mis à jour par Valentin Deniaud il y a environ 4 ans

Voilà les tests, et remarque prise en compte.

#4

Mis à jour par Valentin Deniaud il y a environ 4 ans

Le même en ajoutant latitude et longitude comme attributs du connecteur. Sinon ça ne sera clairement jamais utilisé.

#5

Mis à jour par Frédéric Péters il y a environ 4 ans

J'ai testé en local, en utilisant les valeurs d'exemple, .../addresses?q=169%20rue%20du%20chateau,%20paris&zipcode=75014, ça m'a affiché de bons résultats (rue du chateau & allée du chateau ouvrier) puis ça n'a pas plus fonctionné,

  File "/home/fred/src/eo/passerelle/passerelle/apps/base_adresse/models.py", line 137, in addresses
    AddressCacheModel.objects.update_or_create(api_id=data['id'], data=data)
...
  File "/home/fred/src/eo/venv3/lib/python3.7/site-packages/Django-1.11.17-py3.7.egg/django/utils/six.py", line 685, in reraise
    raise value.with_traceback(tb)
  File "/home/fred/src/eo/venv3/lib/python3.7/site-packages/Django-1.11.17-py3.7.egg/django/db/backends/utils.py", line 64, in execute
    return self.cursor.execute(sql, params)
django.db.utils.IntegrityError: duplicate key value violates unique constraint "base_adresse_addresscachemodel_api_id_key" 
DETAIL:  Key (api_id)=(75114_1912_00169) already exists.
#6

Mis à jour par Valentin Deniaud il y a environ 4 ans

Je voulais probablement faire un defaults={'data': data}, le but principal de la ligne étant de toute façon de poser un nouveau timestamp. Mais ce qu'il se passe ici est quand même étonnant, les données de la base adresse correspondant à une adresse sur Paris ont changé d'une heure à l'autre (sûrement de pas grand chose, mais quand même).

C'est l'occasion de mieux réfléchir à ce bout de code qui aurait dû ne pas être important. Il faut éviter le cas où une info affichée à l'usager lors de l'autocomplétion changerait au moment de l'enregistrement de la demande. Je fais donc au plus simple, mise à jour explicite du timestamp et exit les changements de dernière minute de la base adresse, qu'on récupérera au prochain rechargement du cache de l'adresse. Et un test reproduisant le bug, quand même.

#8

Mis à jour par Frédéric Péters il y a environ 4 ans

  • Statut changé de Solution proposée à Solution validée
#9

Mis à jour par Valentin Deniaud il y a environ 4 ans

  • Statut changé de Solution validée à Résolu (à déployer)
commit 5d4722f9cc55fe9e98d1bc5e49955eee24c97de4
Author: Valentin Deniaud <vdeniaud@entrouvert.com>
Date:   Thu Jan 30 10:26:30 2020 +0100

    base_adresse: add /addresses/ endpoint (#39387)

    Compatible with wcs API.
#10

Mis à jour par Frédéric Péters il y a environ 4 ans

  • Statut changé de Résolu (à déployer) à Solution déployée

Formats disponibles : Atom PDF