Development #70982
toulouse-maelis: avoir de l'auto-complétion sur les référentiels
0%
Description
Ajouter les paramètres "q" et "id" pour rechercher un item sur les référentiels.
Par exemple pour choisir sa commune (35949 items).
cf https://redmine.sigec.fr/issues/1362#note-5
Maelis aura le référentiel importé du SIG Toulouse de façon ponctuelle (1 fois par trimestre, 1 fois par semestre, ...)
Une fois cette opération réalisée, le référentiel des adresses devient celui de Maelis pour la communication entre Publik et Maelis.
Maelis met à disposition des WS pour exposer le référentiel des voies (avec notion de secteur, bassin, ...) et ces WS seront utilisés dans les démarches du portail Publik via le connecteur.
Files
Related issues
Associated revisions
toulouse-maelis: sort referentials on text and id (#70982)
toulouse-maelis: check WS payload first (#70982)
toulouse-maelis: move referentials into db (#70982)
toulouse-maelis: speed-up tests (#70982)
toulouse-maelis: add search on referentials (#70982)
toulouse-maelis: update referentials on functests (#70982)
History
Updated by Nicolas Roche 3 months ago
- File 0005-toulouse-maelis-add-limit-parameter-to-referential-e.patch 0005-toulouse-maelis-add-limit-parameter-to-referential-e.patch added
- File 0004-toulouse-maelis-remove-all-redundant-referential-val.patch 0004-toulouse-maelis-remove-all-redundant-referential-val.patch added
- File 0003-toulouse-maelis-sort-referential-values-70982.patch 0003-toulouse-maelis-sort-referential-values-70982.patch added
- File 0002-toulouse-maelis-add-id-and-q-parameters-on-referenti.patch 0002-toulouse-maelis-add-id-and-q-parameters-on-referenti.patch added
- File 0001-toulouse-maelis-do-not-return-key-if-not-found-into-.patch 0001-toulouse-maelis-do-not-return-key-if-not-found-into-.patch added
- Status changed from Nouveau to En cours
- Patch proposed changed from No to Yes
0001 factorisation en vue de 0002
0002 ajout des paramètres "id" et "q"
Ici, je constate que sur ma machine le cache ne veut pas avaler 36000 communes, soit 2Mo.
Je cherche pourquoi, mais si quelqu'un a déjà la solution, je prend !
0003 ajout du trie
Parce que les informations importées du SIG ne sont pas triées.
(ce patch ne sera peut-être pas nécessaire si Maelis trie aussi ces données en amont)
https://redmine.sigec.fr/issues/1377?issue_count=162&issue_position=1&next_issue_id=1376#note-5
0004 factorisation en vue de 0005
0005 ajout du paramètre "limit"
Parce que pensais une limite d'affichage nécessaire pour présenter une liste en autocomplétion sur les 36000 communes.
Mais j'ai un gros doute parce que sur les 400 pays, w.c.s présente une liste déroulante complète à l'autocomplétion
et du coup s'en sort sur le pré-remplissage, ce qui n'est pas le cas si j'ajoute le paramètre "limit" aux sources de données.
Updated by Frédéric Péters 2 months ago
Ici, je constate que sur ma machine le cache ne veut pas avaler 36000 communes, soit 2Mo.
Il ne faut pas utiliser le système de cache de django pour ça; tu dois faire comme les autres connecteurs, type base adresse, et utiliser un modèle dans la base de données pour faire ton cache de communes, qui sera rafraichi une fois par jour, et pas de manière aléatoire incontrôlée.
Updated by Nicolas Roche 2 months ago
Il ne faut pas utiliser le système de cache de django pour ça.
Oui, memcache n'accepte pas des valeurs allant au delà du méga.
$ vi ~/envs/publik-env-py3/lib/python3.9/site-packages/memcache.py SERVER_MAX_VALUE_LENGTH = 1024 * 1024
Et surtout la requête est bien trop lente sur les communes.
Pour les communes on va utiliser directement le connecteur BAN instancié à Toulouse dans les formulaires,
puisque que Maélis les importe également depuis le SIG de Toulouse.
Pour les autres référentiels conséquents (pays, départements et rues)
on ne dépasse pas les 300k et la première requête ne prend pas trop de temps.
Updated by Frédéric Péters 2 months ago
Pour les autres référentiels conséquents (pays, départements et rues) on ne dépasse pas les 300k et la première requête ne prend pas trop de temps.
D'accord j'écrivais juste sur les communes mais de manière globale il faut utiliser des modèles dans la base de données pour faire ton cache, et rafraichir ça une fois par jour, plutôt qu'avoir le cache via memcached qui va expirer de manière aléatoire incontrôlée.
Updated by Benjamin Dauvergne 2 months ago
Nico, c'est vraiment important que tu déplaces le stockages des référentiels dans un modèle Referentiel(type:text,identifier:text,text:text,data:json)
, unicité sur (type, identifier)
.
Updated by Nicolas Roche about 2 months ago
- File 0007-toulouse-maelis-update-referentials-on-functests-709.patch 0007-toulouse-maelis-update-referentials-on-functests-709.patch added
- File 0006-toulouse-maelis-add-search-on-referentials-70982.patch 0006-toulouse-maelis-add-search-on-referentials-70982.patch added
- File 0005-toulouse-maelis-speed-up-tests-70982.patch 0005-toulouse-maelis-speed-up-tests-70982.patch added
- File 0004-toulouse-maelis-move-referentials-into-db-70982.patch 0004-toulouse-maelis-move-referentials-into-db-70982.patch added
- File 0003-toulouse-maelis-check-WS-payload-first-70982.patch 0003-toulouse-maelis-check-WS-payload-first-70982.patch added
- File 0002-toulouse-maelis-sort-referentials-on-text-and-id-709.patch 0002-toulouse-maelis-sort-referentials-on-text-and-id-709.patch added
- File 0001-toulouse-maelis-update-label-into-first-migration-70.patch 0001-toulouse-maelis-update-label-into-first-migration-70.patch added
- Status changed from En cours to Solution proposée
0001: oubli dans les migrations
0002 et 0003 pour essayer d'alléger 0004
0004: déplacer les référentiels en base
0005: accélérer les tests (qui sont vraiment lents)
0006: ajouter la recherche sur les référentiels
0007: maj des tests fonctionnels
Updated by Nicolas Roche about 2 months ago
- Related to Development #71947: toulouse-maelis: nouvelle itération sur les WS concernant la famille added
Updated by Benjamin Dauvergne about 2 months ago
- 0001: normalement les chaînes doivent être traduites, pas en français dans le code
- 0002:
- le changement d'ordre pour bis, ter, quater je dirai qu'il ne faut pas trier ici
- 0003: l'utilisation de side_effect est vraiment casse-gueule :/ mais bon je ne vois pas de solution toute faite pour remplacer ça, vu que toutes les requêtes SOAP vont sur la même URL ou presque, il faudrait un truc plus intelligent qu'utiliser juste responses
- 0004: pas certain du code sur last_update, je ferrai plutôt du systématique comme :
last_update = now() ... self.referential.update_or_create( ... defaults={'updated': last_update}) ... self.referential.filter(referential_name=referential_name, last_update__lt=last_update).delete()
- 0005: ok
- 0006: ok
- 0007: ok
Updated by Benjamin Dauvergne about 2 months ago
- Status changed from Solution proposée to Solution validée
Updated by Nicolas Roche about 2 months ago
- Status changed from Solution validée to Résolu (à déployer)
le changement d'ordre pour bis, ter, quater je dirai qu'il ne faut pas trier ici
Je suis d'accord, mais j'ai pris le parti de trier les sur le texte
(pour avoir la bonne présentation sur l'autocomplétion parce que Maélis ne trie pas systématiquement et aussi pour éliminer les doublons sur les catégories socio-professionelles et les pays)
et ça m'embête de ne pas faire rentrer ce référentiel dans le même moule que tous les autres.
l'utilisation de side_effect est vraiment casse-gueule :/
Merci pour #72205, je n'ai pas (encore) trouvé comment tester les trames envoyées.
Après avec les référenciels en base, ça devient quand même un peu plus simple, ouf.
pas certain du code sur last_update
Merci, ta solution est bien plus lisible.
commit bd758e75d0a2b92e0b1abb232255789629c08fba Author: Nicolas ROCHE <nroche@entrouvert.com> Date: Thu Dec 8 12:21:04 2022 +0100 toulouse-maelis: update referentials on functests (#70982) commit d4f462a16c11ccb1bbb1a83e105e082147ad0913 Author: Nicolas ROCHE <nroche@entrouvert.com> Date: Thu Dec 8 17:11:58 2022 +0100 toulouse-maelis: add search on referentials (#70982) commit bc90d63ad2b9509b868565c79c7f8e5f7e1951db Author: Nicolas ROCHE <nroche@entrouvert.com> Date: Wed Dec 7 16:50:50 2022 +0100 toulouse-maelis: speed-up tests (#70982) commit ddd5b4b83be4e0231d870a27b1e0748439987322 Author: Nicolas ROCHE <nroche@entrouvert.com> Date: Thu Dec 8 17:06:58 2022 +0100 toulouse-maelis: move referentials into db (#70982) commit a9e6846bf8b4ac5847e0b1ad8c99264bbaca69f3 Author: Nicolas ROCHE <nroche@entrouvert.com> Date: Wed Dec 7 15:12:52 2022 +0100 toulouse-maelis: check WS payload first (#70982) commit 07d91247c07772be33b420f509689ce6b266e0c1 Author: Nicolas ROCHE <nroche@entrouvert.com> Date: Mon Dec 5 18:01:07 2022 +0100 toulouse-maelis: sort referentials on text and id (#70982) commit 6f11cffb7c417d1e89025a33cf80825dacb03710 Author: Nicolas ROCHE <nroche@entrouvert.com> Date: Fri Dec 2 14:33:51 2022 +0100 toulouse-maelis: update label into first migration (#70982)
Updated by Benjamin Dauvergne about 2 months ago
Nicolas Roche a écrit :
Merci pour #72205, je n'ai pas (encore) trouvé comment tester les trames envoyées.
Qu'est-ce que tu voudrais tester sur tes requêtes SOAP ? Normalement zeep refusera de l'envoyer si il n'arrive pas à la sérialiser (des fois il est permissif), dans le code de #72205 j'avais ajouté la validation contre le schéma des requêtes, je peux le remettre (je me suis dit que c'était superflu mais peut-être que zeep est plus permissif à la sérialisation qu'à la désérialisation).
Updated by Nicolas Roche about 2 months ago
Qu'est-ce que tu voudrais tester sur tes requêtes SOAP ?
Les contenu envoyés : par exemple sur le endpoint update-child je dois renvoyer la liste des personnes autorisées sinon Maélis la vide.
Autre exemples avec la gestion des personnes où il y a également de la logique métier d'embarquée dans les endpoints.
(ce sont les fichiers ~/src/passerelle/tests/data/toulouse_maelis/Q_*)
Updated by Nicolas Roche about 2 months ago
- Related to Bug #72244: toulouse-maelis: prendre en compte le connecteur dans la table des référentiels added
Updated by Benjamin Dauvergne about 2 months ago
Nicolas Roche a écrit :
Qu'est-ce que tu voudrais tester sur tes requêtes SOAP ?
Les contenu envoyés : par exemple sur le endpoint update-child je dois renvoyer la liste des personnes autorisées sinon Maélis la vide.
Tu peux ajouter des matcher pour valider ce que tu veux sur les requêtes (si tu mets ton matcher après les autres, tu peux lever une erreur assertion dedans, elle ne sera levé que si les matchers précédents sont passés).
Autre exemples avec la gestion des personnes où il y a également de la logique métier d'embarquée dans les endpoints.
(ce sont les fichiers ~/src/passerelle/tests/data/toulouse_maelis/Q_*)
Pas assez explicite pour que je comprenne.
Updated by Nicolas Roche about 2 months ago
Tu peux ajouter des matcher pour valider ce que tu veux sur les requêtes (si tu mets ton matcher après les autres, tu peux lever une erreur assertion dedans, elle ne sera levé que si les matchers précédents sont passés).
oui ça a l'air d'être ça, il me reste à trouver comment comparer le corps de la requête :
https://pypi.org/project/responses/#matching-request-body-contents
When adding responses for endpoints that are sent request data you can add matchers to ensure your code is sending the right parameters
Pas assez explicite pour que je comprenne.
A mon avis c'est parce qu'il n'est pas d'usage (à EO) de tester les contenus envoyés.
Je fais peut-être du zèle.
Updated by Benjamin Dauvergne about 2 months ago
Nicolas Roche a écrit :
Pas assez explicite pour que je comprenne.
A mon avis c'est parce qu'il n'est pas d'usage (à EO) de tester les contenus envoyés.
Je fais peut-être du zèle.
Tu te trompes
tests/test_arcgis.py: requests_get.call_args[0][0] == 'https://arcgis.example.net/services/fold/serv/MapServer/1/query' tests/test_arcgis.py: args = requests_get.call_args[1]['params']
mais tester des requêtes SOAP via une bête comparaison de chaîne ça ne sera pas super stable.
Updated by Nicolas Roche about 2 months ago
Et donc avec #72205 on pourrait à présent valider les contenus envoyés depuis un dictionnaire, ça me semble parfait.
J'avais tendance à figer toute le corps de la requête envoyé dans le test, histoire de garantir qu'il n'y a pas de régressions de la part du connecteur.
(et aussi par habitude, parce que les éditeur en SOAP nous demandent les trames envoyées/reçues)
C'est là que je fait du zèle, parce que c'est pas du tout lisible comme méthode et pas évident à mettre à jour.
Updated by Transition automatique about 2 months ago
- Status changed from Résolu (à déployer) to Solution déployée
toulouse-maelis: update label into first migration (#70982)