Développement #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.
Files
Associated revisions
History
Updated by Valentin Deniaud almost 5 years ago
- File 0001-base_adresse-add-addresses-endpoint-39387.patch 0001-base_adresse-add-addresses-endpoint-39387.patch added
- Status changed from Nouveau to Solution proposée
- Patch proposed changed from No to Yes
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.
Updated by Frédéric Péters almost 5 years ago
/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)'),)
Updated by Valentin Deniaud almost 5 years ago
- File 0001-base_adresse-add-addresses-endpoint-39387.patch 0001-base_adresse-add-addresses-endpoint-39387.patch added
Voilà les tests, et remarque prise en compte.
Updated by Valentin Deniaud almost 5 years ago
- File 0001-base_adresse-add-addresses-endpoint-39387.patch 0001-base_adresse-add-addresses-endpoint-39387.patch added
Le même en ajoutant latitude et longitude comme attributs du connecteur. Sinon ça ne sera clairement jamais utilisé.
Updated by Frédéric Péters almost 5 years ago
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.
Updated by Valentin Deniaud almost 5 years ago
- File 0001-base_adresse-add-addresses-endpoint-39387.patch 0001-base_adresse-add-addresses-endpoint-39387.patch added
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.
Updated by Frédéric Péters almost 5 years ago
- Status changed from Solution proposée to Solution validée
Updated by Valentin Deniaud almost 5 years ago
- Status changed from Solution validée to 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.
Updated by Frédéric Péters almost 5 years ago
- Status changed from Résolu (à déployer) to Solution déployée
base_adresse: add /addresses/ endpoint (#39387)
Compatible with wcs API.