Bug #46099
erreur sur affichage d'un formulaire dont le rendu d'un champ échoue
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}} <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}} <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}} <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}} <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}} <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
Historique
Mis à jour par Frédéric Péters il y a plus de 3 ans
- Fichier 0001-backoffice-don-t-crash-previewing-fields-that-fail-t.patch 0001-backoffice-don-t-crash-previewing-fields-that-fail-t.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
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
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)
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
backoffice: don't crash previewing fields that fail to render (#46099)