workflows: fix support for template in global timeouts (#85687) #1027
No reviewers
Labels
No Label
No Milestone
No Assignees
2 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: entrouvert/wcs#1027
Loading…
Reference in New Issue
No description provided.
Delete Branch "wip/85687-trigger-timeout-template"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
131a4b7366
to2c76df5ccc
@ -3991,0 +3993,4 @@
[
# (expression, fast-path)
(2, True),
('2', True),
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),
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),
É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
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):
Petite méthode isolée.
@ -2042,1 +2037,3 @@
return False
try:
timeout = self.get_timeout()
except ValueError as e:
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)
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()
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))
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 (
Comme on peut à nouveau avoir des trigger sur "finalized" qui passent ici, on remet le code qui avait été supprimé.
WIP: workflows: fix support for template in global timeouts (#85687)to workflows: fix support for template in global timeouts (#85687)Parfait, je pensais pas tenter d'optimiser les templates, mais du coup là ça semble pas mal.