Projet

Général

Profil

Bug #46099

erreur sur affichage d'un formulaire dont le rendu d'un champ échoue

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

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
25 août 2020
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

## Plateforme de tests ##

Exception:
  type = '<class 'wcs.qommon.errors.ConnectionError'>', value = 'invalid scheme in URL {{agenda_url}}api/agenda/{{form_var_objet_slugvirtuel|default:form_var_objet_slug}}/meetings/{{form_var_sousobjet_raw}}-{{form_var_nombrepersonnes_raw|default:"1"}}/'

Stack trace (most recent call first):
  File "/usr/lib/python3/dist-packages/wcs/qommon/misc.py", line 317, in _http_request
   315     splitted_url = urlparse.urlsplit(url)
   316     if splitted_url.scheme not in ('http', 'https'):
>  317         raise ConnectionError('invalid scheme in URL %s' % url)
   318 
   319     hostname = splitted_url.netloc

  File "/usr/lib/python3/dist-packages/wcs/qommon/misc.py", line 358, in http_get_page
   356 
   357 def http_get_page(url, **kwargs):
>  358     return _http_request(url, **kwargs)
   359 
   360 

  File "/usr/lib/python3/dist-packages/wcs/wscalls.py", line 120, in call_webservice
   118     else:
   119         response, status, data, auth_header = misc.http_get_page(
>  120                 url, headers=headers)
   121         request = get_request()
   122         if cache is True and request and hasattr(request, 'wscalls_cache'):

  File "/usr/lib/python3/dist-packages/wcs/wscalls.py", line 207, in call
   205 
   206     def call(self):
>  207         (response, status, data) = call_webservice(cache=True, **self.request)
   208         return json_loads(data)
   209 

  File "/usr/lib/python3/dist-packages/wcs/wscalls.py", line 216, in __getattr__
   214             return NamedWsCall.get(attr).call()
   215         except (KeyError, ValueError):
>  216             raise AttributeError(attr)
   217 
   218 

  File "/usr/lib/python3/dist-packages/django/template/base.py", line 931, in _resolve_lookup
   929                 current = context.template.engine.string_if_invalid
   930             else:
>  931                 raise
   932 
   933         return current

  File "/usr/lib/python3/dist-packages/django/template/base.py", line 849, in resolve
   847         if self.lookups is not None:
   848             # We're dealing with a variable that needs to be resolved
>  849             value = self._resolve_lookup(context)
   850         else:
   851             # We're dealing with a literal, so it's already been "resolved" 

  File "/usr/lib/python3/dist-packages/wcs/qommon/template.py", line 536, in variable_resolve
   534     except UnicodeEncodeError:
   535         # don't crash on non-ascii variable names
>  536         return context.template.engine.string_if_invalid
   537     if isinstance(value, str):
   538         return force_text(value, 'utf-8')

  File "/usr/lib/python3/dist-packages/django/template/base.py", line 720, in resolve
   718                             return string_if_invalid
   719                     else:
>  720                         obj = string_if_invalid
   721         else:
   722             obj = self.var

  File "/usr/lib/python3/dist-packages/django/template/base.py", line 1045, in render
  1043             # control (e.g. exception rendering). In that case, we fail
  1044             # quietly.
> 1045             return ''
  1046         return render_value_in_context(output, context)
  1047 
  File "/usr/lib/python3/dist-packages/django/template/base.py", line 961, in render_annotated
   959             if context.template.engine.debug and not hasattr(e, 'template_debug'):
   960                 e.template_debug = context.render_context.template.get_exception_info(e, self.token)
>  961             raise
   962 
   963     def __iter__(self):

  File "/usr/lib/python3/dist-packages/django/template/base.py", line 990, in render
   988         for node in self:
   989             if isinstance(node, Node):
>  990                 bit = node.render_annotated(context)
   991             else:
   992                 bit = node

  File "/usr/lib/python3/dist-packages/django/template/base.py", line 199, in _render
   197 
   198     def _render(self, context):
>  199         return self.nodelist.render(context)
   200 
   201     def render(self, context):

  File "/usr/lib/python3/dist-packages/django/template/base.py", line 209, in render
   207                     return self._render(context)
   208             else:
>  209                 return self._render(context)
   210 
   211     def compile_nodelist(self):

  File "/usr/lib/python3/dist-packages/django/template/backends/django.py", line 68, in render
    66             return self.template.render(context)
    67         except TemplateDoesNotExist as exc:
>   68             reraise(exc, self.backend)
    69 
    70 

  File "/usr/lib/python3/dist-packages/wcs/qommon/template.py", line 507, in django_render
   505                 raise TemplateError(_('failure to render Django template: %s'), e)
   506             else:
