Projet

Général

Profil

Development #70982

toulouse-maelis: avoir de l'auto-complétion sur les référentiels

Ajouté par Nicolas Roche (absent jusqu'au 3 avril) il y a plus d'un an. Mis à jour il y a plus d'un an.

Statut:
Fermé
Priorité:
Normal
Version cible:
-
Début:
04 novembre 2022
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

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

0004-toulouse-maelis-remove-all-redundant-referential-val.patch (3 ko) 0004-toulouse-maelis-remove-all-redundant-referential-val.patch Nicolas Roche (absent jusqu'au 3 avril), 04 novembre 2022 18:16
0005-toulouse-maelis-add-limit-parameter-to-referential-e.patch (14 ko) 0005-toulouse-maelis-add-limit-parameter-to-referential-e.patch Nicolas Roche (absent jusqu'au 3 avril), 04 novembre 2022 18:16
0003-toulouse-maelis-sort-referential-values-70982.patch (3,81 ko) 0003-toulouse-maelis-sort-referential-values-70982.patch Nicolas Roche (absent jusqu'au 3 avril), 04 novembre 2022 18:16
0001-toulouse-maelis-do-not-return-key-if-not-found-into-.patch (4,04 ko) 0001-toulouse-maelis-do-not-return-key-if-not-found-into-.patch Nicolas Roche (absent jusqu'au 3 avril), 04 novembre 2022 18:16
0002-toulouse-maelis-add-id-and-q-parameters-on-referenti.patch (12,1 ko) 0002-toulouse-maelis-add-id-and-q-parameters-on-referenti.patch Nicolas Roche (absent jusqu'au 3 avril), 04 novembre 2022 18:16
0006-toulouse-maelis-add-search-on-referentials-70982.patch (21,8 ko) 0006-toulouse-maelis-add-search-on-referentials-70982.patch Nicolas Roche (absent jusqu'au 3 avril), 08 décembre 2022 17:28
0005-toulouse-maelis-speed-up-tests-70982.patch (65,6 ko) 0005-toulouse-maelis-speed-up-tests-70982.patch Nicolas Roche (absent jusqu'au 3 avril), 08 décembre 2022 17:28
0004-toulouse-maelis-move-referentials-into-db-70982.patch (105 ko) 0004-toulouse-maelis-move-referentials-into-db-70982.patch Nicolas Roche (absent jusqu'au 3 avril), 08 décembre 2022 17:28
0003-toulouse-maelis-check-WS-payload-first-70982.patch (24,3 ko) 0003-toulouse-maelis-check-WS-payload-first-70982.patch Nicolas Roche (absent jusqu'au 3 avril), 08 décembre 2022 17:28
0002-toulouse-maelis-sort-referentials-on-text-and-id-709.patch (11,3 ko) 0002-toulouse-maelis-sort-referentials-on-text-and-id-709.patch Nicolas Roche (absent jusqu'au 3 avril), 08 décembre 2022 17:28
0001-toulouse-maelis-update-label-into-first-migration-70.patch (2,28 ko) 0001-toulouse-maelis-update-label-into-first-migration-70.patch Nicolas Roche (absent jusqu'au 3 avril), 08 décembre 2022 17:28
0007-toulouse-maelis-update-referentials-on-functests-709.patch (535 ko) 0007-toulouse-maelis-update-referentials-on-functests-709.patch Nicolas Roche (absent jusqu'au 3 avril), 08 décembre 2022 17:28

Demandes liées

Lié à Passerelle - Development #71947: toulouse-maelis: nouvelle itération sur les WS concernant la familleFermé01 décembre 2022

Actions
Lié à Passerelle - Bug #72244: toulouse-maelis: prendre en compte le connecteur dans la table des référentielsFermé09 décembre 2022

Actions

Révisions associées

Révision 6f11cffb (diff)
Ajouté par Nicolas Roche (absent jusqu'au 3 avril) il y a plus d'un an

toulouse-maelis: update label into first migration (#70982)

Révision 07d91247 (diff)
Ajouté par Nicolas Roche (absent jusqu'au 3 avril) il y a plus d'un an

toulouse-maelis: sort referentials on text and id (#70982)

Révision a9e6846b (diff)
Ajouté par Nicolas Roche (absent jusqu'au 3 avril) il y a plus d'un an

toulouse-maelis: check WS payload first (#70982)

Révision ddd5b4b8 (diff)
Ajouté par Nicolas Roche (absent jusqu'au 3 avril) il y a plus d'un an

toulouse-maelis: move referentials into db (#70982)

Révision bc90d63a (diff)
Ajouté par Nicolas Roche (absent jusqu'au 3 avril) il y a plus d'un an

toulouse-maelis: speed-up tests (#70982)

Révision d4f462a1 (diff)
Ajouté par Nicolas Roche (absent jusqu'au 3 avril) il y a plus d'un an

toulouse-maelis: add search on referentials (#70982)

Révision bd758e75 (diff)
Ajouté par Nicolas Roche (absent jusqu'au 3 avril) il y a plus d'un an

toulouse-maelis: update referentials on functests (#70982)

Historique

#1

Mis à jour par Nicolas Roche (absent jusqu'au 3 avril) il y a plus d'un an

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.

#6

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.

#7

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.

#9

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.

#11

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).

#12

Mis à jour par Nicolas Roche (absent jusqu'au 3 avril) il y a plus d'un an

Compris, je fais ça.

#14

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é
#15

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
#16

Mis à jour par Benjamin Dauvergne il y a plus d'un an

  • Statut changé de Solution proposée à Solution validée
#17

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)
#18

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).

#19

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_*)

#20

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é
#21

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.

#22

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.

#23

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.

#24

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.

#25

Mis à jour par Transition automatique il y a plus d'un an

  • Statut changé de Résolu (à déployer) à Solution déployée
#26

Mis à jour par Transition automatique il y a environ un an

Automatic expiration

Formats disponibles : Atom PDF