Project

General

Profile

Bug #41079

MultiValueDictKeyError: "'theme'"

Added by sentry io 14 days ago. Updated 12 days ago.

Status:
Solution proposée
Priority:
Normal
Assignee:
Category:
-
Target version:
-
Start date:
26 Mar 2020
Due date:
% Done:

0%

Patch proposed:
Yes
Planning:
No

Description

https://sentry.entrouvert.org/entrouvert/publik/issues/1120/

MultiValueDictKeyError: "'theme'" 
(5 additional frame(s) were not displayed)
...
  File "django/views/generic/base.py", line 68, in view
    return self.dispatch(request, *args, **kwargs)
  File "django/views/generic/base.py", line 88, in dispatch
    return handler(request, *args, **kwargs)
  File "django/views/generic/base.py", line 190, in get
    url = self.get_redirect_url(*args, **kwargs)
  File "hobo/theme/views.py", line 60, in get_redirect_url
    set_theme(self.request.POST['theme'])
  File "django/utils/datastructures.py", line 85, in __getitem__
    raise MultiValueDictKeyError(repr(key))

Internal Server Error: /theme/select

0001-theme-check-we-get-a-post-value-on-theme-selection-4.patch View (3.44 KB) Nicolas Roche, 27 Mar 2020 11:36 AM

0001-theme-force-providing-a-value-on-theme-selection-410.patch View (3.3 KB) Nicolas Roche, 29 Mar 2020 11:17 AM

0001-theme-check-we-post-a-value-on-theme-selection-41079.patch View (3.22 KB) Nicolas Roche, 29 Mar 2020 01:34 PM

History

#1 Updated by Lauréline Guerin 14 days ago

  • Project changed from Suivi des traces to Hobo

#2 Updated by Nicolas Roche 14 days ago

  • Assignee set to Nicolas Roche

#3 Updated by Nicolas Roche 14 days ago

Je reproduit l'erreur en retirant la sélection actuelle du thème des boutons radio,
(en retirant checked="checked" de la balise <input type="radio" name="theme"> via l'inspecteur du navigateur)
ou tout simplement en allant sur la page https://hobo.dev.publik.love/theme/select

  File "/home/nroche/src/hobo/hobo/theme/views.py", line 62, in get_redirect_url
    set_theme(self.request.POST['theme'])
  File "/home/nroche/envs/publik-env-py3/lib/python3.7/site-packages/django/utils/datastructures.py", line 85, in __getitem__
    raise MultiValueDictKeyError(repr(key))
django.utils.datastructures.MultiValueDictKeyError: "'theme'" 

#4 Updated by Nicolas Roche 12 days ago

Actuellement la vue de sélection du thème s'attend à recevoir une requête POST contenant le nom du thème choisi.
Le test illustre que l'accès à cette vue via la méthode GET génère une erreur 500 avec la trace donnée dans la description du ticket.
Ce patch choisi d'encadrer l'accès à ce code suivant le type de la méthode HTTP employée (GET/POST) pour y accéder (plutôt que de gérer l'exception liée à l'absence de contenu dans le dictionnaire POST).

#5 Updated by Frédéric Péters 12 days ago

Il me semble qu'il n'y a plus là aucun sens à hériter de RedirectView, que ça pourrait juste être View. (et retirer l'attribut permanent).

#6 Updated by Nicolas Roche 12 days ago

Oui, c'était effectivement mon plan (que je n'avais pas appliqué jusqu'au bout).
Mais j'ai bugué : mon idée d'origine était simplement la suivante (cf, ce patch).

Also available in: Atom PDF