Projet

Général

Profil

Development #77955

action "formulaire" dans une action globale interactive exécutée en masse, erreur sur champs fichier

Ajouté par Frédéric Péters il y a 11 mois. Mis à jour il y a 11 mois.

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

0%

Temps estimé:
Patch proposed:
Non
Planning:
Non

Description

Exception:
  type = '<class 'AttributeError'>', value = ''NoneType' object has no attribute 'get_tempfile_content''

Stack trace (most recent call first):
  File "/home/fred/src/eo/wcs/wcs/qommon/form.py", line 950, in set_value_from_token
   948         session = get_session()
   949         if token:
>  950             self.value = session.get_tempfile_content(token)
   951
   952     def render(self):

  locals:
     request = <wcs.qommon.http_request.HTTPRequest object at 0x7fc9a8af4d10>
     self = <FileWithPreviewWidget at 7fc99a887210: ftest_2>
     session = None
     token = '********************'

  File "/home/fred/src/eo/wcs/wcs/qommon/form.py", line 960, in _parse
   958     def _parse(self, request):
   959         if self.get_value_from_token:
>  960             self.set_value_from_token(request)
   961
   962         if self.value is None:

  locals:
     request = <wcs.qommon.http_request.HTTPRequest object at 0x7fc9a8af4d10>
     self = <FileWithPreviewWidget at 7fc99a887210: ftest_2>

  File "/home/fred/src/eo/venv/lib/python3.11/site-packages/quixote/form/widget.py", line 136, in parse
   134                 try:
   135                     self._parse(request)
