Projet

Général

Profil

Bug #34020

KeyError sur self.formdef.data_class().get(draft_formdata_id)

Ajouté par Thomas Noël il y a presque 5 ans. Mis à jour il y a presque 5 ans.

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

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Sur un formulaire avec code de suivi, en mode anonyme, mais pas sur la première page. Je n'ai pas réssui à reproduire, mais on a eu des traces de ce genre:

KeyError at /papiers-citoyennete/demande-d-un-acte-de-mariage/
No exception message supplied

Request Method: POST
Request URL: https://demarches.nancy.fr/papiers-citoyennete/demande-d-un-acte-de-mariage/
Django Version: 1.11.20
Python Executable: /usr/bin/uwsgi-core
Python Version: 2.7.13

Traceback:  

File "/usr/lib/python2.7/dist-packages/django/core/handlers/exception.py" in inner
  41.             response = get_response(request)

File "/usr/lib/python2.7/dist-packages/django/core/handlers/base.py" in _legacy_get_response
  249.             response = self._get_response(request)

File "/usr/lib/python2.7/dist-packages/django/core/handlers/base.py" in _get_response
  187.                 response = self.process_exception_by_middleware(e, request)

File "/usr/lib/python2.7/dist-packages/django/core/handlers/base.py" in _get_response
  185.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/usr/lib/python2.7/dist-packages/wcs/compat.py" in quixote
  245.     return pub.process_request(pub.get_request())

File "/usr/lib/python2.7/dist-packages/wcs/compat.py" in process_request
  210.         output = self.filter_output(request, output)

File "/usr/lib/python2.7/dist-packages/wcs/compat.py" in filter_output
  175.                 template_response)

File "/usr/lib/python2.7/dist-packages/wcs/compat.py" in render_template
  183.                 template_context=template_response.context)

File "/usr/lib/python2.7/dist-packages/auquotidien/modules/template.py" in get_decorate_vars
  16.         template_context['form_side'] = template_context['form_side']()

File "/usr/lib/python2.7/dist-packages/wcs/forms/root.py" in <lambda>
  412.             'form_side': lambda: self.form_side(0, page, data=data, magictoken=magictoken),

File "/usr/lib/python2.7/dist-packages/auquotidien/modules/formpage.py" in form_side
  22.         form_side_html = OldFormPage.form_side(self, *args, **kwargs)

File "/usr/lib/python2.7/dist-packages/wcs/forms/root.py" in form_side
  431.             r += self.tracking_code_box(data, magictoken)

File "/usr/lib/python2.7/dist-packages/wcs/forms/root.py" in tracking_code_box
  448.                 formdata = self.formdef.data_class().get(draft_formdata_id)

File "/usr/lib/python2.7/dist-packages/wcs/sql.py" in f
  348.             return func(*args, **kwargs)

File "/usr/lib/python2.7/dist-packages/wcs/sql.py" in get
  1531.             raise KeyError()

Exception Type: KeyError at /papiers-citoyennete/demande-d-un-acte-de-mariage/

Request information:
USER: [unable to retrieve the current user]

GET: No GET data

POST:
magictoken = u'xxxxxx'
_ajax_form_token = u'xxxxxxxxxx'
f21 = u'1'
submit = u'Suivant'
f23 = u'Autre'
step = u'0'
f20 = u'EXTRAIT-AVEC-FILIATION'
f26 = u''
f24 = u'BELLE-SOEUR'
page_id = u'18'
page = u'1'

FILES: No FILES data

COOKIES:
wcs-3326ea = u'xxxxxxx'

Donc on a un KeyError lors de l'affichage du code suivi, au niveau de wcs/forms/root.py

    def tracking_code_box(self, data, magictoken):
        '''Create the tracking code box, it displays the current tracking code
           if enabled, and a 'remove draft' button if the current form is a draft
           that has been recalled.'''
        r = TemplateIO(html=True)
        if self.formdef.enable_tracking_codes:
            r += htmltext('<div class="tracking-code-part">')
            r += htmltext('<h3>%s</h3>') % _('Tracking code')

            tracking_code = None
            draft_formdata_id = data.get('draft_formdata_id')
            if draft_formdata_id:
                formdata = self.formdef.data_class().get(draft_formdata_id)         <----- ici, KeyError
                tracking_code = formdata.tracking_code
            else:
                tracking_code = data.get('future_tracking_code')

le self.formdef.data_class().get(draft_formdata_id) ne semble pas exister.

Ce qui n'a pas vraiment de sens pour moi (ça me semble impossible).


Fichiers

Révisions associées

Révision ccce3fba (diff)
Ajouté par Frédéric Péters il y a presque 5 ans

forms: don't crash on suddently missing draft (#34020)

Historique

#1

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

Dans #23826 on n'était déjà pas arrivé à creuser l'affaire, pareil #25266, je continue sur la lancée.

#2

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

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

C'est arrivé une dizaine de fois ce week-end, ce qui est quand même nouveau (et peut-être dû à la nouvelle release et les patches autour de abandonner/annuler, dunno).

Mais soit, j'ai toujours pas d'idée, cachons le soucis.

#3

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

  • Statut changé de Solution validée à Résolu (à déployer)
commit ccce3fba1e37732f761bf555d069e463312a8b59
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Sun Jun 16 20:54:35 2019 +0200

    forms: don't crash on suddently missing draft (#34020)
#4

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

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

Formats disponibles : Atom PDF