Project

General

Profile

Développement #39387

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

Added by Valentin Deniaud almost 5 years ago. Updated almost 5 years ago.

Status:
Fermé
Priority:
Normal
Target version:
-
Start date:
29 January 2020
Due date:
% Done:

0%

Estimated time:
Patch proposed:
Yes
Planning:
No

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

Revision 5d4722f9 (diff)
Added by Valentin Deniaud almost 5 years ago

base_adresse: add /addresses/ endpoint (#39387)

Compatible with wcs API.

History

#1

Updated by Valentin Deniaud almost 5 years ago

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

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)'),)
#4

Updated by Valentin Deniaud almost 5 years ago

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

#5

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.
#6

Updated by Valentin Deniaud almost 5 years ago

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

Updated by Frédéric Péters almost 5 years ago

  • Status changed from Solution proposée to Solution validée
#9

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.
#10

Updated by Frédéric Péters almost 5 years ago

  • Status changed from Résolu (à déployer) to Solution déployée

Also available in: Atom PDF