>  136                 except WidgetValueError as exc:
   137                     self.set_error(stringify(exc))
   138                 if (self.required and self.value is None and

  locals:
     request = <wcs.qommon.http_request.HTTPRequest object at 0x7fc9a8af4d10>
     self = <FileWithPreviewWidget at 7fc99a887210: ftest_2>
     submitted = True

  File "/home/fred/src/eo/venv/lib/python3.11/site-packages/quixote/form/widget.py", line 95, in get_error
    93
    94     def get_error(self, request=None):
>   95         self.parse(request=request)
    96         return self.error
    97

  locals:
     request = <wcs.qommon.http_request.HTTPRequest object at 0x7fc9a8af4d10>
     self = <FileWithPreviewWidget at 7fc99a887210: ftest_2>

  File "/home/fred/src/eo/venv/lib/python3.11/site-packages/quixote/form/widget.py", line 99, in has_error
    97
    98     def has_error(self, request=None):
>   99         return bool(self.get_error(request=request))
   100
   101     def clear_error(self, request=None):

  locals:
     request = <wcs.qommon.http_request.HTTPRequest object at 0x7fc9a8af4d10>
     self = <FileWithPreviewWidget at 7fc99a887210: ftest_2>

  File "/home/fred/src/eo/venv/lib/python3.11/site-packages/quixote/form/widget.py", line 761, in has_error
   759     def has_error(self, request=None):
   760         has_error = False
>  761         if Widget.has_error(self, request=request):
   762             has_error = True
   763         for widget in self.widgets:

  locals:
     has_error = False
     request = <wcs.qommon.http_request.HTTPRequest object at 0x7fc9a8af4d10>
     self = <FileWithPreviewWidget at 7fc99a887210: ftest_2>

  File "/home/fred/src/eo/venv/lib/python3.11/site-packages/quixote/form/form.py", line 188, in has_errors
   186         if self.is_submitted():
   187             for widget in self.get_all_widgets():
>  188                 if widget.has_error(request=request):
   189                     has_errors =  True
   190         return has_errors

  locals:
     has_errors = False
     request = <wcs.qommon.http_request.HTTPRequest object at 0x7fc9a8af4d10>
     self = <wcs.qommon.form.Form object at 0x7fc99bcac790>
     widget = <FileWithPreviewWidget at 7fc99a887210: ftest_2>

  File "/home/fred/src/eo/wcs/wcs/wf/form.py", line 340, in submit_form
   338                     if add_element_widget and add_element_widget.parse():
   339                         raise RedisplayFormException()
>  340         elif not form.has_errors():
   341             button_name = form.get_submit()
   342             button = form.get_widget(button_name)

  locals:
     evo = <wcs.formdata.Evolution object at 0x7fc99b505810>
     form = <wcs.qommon.form.Form object at 0x7fc99bcac790>
     formdata = <_wcs_Test-Glob-Inter 'test glob inter #625-1' id:1>
     self = <FormWorkflowStatusItem 4 in global action "int1" (1) in workflow "actions globales interactives" (250)>
     user = <SqlUser 'Frédéric P.' id:1>

  File "/home/fred/src/eo/wcs/wcs/workflows.py", line 2064, in handle_form
  2062
  2063         for item in self.get_active_items(form, filled, user):
> 2064             next_url = item.submit_form(form, filled, user, evo)
  2065             if next_url is True:
  2066                 break

  locals:
     evo = <wcs.formdata.Evolution object at 0x7fc99b505810>
     filled = <_wcs_Test-Glob-Inter 'test glob inter #625-1' id:1>
     form = <wcs.qommon.form.Form object at 0x7fc99bcac790>
     item = <FormWorkflowStatusItem 4 in global action "int1" (1) in workflow "actions globales interactives" (250)>
     next_url = None
     self = <wcs.workflows.WorkflowGlobalAction object at 0x7fc99b507050>
     user = <SqlUser 'Frédéric P.' id:1>

  File "/home/fred/src/eo/wcs/wcs/workflows.py", line 2123, in handle_form
  2121     def handle_form(self, form, filled, user):
  2122         evo = Evolution()
> 2123         url = super().handle_form(form, filled, user, evo)
  2124         if isinstance(url, str):
  2125             return url

  locals:
     __class__ = <class 'wcs.workflows.WorkflowGlobalAction'>
     evo = <wcs.formdata.Evolution object at 0x7fc99b505810>
     filled = <_wcs_Test-Glob-Inter 'test glob inter #625-1' id:1>
     form = <wcs.qommon.form.Form object at 0x7fc99bcac790>
     self = <wcs.workflows.WorkflowGlobalAction object at 0x7fc99b507050>
     user = <SqlUser 'Frédéric P.' id:1>

  File "/home/fred/src/eo/wcs/wcs/forms/actions.py", line 238, in execute_one
   236         form = action.get_action_form(formdata, user=user)
   237         form.method = 'get'
>  238         url = action.handle_form(form, formdata, user=user)
   239         if afterjob:
   240             # reset request to avoid emails being created as afterjobs

  locals:
     action = <wcs.workflows.WorkflowGlobalAction object at 0x7fc99b507050>
     afterjob = True
     cls = <class 'wcs.forms.actions.GlobalInteractiveMassActionAfterJob'>
     form = <wcs.qommon.form.Form object at 0x7fc99bcac790>
     formdata = <_wcs_Test-Glob-Inter 'test glob inter #625-1' id:1>
     publisher = <wcs.compat.CompatWcsPublisher object at 0x7fc99bce6b90>
     status = 'wf-1'
     user = <SqlUser 'Frédéric P.' id:1>

  File "/home/fred/src/eo/wcs/wcs/forms/actions.py", line 225, in execute
   223             publisher._set_request(req)
   224             formdata = data_class.get(item_id)
>  225             self.execute_one(publisher, formdata, action, user)
   226             self.increment_count()
   227

  locals:
     action = <wcs.workflows.WorkflowGlobalAction object at 0x7fc99b507050>
     data_class = <class 'wcs.formdef._wcs_Test-Glob-Inter'>
     formdata = <_wcs_Test-Glob-Inter 'test glob inter #625-1' id:1>
     formdef = <FormDef 'test glob inter' id:625>
     item_id = 1
     publisher = <wcs.compat.CompatWcsPublisher object at 0x7fc99bce6b90>
     req = <wcs.qommon.http_request.HTTPRequest object at 0x7fc9a8af4d10>
     self = <GlobalInteractiveMassActionAfterJob id:45c4a24e-9a5b-4ca5-ba45-8d591733969a>
     user = <SqlUser 'Frédéric P.' id:1>

Révisions associées

Révision 53b16177 (diff)
Ajouté par Frédéric Péters il y a 11 mois

misc: manage file fields in global interactive forms (#77955)

Historique

#1

Mis à jour par Robot Gitea il y a 11 mois

  • Tracker changé de Bug à Development
  • Statut changé de Nouveau à En cours

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

#2

Mis à jour par Robot Gitea il y a 11 mois

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

Mis à jour par Robot Gitea il y a 11 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 :

#4

Mis à jour par Robot Gitea il y a 11 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 :

#5

Mis à jour par Transition automatique il y a 11 mois

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

Mis à jour par Transition automatique il y a 9 mois

Automatic expiration

Formats disponibles : Atom PDF