Projet

Général

Profil

Bug #39096

Bug évaluation sur condition python

Ajouté par Marie Kuntz il y a plus de 4 ans. Mis à jour il y a plus de 2 ans.

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

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

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/


Fichiers

Révisions associées

Révision e6eead49 (diff)
Ajouté par Frédéric Péters il y a plus de 2 ans

misc: don't record errors when evaluating roles for pending bar (#39096)

Historique

#2

Mis à jour par Marie Kuntz il y a plus de 4 ans

  • Sujet changé de Bug évaluation condition python ? à 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

Mis à jour par Marie Kuntz il y a plus de 4 ans

  • Tracker changé de Project management à Development
  • Projet changé de CNIL à w.c.s.
  • Assigné à Marie Kuntz supprimé
  • Début 17 janvier 2020 supprimé
#4

Mis à jour par Marie Kuntz il y a plus de 4 ans

  • Tracker changé de Development à Bug
#5

Mis à jour par Frédéric Péters il y a plus de 4 ans

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

#6

Mis à jour par Marie Kuntz il y a plus de 4 ans

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

#8

Mis à jour par Marie Kuntz il y a plus de 4 ans

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

Mis à jour par Benjamin Dauvergne il y a plus de 4 ans

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

#11

Mis à jour par Benjamin Dauvergne il y a plus de 4 ans

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

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

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

Mis à jour par Benjamin Dauvergne il y a plus de 3 ans

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

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

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

Mis à jour par Benjamin Dauvergne il y a plus de 3 ans

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

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

  • Statut changé de Solution proposée à En cours
  • Patch proposed changé de Oui à Non

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

#18

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

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

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

  • Assigné à mis à Frédéric Péters
#20

Mis à jour par Benjamin Dauvergne il y a plus de 2 ans

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

Si le patch s'applique toujours. Mais j'ai fini par comprendre que le souci ici est une erreur loggé qui n'en est pas vraiment une, fonctionnellement il n'y a sinon pas de problème mais j'aurai plutôt vu le fait de ne pas calculer des choses qui n'ont pas d'intérêt dans la situation, i.e. en barre latérale ne pas calculer action rôle avec les conditions si ça n'est pas possible, plutôt que d'en cacher les erreurs.

#21

Mis à jour par Frédéric Péters il y a plus de 2 ans

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

Après rebase + black,

commit e6eead49b45aabef6a4d3394b516f19185ccf072
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Mon Aug 3 17:18:36 2020 +0200

    misc: don't record errors when evaluating roles for pending bar (#39096)
#22

Mis à jour par Frédéric Péters il y a plus de 2 ans

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

Formats disponibles : Atom PDF