Projet

Général

Profil

Bug #56764

gestion des erreurs de gabarit de résumé

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

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

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Un gabarit sur une vue qui est {{ form_var_service_instructeur|list }} mais ça plante,

Attraper/enregistrer l'erreur et mettre "ERREUR" comme résultat de gabarit ?

Exception:
  type = '<class 'TypeError'>', value = ''NoneType' object is not iterable'

Stack trace (most recent call first):
  File "/usr/lib/python3/dist-packages/wcs/qommon/templatetags/qommon.py", line 841, in list_
   839 def list_(value):
   840     # turn a generator into a list
>  841     return list(unlazy(value))
   842 
   843 

  locals: 
     value = None

[...]

  File "/usr/lib/python3/dist-packages/django/template/backends/django.py", line 63, in render
    61             return self.template.render(context)
    62         except TemplateDoesNotExist as exc:
>   63             reraise(exc, self.backend)
    64 
    65 

  locals: 
     context = [{'True': True, 'False': False, 'None': None}, {'form': <wcs.variables.LazyFormData object at 0x7f305513cda0>, 'attachments': <wcs.workflows.AttachmentsSubstitutionProxy object at 0x7f305513c860>, 'category_name': 'Signalement', 'category_id': 'signalement', 'category_slug': 'signalement', 'category_description': None, 'formdef_id': '11'}]
     request = None
     self = <django.template.backends.django.Template object at 0x7f3054fc85f8>

  File "/usr/lib/python3/dist-packages/wcs/qommon/template.py", line 515, in django_render
   513 
   514                 raise TemplateError(_('failure to render Django template: %s'), e)
>  515             return self.value
   516         rendered = str(rendered)
   517         if context.get('allow_complex'):

  locals: 
     context = {'form': <wcs.variables.LazyFormData object at 0x7f305513cda0>, 'attachments': <wcs.workflows.AttachmentsSubstitutionProxy object at 0x7f305513c860>, 'category_name': 'Signalement', 'category_id': 'signalement', 'category_slug': 'signalement', 'category_description': None, 'formdef_id': '11'}
     self = <wcs.qommon.template.Template object at 0x7f3054fc82b0>

  File "/usr/lib/python3/dist-packages/wcs/formdata.py", line 469, in set_auto_fields
   467                     new_value = None
   468                 else:
>  469                     new_value = Template(template, autoescape=False).render(context)
   470                 if attribute.startswith('template:'):
   471                     key = attribute[9:]

  locals: 
     args = ()
     attribute = 'template:custom-view:liste-service-instructeur-avec-list'
     changed = True
     context = {'form': <wcs.variables.LazyFormData object at 0x7f305513cda0>, 'attachments': <wcs.workflows.AttachmentsSubstitutionProxy object at 0x7f305513c860>, 'category_name': 'Signalement', 'category_id': 'signalement', 'category_slug': 'signalement', 'category_description': None, 'formdef_id': '11'}
     digests = {'default': '...', 'custom-view:liste-prestataire-2': '{{ form_var_service_instructeur|unique }}', 'custom-view:liste-prestataire-3': '...', 'custom-view:liste-prestataire-service-instructeur': '...'}
     field = <StringField 4 'Service instructeur'>
     field_name_values = ['_first_name', '_last_name']
     fields = {'template:default': '{{ form_var_prestataire }} - {{form_var_courriel_prestataire}}', 'template:custom-view:liste-prestataire-2': '{{ form_var_service_instructeur|unique }}', 'template:custom-view:liste-prestataire-3': '{{ form_var_prestataire }} - {{form_var_courriel_prestataire}}', 'template:custom-view:liste-prestataire-service-instructeur': '{{ form_var_prestataire }} - {{form_var_courriel_prestataire|default:""}}', 'template:custom-view:liste-service-instructeur-avec-list': '{{ form_var_service_instructeur|list }}', 'template:custom-view:liste-service-instructeur-avec-unique': '{{ form_var_service_instructeur=="Service Voirie Maintenance Responsable" }}'}
     form_user_data = {}
     key = 'custom-view:liste-prestataire-service-instructeur'
     kwargs = {}
     new_value = '...'
     self = <_wcs_Signalement-Prestataire 'Signalement Prestataire - n°11-1' id:1>
     template = '{{ form_var_service_instructeur|list }}'
     user_label = ''
     users_cfg = ...
     value = '{{ form_var_service_instructeur=="Service Voirie Maintenance Responsable" }}'

  File "/usr/lib/python3/dist-packages/wcs/sql.py", line 1986, in _set_auto_fields
  1984     @guard_postgres
  1985     def _set_auto_fields(self, cur):
> 1986         if self.set_auto_fields():
  1987             sql_statement = (
  1988                 '''UPDATE %s

  locals: 
     cur = <cursor object at 0x7f3055208428; closed: 0>
     self = <_wcs_Signalement-Prestataire 'Signalement Prestataire - n°11-1' id:1>

Fichiers

Révisions associées

Révision d2c6f15f (diff)
Ajouté par Lauréline Guérin il y a plus de 2 ans

formdata: don't fail on digest template generation (#56764)

Historique

#1

Mis à jour par Lauréline Guérin il y a plus de 2 ans

  • Assigné à mis à Lauréline Guérin
#2

Mis à jour par Lauréline Guérin il y a plus de 2 ans

#3

Mis à jour par Thomas Noël il y a plus de 2 ans

Code ok, mais je me pose la question de l'erreur enregistrée : 'Could not render template'. Je pense qu'elle manque de contexte, on ne sait pas quel gabarit a cassé. Est-ce que ça serait pertinent/possible de dire quelque chose de plus qui aidera à savoir ? (aussi pour éviter que tous les gabarits finissent dans même record_error)

#5

Mis à jour par Thomas Noël il y a plus de 2 ans

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

Ca roule.

Éventuellement tu pourrais mettre de l'i18n sur « new_value = 'ERROR' » ? Ceci afin qu'on n'affiche bien « ERREUR » pour des fiches qui seraient vues par des utilisateurs vite effrayés par l'anglais (à raison, hein).

#6

Mis à jour par Lauréline Guérin il y a plus de 2 ans

Ben, au moment où le digest est calculé et stocké, c'est quoi la locale ? :)

#7

Mis à jour par Thomas Noël il y a plus de 2 ans

Lauréline Guerin a écrit :

Ben, au moment où le digest est calculé et stocké, c'est quoi la locale ? :)

J'ai renoncé à chercher mais souvent je vois que c'est magique et tout lazy de partout, en général ça marche, ne me demande pas comment parfois moi même je. Mais si tu penses que vraiment ça ne marchera pas, laisse tomber. On cherchera à corriger quand quelqu'un criera en voyant "ERROR".

#8

Mis à jour par Lauréline Guérin il y a plus de 2 ans

  • Statut changé de Solution validée à Résolu (à déployer)
commit d2c6f15f06eb735bdcdfef880260747f45686788
Author: Lauréline Guérin <zebuline@entrouvert.com>
Date:   Fri Sep 10 11:40:05 2021 +0200

    formdata: don't fail on digest template generation (#56764)

J'ai laissé tel quel: avec i18n ça foire au moment du store de l'objet en mode pickle, et je sais pas trop pourquoi

#9

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