Project

General

Profile

Bug #39096

Bug évaluation sur condition python

Added by Marie Kuntz over 1 year ago. Updated 8 months ago.

Status:
Solution proposée
Priority:
Normal
Target version:
-
Start date:
Due date:
% Done:

0%

Estimated time:
Patch proposed:
Yes
Planning:
No

Description

Ticket d'origine :

J'ai l'impression d'avoir trouvé un bug dans l'évaluation d'une condition python.

Le pb : la condition pyhton n'affiche le bouton de saut que si form_var_nb_complement est égal à 0. Dans le premier statut, j'ai mis "0" en valeur de cette variable, ce que l'inspecteur me confirme.

La condition :

> int( form_var_nb_complement ) == 0
> 

L'erreur renvoyée :

TypeError: int() argument must be a string or a number, not 'NoneType'

l'inspecteur me confirme que form_var_nb_complement contient toujours "0" et le test d'expression de l'inspecteur me renvoie bien True sur exactement la même condition "int(form_var_nb_complement) == 0"

Nouveau wf : https://demarches-cnil.test.entrouvert.org/backoffice/workflows/24/
Formulaire pour tester : https://demarches-cnil.test.entrouvert.org/backoffice/forms/22/


Files

History

#2

Updated by Marie Kuntz over 1 year ago

  • Subject changed from Bug évaluation condition python ? to Bug évaluation sur condition python

Bug reproduit :
dans https://demarches-cnil.test.entrouvert.org/backoffice/management/mku-formulaire-pour-tester-wf/3/inspect
form_var_nb_complement vaut bien 0
Quand la même condition (j'ai copié-collé) est posée sur un saut automatique (par ex. https://demarches-cnil.test.entrouvert.org/backoffice/workflows/24/status/new/items/5/) elle fonctionne sans provoquer d'erreur.
Sur le saut manuel :

TypeError: int() argument must be a string or a number, not 'NoneType'

https://demarches-cnil.test.entrouvert.org/backoffice/workflows/24/logged-errors/20200120-101740-22-24-new-1-erreur-a-levaluation-de-la-condition-TypeError-int-argument-must-be-a-string-or-a-number-not-nonetype-/

#3

Updated by Marie Kuntz over 1 year ago

  • Tracker changed from Project management to Development
  • Project changed from CNIL to w.c.s.
  • Assignee deleted (Marie Kuntz)
  • Start date deleted (17 Jan 2020)
#4

Updated by Marie Kuntz over 1 year ago

  • Tracker changed from Development to Bug
#5

Updated by Frédéric Péters over 1 year ago

Tu peux reproduire ça sur une instance où il y aurait juste à cliquer sur un bouton pour constater le soucis ?

#6

Updated by Marie Kuntz over 1 year ago

Qu'est-ce qui ne convient pas avec cette instance ? (elle est chez nous)

#8

Updated by Marie Kuntz over 1 year ago

Je t'ai ajouté les rôles "agent SRP" (pour voir le bouton "demander des commentaires") et "debug Marie" (pour avoir les boutons de debug). J'ai remis la démarche au statut "A traiter"

#9

Updated by Benjamin Dauvergne over 1 year ago

Avec le rôle "Agent SRP" je ne reproduis pas le bug en cliquant sur "Demande complément".

#11

Updated by Benjamin Dauvergne over 1 year ago

Marie Kuntz a écrit :

Le bug est visible ici :
https://demarches-cnil.test.entrouvert.org/backoffice/workflows/24/logged-errors/20200127-143011-22-24-new-1-erreur-a-levaluation-de-la-condition-TypeError-int-argument-must-be-a-string-a-bytes-like-object-or-a-number-not-nonetype-/
et non sur la demande traitée

Hmm ok je m'attendais à une trace à l'écran, le bug est bien là. Tu penses que tu pourrais simplifier le workflow un peu plus ?

#13

Updated by Frédéric Péters 12 months ago

Enfin ramené en local pour regarder et ce qui se passe est très simple, c'est lors de l'affichage en barre latérale des autres demandes en cours de l'usager qu'il y a évaluation des droits d'actions pour déterminer s'il faut verrouiller ou pas les demandes, et cette évaluation se fait sans taper dans le contexte la demande en question.

#14

Updated by Benjamin Dauvergne 10 months ago

Dans FormData.get_action_roles() je vois déjà un :

            with get_publisher().substitutions.temporary_feed(self):
                if not item.check_condition(self):
                    continue

comment se fait-il qu'il en faille un de plus ?

#15

Updated by Frédéric Péters 10 months ago

Je ne sais pas pourquoi tu parles de get_action_roles(), cette méthode n'est pas appelée dans cette vue, cette vue concerne la barre latérale, où il y a évaluation des différentes demandes exposées, pour voir si elles doivent être "verrouillée" ou pas.

#16

Updated by Benjamin Dauvergne 10 months ago

Ben j'ai cherché ce qui pouvait demander l'évaluation d'une expression et donc un temporary_feed à cet endroit :

                with get_publisher().substitutions.temporary_feed(user_formdata):
                    if user_roles.intersection(user_formdata.actions_roles): <- ici accès à FormData.actions_roles
                        session.mark_visited_object(user_formdata)

et j'ai trouvé ça dans class FormData:
    def get_actions_roles(self):
        if self.is_draft():
            return []

        wf_status = self.get_status()
        if not wf_status:
            return []

        from wcs.workflows import get_role_translation
        status_action_roles = set()
        for item in wf_status.items or []:
            if not hasattr(item, 'by') or not item.by:
                continue
            with get_publisher().substitutions.temporary_feed(self):
                if not item.check_condition(self): <-- ICI
                    continue
            for role in item.by:
                if role == '_submitter':
                    status_action_roles.add(role)
                else:
                    real_role = get_role_translation(self, role)
                    if real_role:
                        status_action_roles.add(real_role)
        return status_action_roles

    actions_roles = property(get_actions_roles)

j'ai pensé qu'il y avait un rapport. Mais sinon je ne vois pas à quoi sert le temporary_feed(), il me manque une information.

#17

Updated by Frédéric Péters 10 months ago

  • Status changed from Solution proposée to En cours
  • Patch proposed changed from Yes to No

En effet j'ai du avoir autre chose qui intervenait dans les tests à ce moment, je reprends.

#18

Updated by Frédéric Péters 10 months ago

Ce qui se passe, mieux analysé, c'est que la liste related_user_forms en contexte SQL est chargée sous forme de sql.AnyFormData, du coup dedans pas les données du coup lors de l'évaluation en barre latérale s'il y a une condition qui dépend ainsi d'une données, erreur.

Option donc prise dans le patch attaché de ne pas enregistrer de tels moments. (plutôt qu'alourdir cette vue en chargeant pour de vrai toutes les données).

#19

Updated by Frédéric Péters 8 months ago

  • Assignee set to Frédéric Péters

Also available in: Atom PDF