>  507                 return self.value
   508         return force_str(rendered)
   509 

  File "/usr/lib/python3/dist-packages/wcs/workflows.py", line 2770, in template_on_context
  2768     if not Template.is_template_string(template):
  2769         return template
> 2770     return Template(template, **kwargs).render(context)
  2771 
  2772 

  File "/usr/lib/python3/dist-packages/wcs/workflows.py", line 2763, in template_on_formdata
  2761         return template
  2762     context = get_formdata_template_context(formdata)
> 2763     return template_on_context(context, template, **kwargs)
  2764 
  2765 

  File "/usr/lib/python3/dist-packages/wcs/workflows.py", line 2754, in template_on_html_string
  2752 
  2753 def template_on_html_string(template):
> 2754     return template_on_formdata(None, template, ezt_format=ezt.FORMAT_HTML)
  2755 
  2756 

  locals: 
     template = '<p>Vous avez choisi {{form_var_objet}}&nbsp;<strong>{{form_var_sousobjet|default:""}} au plus rapide</strong></p>\n\n<p>{{form_var_objet_description|safe|default:""}}</p>\n\n<p>Votre rendez vous durera environ :</p>\n\n<p>https://agendas-metz.test.entrouvert.org/api/agenda/{{form_var_objet_slug}}/meetings/{{form_var_sousobjet_raw}}-{{form_var_nombrepersonnes_raw|default:"1"}}/</p>\n\n<p>{{webservice.vdmobtenir_la_duree_d_un_rendezvous_avec_la_ville_de_metz.data.duration}}</p>'

  File "/usr/lib/python3/dist-packages/wcs/fields.py", line 718, in get_text
   716         import wcs.workflows
   717         label = self.get_html_content()
>  718         return wcs.workflows.template_on_html_string(label)
   719 
   720     def add_to_form(self, form, value=None):

  locals: 
     label = '<p>Vous avez choisi {{form_var_objet}}&nbsp;<strong>{{form_var_sousobjet|default:""}} au plus rapide</strong></p>\n\n<p>{{form_var_objet_description|safe|default:""}}</p>\n\n<p>Votre rendez vous durera environ :</p>\n\n<p>https://agendas-metz.test.entrouvert.org/api/agenda/{{form_var_objet_slug}}/meetings/{{form_var_sousobjet_raw}}-{{form_var_nombrepersonnes_raw|default:"1"}}/</p>\n\n<p>{{webservice.vdmobtenir_la_duree_d_un_rendezvous_avec_la_ville_de_metz.data.duration}}</p>'
     self = <CommentField 19 '<p>Vous avez choisi {{form_var_objet}}&nbsp;<strong>{{form_var_s'>
     wcs = <module 'wcs' from '/usr/lib/python3/dist-packages/wcs/__init__.py'>

  File "/usr/lib/python3/dist-packages/wcs/fields.py", line 722, in add_to_form
   720     def add_to_form(self, form, value=None):
   721         widget = CommentWidget(
>  722                 content=self.get_text(),
   723                 extra_css_class=self.extra_css_class)
   724         form.widgets.append(widget)

  locals: 
     form = <wcs.qommon.form.Form object at 0x7f6c1ee2c080>
     self = <CommentField 19 '<p>Vous avez choisi {{form_var_objet}}&nbsp;<strong>{{form_var_s'>
     value = None

  File "/usr/lib/python3/dist-packages/wcs/admin/forms.py", line 879, in get_preview
   877             field.id = i
   878             if hasattr(field, str('add_to_form')):
>  879                 field.add_to_form(form)
   880             else:
   881                 if field.key == 'page':

  locals: 
     field = <CommentField 19 '<p>Vous avez choisi {{form_var_objet}}&nbsp;<strong>{{form_var_s'>
     form = <wcs.qommon.form.Form object at 0x7f6c1ee2c080>
     i = 19
     on_page = 4
     self = <wcs.admin.forms.FormDefPage object at 0x7f6c1ee17d30>

Je serais pour attraper toute erreur de rendu et écrire "prévisualisation du champ impossible"


Fichiers

Révisions associées

Révision 52800f41 (diff)
Ajouté par Frédéric Péters il y a plus de 3 ans

backoffice: don't crash previewing fields that fail to render (#46099)

Historique

#2

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

#3

Mis à jour par Serghei Mihai il y a plus de 3 ans

  • Statut changé de Solution proposée à Solution validée
  • Assigné à mis à Frédéric Péters
#4

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

  • Statut changé de Solution validée à Résolu (à déployer)
commit 52800f417356fe5b83c142ffcb207a770cddd314
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Tue Aug 25 18:31:38 2020 +0200

    backoffice: don't crash previewing fields that fail to render (#46099)
#5

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

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

Formats disponibles : Atom PDF