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.
Fichiers
Demandes liées
Révisions associées
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)
Historique
Mis à jour par Nicolas Roche (absent jusqu'au 3 avril) il y a plus d'un an
- Fichier 0005-toulouse-maelis-add-limit-parameter-to-referential-e.patch 0005-toulouse-maelis-add-limit-parameter-to-referential-e.patch ajouté
- Fichier 0004-toulouse-maelis-remove-all-redundant-referential-val.patch 0004-toulouse-maelis-remove-all-redundant-referential-val.patch ajouté
- Fichier 0003-toulouse-maelis-sort-referential-values-70982.patch 0003-toulouse-maelis-sort-referential-values-70982.patch ajouté
- Fichier 0002-toulouse-maelis-add-id-and-q-parameters-on-referenti.patch 0002-toulouse-maelis-add-id-and-q-parameters-on-referenti.patch ajouté
- Fichier 0001-toulouse-maelis-do-not-return-key-if-not-found-into-.patch 0001-toulouse-maelis-do-not-return-key-if-not-found-into-.patch ajouté
- Statut changé de Nouveau à En cours
- Patch proposed changé de Non à Oui
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.
Mis à jour par Frédéric Péters il y a plus d'un an
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.
Mis à jour par Nicolas Roche (absent jusqu'au 3 avril) il y a plus d'un an
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.
Mis à jour par Frédéric Péters il y a plus d'un an
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.
Mis à jour par Benjamin Dauvergne il y a plus d'un an
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)
.
Mis à jour par Nicolas Roche (absent jusqu'au 3 avril) il y a plus d'un an
- Fichier 0007-toulouse-maelis-update-referentials-on-functests-709.patch 0007-toulouse-maelis-update-referentials-on-functests-709.patch ajouté
- Fichier 0006-toulouse-maelis-add-search-on-referentials-70982.patch 0006-toulouse-maelis-add-search-on-referentials-70982.patch ajouté
- Fichier 0005-toulouse-maelis-speed-up-tests-70982.patch 0005-toulouse-maelis-speed-up-tests-70982.patch ajouté
- Fichier 0004-toulouse-maelis-move-referentials-into-db-70982.patch 0004-toulouse-maelis-move-referentials-into-db-70982.patch ajouté
- Fichier 0003-toulouse-maelis-check-WS-payload-first-70982.patch 0003-toulouse-maelis-check-WS-payload-first-70982.patch ajouté
- Fichier 0002-toulouse-maelis-sort-referentials-on-text-and-id-709.patch 0002-toulouse-maelis-sort-referentials-on-text-and-id-709.patch ajouté
- Fichier 0001-toulouse-maelis-update-label-into-first-migration-70.patch 0001-toulouse-maelis-update-label-into-first-migration-70.patch ajouté
- Statut changé de En cours à 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
Mis à jour par Nicolas Roche (absent jusqu'au 3 avril) il y a plus d'un an
- Lié à Development #71947: toulouse-maelis: nouvelle itération sur les WS concernant la famille ajouté
Mis à jour par Benjamin Dauvergne il y a plus d'un an
- 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
Mis à jour par Benjamin Dauvergne il y a plus d'un an
- Statut changé de Solution proposée à Solution validée
Mis à jour par Nicolas Roche (absent jusqu'au 3 avril) il y a plus d'un an
- Statut changé de Solution validée à 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)
Mis à jour par Benjamin Dauvergne il y a plus d'un an
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).
Mis à jour par Nicolas Roche (absent jusqu'au 3 avril) il y a plus d'un an
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_*)
Mis à jour par Nicolas Roche (absent jusqu'au 3 avril) il y a plus d'un an
- Lié à Bug #72244: toulouse-maelis: prendre en compte le connecteur dans la table des référentiels ajouté
Mis à jour par Benjamin Dauvergne il y a plus d'un an
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.
Mis à jour par Nicolas Roche (absent jusqu'au 3 avril) il y a plus d'un an
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.
Mis à jour par Benjamin Dauvergne il y a plus d'un an
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.
Mis à jour par Nicolas Roche (absent jusqu'au 3 avril) il y a plus d'un an
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.
Mis à jour par Transition automatique il y a plus d'un an
- Statut changé de Résolu (à déployer) à Solution déployée
toulouse-maelis: update label into first migration (#70982)