Project

General

Profile

Development #70982

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

Added by Nicolas Roche 3 months ago. Updated about 2 months ago.

Status:
Solution déployée
Priority:
Normal
Assignee:
Target version:
-
Start date:
04 November 2022
Due date:
% Done:

0%

Estimated time:
Patch proposed:
Yes
Planning:
No

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

0004-toulouse-maelis-remove-all-redundant-referential-val.patch (3 KB) 0004-toulouse-maelis-remove-all-redundant-referential-val.patch Nicolas Roche, 04 November 2022 06:16 PM
0005-toulouse-maelis-add-limit-parameter-to-referential-e.patch (14 KB) 0005-toulouse-maelis-add-limit-parameter-to-referential-e.patch Nicolas Roche, 04 November 2022 06:16 PM
0003-toulouse-maelis-sort-referential-values-70982.patch (3.81 KB) 0003-toulouse-maelis-sort-referential-values-70982.patch Nicolas Roche, 04 November 2022 06:16 PM
0001-toulouse-maelis-do-not-return-key-if-not-found-into-.patch (4.04 KB) 0001-toulouse-maelis-do-not-return-key-if-not-found-into-.patch Nicolas Roche, 04 November 2022 06:16 PM
0002-toulouse-maelis-add-id-and-q-parameters-on-referenti.patch (12.1 KB) 0002-toulouse-maelis-add-id-and-q-parameters-on-referenti.patch Nicolas Roche, 04 November 2022 06:16 PM
0006-toulouse-maelis-add-search-on-referentials-70982.patch (21.8 KB) 0006-toulouse-maelis-add-search-on-referentials-70982.patch Nicolas Roche, 08 December 2022 05:28 PM
0005-toulouse-maelis-speed-up-tests-70982.patch (65.6 KB) 0005-toulouse-maelis-speed-up-tests-70982.patch Nicolas Roche, 08 December 2022 05:28 PM
0004-toulouse-maelis-move-referentials-into-db-70982.patch (105 KB) 0004-toulouse-maelis-move-referentials-into-db-70982.patch Nicolas Roche, 08 December 2022 05:28 PM
0003-toulouse-maelis-check-WS-payload-first-70982.patch (24.3 KB) 0003-toulouse-maelis-check-WS-payload-first-70982.patch Nicolas Roche, 08 December 2022 05:28 PM
0002-toulouse-maelis-sort-referentials-on-text-and-id-709.patch (11.3 KB) 0002-toulouse-maelis-sort-referentials-on-text-and-id-709.patch Nicolas Roche, 08 December 2022 05:28 PM
0001-toulouse-maelis-update-label-into-first-migration-70.patch (2.28 KB) 0001-toulouse-maelis-update-label-into-first-migration-70.patch Nicolas Roche, 08 December 2022 05:28 PM
0007-toulouse-maelis-update-referentials-on-functests-709.patch (535 KB) 0007-toulouse-maelis-update-referentials-on-functests-709.patch Nicolas Roche, 08 December 2022 05:28 PM

Related issues

Related to Passerelle - Development #71947: toulouse-maelis: nouvelle itération sur les WS concernant la familleFermé01 December 2022

Actions
Related to Passerelle - Bug #72244: toulouse-maelis: prendre en compte le connecteur dans la table des référentielsSolution déployée09 December 2022

Actions

Associated revisions

Revision 6f11cffb (diff)
Added by Nicolas Roche about 2 months ago

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

Revision 07d91247 (diff)
Added by Nicolas Roche about 2 months ago

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

Revision a9e6846b (diff)
Added by Nicolas Roche about 2 months ago

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

Revision ddd5b4b8 (diff)
Added by Nicolas Roche about 2 months ago

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

Revision bc90d63a (diff)
Added by Nicolas Roche about 2 months ago

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

Revision d4f462a1 (diff)
Added by Nicolas Roche about 2 months ago

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

Revision bd758e75 (diff)
Added by Nicolas Roche about 2 months ago

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

History

#1

Updated by Nicolas Roche 3 months ago

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

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.

#7

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.

#9

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.

#11

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

#12

Updated by Nicolas Roche 2 months ago

Compris, je fais ça.

#14

Updated by Nicolas Roche about 2 months ago

  • Related to Development #71947: toulouse-maelis: nouvelle itération sur les WS concernant la famille added
#15

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

Updated by Benjamin Dauvergne about 2 months ago

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

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

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

#19

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

#20

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

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.

#22

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.

#23

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.

#24

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.

#25

Updated by Transition automatique about 2 months ago

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

Also available in: Atom PDF