Projet

Général

Profil

Bug #54858

évaluation des expirations, '<class 'OverflowError'>', value = 'cannot convert float infinity to integer'

Ajouté par Frédéric Péters il y a presque 3 ans. Mis à jour il y a presque 3 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
14 juin 2021
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Exception:
  type = '<class 'OverflowError'>', value = 'cannot convert float infinity to integer'

Stack trace (most recent call first):
  File "/usr/lib/python3/dist-packages/wcs/wf/jump.py", line 343, in _apply_timeouts
   341                     LessOrEqual(
   342                         'last_update_time',
>  343                         (datetime.datetime.now() - datetime.timedelta(seconds=delay)).timetuple(),
   344                     ),
   345                 ]

  locals:
     CardDef = <class 'wcs.carddef.CardDef'>
     FormDef = <class 'wcs.formdef.FormDef'>
     criterias = [<Equal (attribute: 'status', value: 'wf-15')>, <LessOrEqual (attribute: 'last_update_time', value:
time.struct_time(tm_year=2021, tm_mon=6, tm_mday=14, tm_hour=20, tm_min=42, tm_sec=6, tm_wday=0, tm_yday=165, tm_isdst=-1))>]
     delay = inf

Fichiers

Révisions associées

Révision 39d7b83b (diff)
Ajouté par Frédéric Péters il y a presque 3 ans

workflows: don't mark status as having a timeout if it's not valid (#54858)

Historique

#1

Mis à jour par Frédéric Péters il y a presque 3 ans

plus bas dans les variables de la trace on peut voir :

'105': {'wf-2': [<JumpWorkflowStatusItem 5>], 'wf-3': [<JumpWorkflowStatusItem 7>], 'wf-8':
[<JumpWorkflowStatusItem 1>], 'wf-15': [<JumpWorkflowStatusItem 2>], 'wf-22': [], ...

wf-22 et liste vide, ce qui fait que le délai reste à inf :

                delay = math.inf
                for jump_action in wfs_status[str(formdef.workflow_id)][status_id]:
                    if Template.is_template_string(jump_action.timeout):
                        delay = 0
                        break
                    delay = min(delay, int(jump_action.timeout))

mais wfs_status = workflows_with_timeout() devrait retourner uniquement des statuts avec au moins une expiration.

Ce qui se passe ici c'est que l'action de saut avec expiration existe mais avec comme destination un statut qui n'existe pas, et dans cette situation on se trouve avec la liste vide :

                    if workflow_id not in wfs_status:
                        wfs_status[workflow_id] = {}
                    if status_str_id not in wfs_status[workflow_id]:
                        wfs_status[workflow_id][status_str_id] = []
                    if not item.get_target_status():
                        # this will catch status being a removed status
                        continue
                    wfs_status[workflow_id][status_str_id].append(item)
#2

Mis à jour par Thomas Noël il y a presque 3 ans

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

Good catch.

#3

Mis à jour par Frédéric Péters il y a presque 3 ans

  • Statut changé de Solution validée à Résolu (à déployer)
commit 39d7b83bd634a8455917ece6d467897b4ac080e2
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Mon Jun 14 21:14:32 2021 +0200

    workflows: don't mark status as having a timeout if it's not valid (#54858)
#4

Mis à jour par Frédéric Péters il y a presque 3 ans

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

Formats disponibles : Atom PDF