Development #39387
base adresse: rendre /search/ compatible avec l'autocomplétion wcs
0%
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
Historique
Mis à jour par Valentin Deniaud il y a environ 4 ans
- Fichier 0001-base_adresse-add-addresses-endpoint-39387.patch 0001-base_adresse-add-addresses-endpoint-39387.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
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.
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)'),)
Mis à jour par Valentin Deniaud il y a environ 4 ans
- Fichier 0001-base_adresse-add-addresses-endpoint-39387.patch 0001-base_adresse-add-addresses-endpoint-39387.patch ajouté
Voilà les tests, et remarque prise en compte.
Mis à jour par Valentin Deniaud il y a environ 4 ans
- Fichier 0001-base_adresse-add-addresses-endpoint-39387.patch 0001-base_adresse-add-addresses-endpoint-39387.patch ajouté
Le même en ajoutant latitude et longitude comme attributs du connecteur. Sinon ça ne sera clairement jamais utilisé.
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.
Mis à jour par Valentin Deniaud il y a environ 4 ans
- Fichier 0001-base_adresse-add-addresses-endpoint-39387.patch 0001-base_adresse-add-addresses-endpoint-39387.patch ajouté
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.
Mis à jour par Valentin Deniaud il y a environ 4 ans
Mis à jour par Frédéric Péters il y a environ 4 ans
- Statut changé de Solution proposée à Solution validée
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.
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
base_adresse: add /addresses/ endpoint (#39387)
Compatible with wcs API.