workflows: fix support for template in global timeouts (#85687) #1027

Merged
fpeters merged 1 commits from wip/85687-trigger-timeout-template into main 2024-01-15 18:06:05 +01:00
Owner
No description provided.
fpeters force-pushed wip/85687-trigger-timeout-template from 131a4b7366 to 2c76df5ccc 2024-01-15 17:20:22 +01:00 Compare
fpeters reviewed 2024-01-15 17:39:43 +01:00
@ -3991,0 +3993,4 @@
[
# (expression, fast-path)
(2, True),
('2', True),
Author
Owner

La valeur pour l'expiration et si oui ou non ça doit passer par le code optimisé.

On commence par les valeurs simples.

La valeur pour l'expiration et si oui ou non ça doit passer par le code optimisé. On commence par les valeurs simples.
@ -3991,0 +3995,4 @@
(2, True),
('2', True),
('{{ form_option_timeout }}', True),
('{{ form_var_timeout }}', False),
Author
Owner

Ensuite deux cas rencontrés sur le SaaS, l'utilisation d'une variable de workflow (là ça va, on peut calculer une valeur unique), et le cas d'un valeur venant d'un champ (là on va être obligé de tout charger, l'ancien code).

Ensuite deux cas rencontrés sur le SaaS, l'utilisation d'une variable de workflow (là ça va, on peut calculer une valeur unique), et le cas d'un valeur venant d'un champ (là on va être obligé de tout charger, l'ancien code).
@ -3991,0 +3996,4 @@
('2', True),
('{{ form_option_timeout }}', True),
('{{ form_var_timeout }}', False),
('{% firstof form_var_timeout form_option_timeout %}', False),
Author
Owner

Également quelque chose rencontré sur le SaaS, c'est important parce que ça signifie qu'on ne peut pas juste se contenter de faire l'évaluation et d'obtenir une valeur, ça serait le cas ici mais on exécuterait sur la valeur de form_option_timeout systématiquement.

Également quelque chose rencontré sur le SaaS, c'est important parce que ça signifie qu'on ne peut pas juste se contenter de faire l'évaluation et d'obtenir une valeur, ça serait le cas ici mais on exécuterait sur la valeur de form_option_timeout systématiquement.
@ -3991,0 +3998,4 @@
('{{ form_var_timeout }}', False),
('{% firstof form_var_timeout form_option_timeout %}', False),
('{{ form.option.timeout }}', True),
('{{ form.var.timeout }}', False), # not quickly dismissed
Author
Owner

C'est ici pour couvrir le cas où le trigger n'aurait pas été zappé vite fait en voyant form_var dedans.

C'est ici pour couvrir le cas où le trigger n'aurait pas été zappé vite fait en voyant form_var dedans.
@ -1938,6 +1938,13 @@ class WorkflowGlobalActionTimeoutTrigger(WorkflowGlobalActionTrigger):
return form
def get_timeout(self):
Author
Owner

Petite méthode isolée.

Petite méthode isolée.
@ -2042,1 +2037,3 @@
return False
try:
timeout = self.get_timeout()
except ValueError as e:
Author
Owner

C'est le même code qu'avant, il perd juste un niveau d'indentation suite au déplacement du début du code dans la méthode get_timeout.

C'est le même code qu'avant, il perd juste un niveau d'indentation suite au déplacement du début du code dans la méthode get_timeout.
@ -2072,1 +2075,3 @@
(action, trigger) for action, trigger in triggers if trigger.anchor == 'finalized'
(action, trigger)
for action, trigger in triggers
if trigger.anchor == 'finalized' and 'form_var' not in str(trigger.timeout)
Author
Owner

S'il y a form_var dans l'expression du timeout on ignore tout de suite.

S'il y a form_var dans l'expression du timeout on ignore tout de suite.
@ -2076,0 +2085,4 @@
get_publisher().reset_formdata_state()
get_publisher().substitutions.feed(formdef)
try:
formdef_timeouts[f'{formdef.xml_root_node}/{formdef.id}'] = trigger.get_timeout()
Author
Owner

On calcule les expirations par formdef.

On calcule les expirations par formdef.
@ -2076,0 +2091,4 @@
formdef_timeouts[f'{formdef.xml_root_node}/{formdef.id}'] = None
if None in formdef_timeouts.values():
# some invalid timeouts, go back to non-optimized path
triggers.append((action, trigger))
Author
Owner

Si jamais un calcul a foiré, on arrête ici, on passera par le code historique.

Si jamais un calcul a foiré, on arrête ici, on passera par le code historique.
@ -2094,1 +2116,3 @@
if (
if trigger.anchor == 'finalized':
run_on_finalized = True
elif (
Author
Owner

Comme on peut à nouveau avoir des trigger sur "finalized" qui passent ici, on remet le code qui avait été supprimé.

Comme on peut à nouveau avoir des trigger sur "finalized" qui passent ici, on remet le code qui avait été supprimé.
fpeters changed title from WIP: workflows: fix support for template in global timeouts (#85687) to workflows: fix support for template in global timeouts (#85687) 2024-01-15 17:39:51 +01:00
pducroquet approved these changes 2024-01-15 17:42:02 +01:00
pducroquet left a comment
Owner

Parfait, je pensais pas tenter d'optimiser les templates, mais du coup là ça semble pas mal.

Parfait, je pensais pas tenter d'optimiser les templates, mais du coup là ça semble pas mal.
fpeters merged commit 2c76df5ccc into main 2024-01-15 18:06:05 +01:00
fpeters deleted branch wip/85687-trigger-timeout-template 2024-01-15 18:06:05 +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/wcs#1027
No description provided.