Projet

Général

Profil

Bug #85258

rendu de submission_lateral_template : demander à avoir une exception en cas de plantage du rendu du gabarit

Ajouté par Thomas Noël il y a 4 mois. Mis à jour il y a 3 mois.

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

0%

Temps estimé:
Patch proposed:
Non
Planning:
Non

Description

Actuellement dans FormDef:;get_submission_lateral_block on a cette méthode de rendu :

            try:
                new_value = Template(self.submission_lateral_template, autoescape=False).render(context)
            except Exception as e:
                get_publisher().record_error(...)
                return None
            return new_value

mais on oublie d'ajouter un raises=True dans l'objet Template, et donc ça ne lève jamais d'exception ; et pire, quand ça plante le render(context) renvoie le gabarit tel quel, qui se retrouve affiché à l'agent.

Révisions associées

Révision e3fddc53 (diff)
Ajouté par Frédéric Péters il y a 3 mois

misc: give a specific message for missing variables in templates (#85258)

Révision 45749653 (diff)
Ajouté par Frédéric Péters il y a 3 mois

backoffice: handle django errors in submission lateral template (#85258)

Historique

#1

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

donc ça ne lève jamais d'exception

Et pourtant le coverage indique bien que cette ligne est couverte : https://jenkins.entrouvert.org/job/gitea/job/wcs/job/main/Coverage_20Report_20_28native_29/d_4006139f780a0235_formdef_py.html#t790

Tu pourrais donner un exemple de gabarit reproduisant ton cas ?

#2

Mis à jour par Thomas Noël il y a 4 mois

C'était un template avec :

<ul><!--{% for rdv in forms|objects:"rendez-vous-travailleurs-sociaux"|filter_by:"agent"|filter_value:form_submission_agent_display_name|filter_by:"rdv_datetime"|greater_than_or_equal|filter_value:now|filter_by_status:"Rendez-vous confirmé"|order_by:"form_number_raw" %}-->
    <li><!-- {% with date=rdv|get:"event" type=rdv|get:"eplanning" %}-->{{date}} ({{type}})<!--- {% endwith %}----></li>
    <!--{% endfor %}-->
</ul>

où l'erreur venait, a priori, de form_submission_agent_display_name qui n'existe pas (ticket #85257 mais c'est autre chose).

Et donc variable inconnue, plantage silencieux du render() qui prend en charge l'exception DjangoVariableDoesNotExist, cf wcs/qommon/template.py :

        try:
            rendered = self.template.render(context)
        except (DjangoTemplateSyntaxError, DjangoVariableDoesNotExist) as e:
            if self.raises:
                from . import _

                raise TemplateError(_('failure to render Django template: %s'), e)
            return self.value

et donc le return self.value qui donne le gabarit renvoyé tel quel...

Notre test joue avec XX{{today|list}}XX qui est un crash Python bas niveau ('datetime.date' object is not iterable) qui fait crasher le render systématiquement.

(Disclamation: je n'ai pas pris le temps de faire autre chose que des tests dans ma tête, je me trompe peut-être d'analyse)

#3

Mis à jour par Robot Gitea il y a 4 mois

  • Statut changé de Nouveau à En cours
  • Assigné à mis à Frédéric Péters

Frédéric Péters (fpeters) a ouvert une pull request sur Gitea concernant cette demande :

#4

Mis à jour par Robot Gitea il y a 3 mois

  • Statut changé de En cours à Solution proposée
#5

Mis à jour par Robot Gitea il y a 3 mois

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

Lauréline Guérin (lguerin) a approuvé une pull request sur Gitea concernant cette demande :

#6

Mis à jour par Robot Gitea il y a 3 mois

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

Frédéric Péters (fpeters) a mergé une pull request sur Gitea concernant cette demande :

#7

Mis à jour par Transition automatique il y a 3 mois

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

Mis à jour par Transition automatique il y a 16 jours

Automatic expiration

Formats disponibles : Atom PDF