wcs: resolve card_ids lazily (#74306) #43

Merged
fpeters merged 2 commits from wip/74306-wcs-resoudre-la-liste-des-ids-de into main 2023-02-10 09:13:29 +01:00
Owner

The class LazyValue is a thunk1 like in lazy evaluated language it is
initialized with a function needing no argument and store its result on
first call.

Direct access to the context to get the ids is replaced by calls to new
method WcsCardCell.get_card_ids(context). Original get_card_ids() is
renamed resolve_card_ids() and used with LazyValue to implement the lazy
evaluation of card_ids.

This line was modified as it does not really work :

if·','·in·first_cell.card_ids:

since card_ids can contain templates like

    {{ ...|join:"," }}

which will evaluate to True even if the template returns only one card
(one test was broken because of this, the bug was hidden by eager
evaluation of card_ids previously).

The class LazyValue is a thunk[1] like in lazy evaluated language it is initialized with a function needing no argument and store its result on first call. Direct access to the context to get the ids is replaced by calls to new method WcsCardCell.get_card_ids(context). Original get_card_ids() is renamed resolve_card_ids() and used with LazyValue to implement the lazy evaluation of card_ids. This line was modified as it does not really work : if·','·in·first_cell.card_ids: since card_ids can contain templates like {{ ...|join:"," }} which will evaluate to True even if the template returns only one card (one test was broken because of this, the bug was hidden by eager evaluation of card_ids previously). [1]: https://en.wikipedia.org/wiki/Thunk
lguerin reviewed 2023-02-08 10:28:25 +01:00
@ -1287,7 +1306,8 @@ class WcsCardCell(CardMixin, CellBase):
if first_cell.related_card_path:
# no explicit ids
return []
if ',' in first_cell.card_ids:
Owner

Non, c'était très bien comme ça:
S'il y a une virgule dans le template, alors potentiellement on peut avoir plusieurs ids (ça dépend de la page et des ids trouvés dans l'url), et donc dans ce cas on ne veut pas remonter les relations.

Non, c'était très bien comme ça: S'il y a une virgule dans le template, alors potentiellement on peut avoir plusieurs ids (ça dépend de la page et des ids trouvés dans l'url), et donc dans ce cas on ne veut pas remonter les relations.
Author
Owner

C'est vraiment compliqué et border line à comprendre... Je ne parle même pas des cell.repeat_index entre first_cell et la cellule en cours, faut étudier le code pendant 2h pour comprendre (ça m'a obligé à rajouter un 'or 0' parce qu'en changeant l'ordre d'évaluation on se retrouvait dans un cas sans repeat_index dans le contexte).

Mais donc ok je vais le remettre et modifier un cas de test_card_cell_card_mode_render_identifier_from_related() où effectivement plus aucun appel n'est fait puisque la résolution paresseux et qu'on détecte tout de suite via le test sur la virgule qu'il ne faut pas récupérer les ids.

C'est vraiment compliqué et border line à comprendre... Je ne parle même pas des cell.repeat_index entre first_cell et la cellule en cours, faut étudier le code pendant 2h pour comprendre (ça m'a obligé à rajouter un 'or 0' parce qu'en changeant l'ordre d'évaluation on se retrouvait dans un cas sans repeat_index dans le contexte). Mais donc ok je vais le remettre et modifier un cas de test_card_cell_card_mode_render_identifier_from_related() où effectivement plus aucun appel n'est fait puisque la résolution paresseux et qu'on détecte tout de suite via le test sur la virgule qu'il ne faut pas récupérer les ids.
bdauvergne force-pushed wip/74306-wcs-resoudre-la-liste-des-ids-de from 46ed6fa2aa to 3aaead5504 2023-02-08 10:51:25 +01:00 Compare
bdauvergne force-pushed wip/74306-wcs-resoudre-la-liste-des-ids-de from 3aaead5504 to 1c242898ed 2023-02-08 11:17:17 +01:00 Compare
bdauvergne force-pushed wip/74306-wcs-resoudre-la-liste-des-ids-de from 1c242898ed to 4afe814b2e 2023-02-08 11:26:16 +01:00 Compare
Author
Owner

J'ai ajouté en premier commit le test pour voir le changement de comportement, sans le deuxième commit, le rendu de la cellule texte slugb génère un appel à w.c.s. pour la résolution des ids de sluga.

J'ai ajouté en premier commit le test pour voir le changement de comportement, sans le deuxième commit, le rendu de la cellule texte slugb génère un appel à w.c.s. pour la résolution des ids de sluga.
bdauvergne force-pushed wip/74306-wcs-resoudre-la-liste-des-ids-de from 4afe814b2e to cff7542dce 2023-02-08 15:12:12 +01:00 Compare
lguerin approved these changes 2023-02-08 20:36:02 +01:00
lguerin left a comment
Owner

ok, testé en local avec des cellules fiches tableau, avec un filtre de requête pour les ids, et côté wcs un modèle de fiche avec 10000 fiches (pour approcher du cas soumis par Mik)

ok, testé en local avec des cellules fiches tableau, avec un filtre de requête pour les ids, et côté wcs un modèle de fiche avec 10000 fiches (pour approcher du cas soumis par Mik)
fpeters merged commit b3977ab00b into main 2023-02-10 09:13:29 +01:00
fpeters deleted branch wip/74306-wcs-resoudre-la-liste-des-ids-de 2023-02-10 09:13:29 +01:00
Sign in to join this conversation.
No reviewers
No Label
No Milestone
No Assignees
2 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: entrouvert/combo#43
No description provided.