Development #34518
ne pas planter sur un gabarit d'url invalide dans un attribut d'une cellule texte
0%
Description
Cellule texte avec href="{{e-services_url}}backoffice/...", crash parce que template invalide (le - dedans).
En cas de TemplateError, juste ne pas remplacer. Ou taper "TEMPLATE ERROR" dedans serait plus explicite ?
File "/usr/lib/python2.7/dist-packages/combo/data/models.py" in render 690. context.update(self.get_cell_extra_context(context)) File "/usr/lib/python2.7/dist-packages/combo/data/models.py" in get_cell_extra_context 769. text = re.sub(r'(href|src)="(.*?)"', sub_variadic_url, text) File "/usr/lib/python2.7/re.py" in sub 155. return _compile(pattern, flags).sub(repl, string, count) File "/usr/lib/python2.7/dist-packages/combo/data/models.py" in sub_variadic_url 767. url = utils.get_templated_url(url, context=context) File "/usr/lib/python2.7/dist-packages/combo/utils/urls.py" in get_templated_url 58. raise TemplateError('syntax error')
Fichiers
Demandes liées
Révisions associées
Revert "utils: do not raise on Django syntax error in templated_url (#34518)"
This reverts commit be570b576236faf920fb465aad9d0674b3184989.
Original commit pushed by accident.
utils: do not raise on Django syntax error in templated_url (#34518)
Historique
Mis à jour par Nicolas Roche il y a plus de 4 ans
- Lié à Development #19261: permettre d'utiliser la syntaxe Django dans les template de cellule ajouté
Mis à jour par Nicolas Roche il y a plus de 4 ans
- Fichier 0001-utils-do-not-raise-on-Django-syntax-error-in-templat.patch 0001-utils-do-not-raise-on-Django-syntax-error-in-templat.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Je trouve ma correction un peu moche parce que :
<a href="TEMPLATE ERROR">link</a>'
s'affiche :
https://combo.dev.publik.love/TEMPLATE%20ERROR
dans le navigateur, mais je n'ai pas trouvé mieux.
Je réalise aussi que le test que j'ai ajouté dans test_pages.py semble déjà intégré à celui dans test_public.py.
Mis à jour par Frédéric Péters il y a plus de 4 ans
Il faudrait uniquement modifier le comportement pour la cellule texte, pas partout (pas toucher à utils/urls.py); en gros attraper TemplateError, logguer, retourner quelque chose.
Et là, "quelque chose", c'était "TEMPLATE ERROR" évoqué dans la description du ticket, ça pourrait aussi être le template pas rendu, une combinaison des deux, l'utilisation de #, genre "# template error ({{ plop })".
Mis à jour par Nicolas Roche il y a plus de 4 ans
- Fichier 0001-utils-do-not-raise-on-Django-syntax-error-in-templat.patch 0001-utils-do-not-raise-on-Django-syntax-error-in-templat.patch ajouté
Il faudrait uniquement modifier le comportement pour la cellule texte
comme ça je n'ai pas à toucher aux autres tests.
Donc je logue un warning :
error in templated URL ({{bof-services_url}}/truc/): syntax error
puis j'affiche ce message dans la cellule texte au dessus de la balise incriminée
# can't render href|src templated attribut
Mis à jour par Frédéric Péters il y a plus de 4 ans
Pas trois lignes pour afficher une ligne de log, juste faire logging.warning("le message"); et pas attraper deux fois l'exception, seulement dans sub_variadic_url. (et on zappe ainsi l'écriture d'un message d'erreur à l'usager, qui devrait être traduit et formaté correctement).
Mis à jour par Nicolas Roche il y a plus de 4 ans
- Fichier 0001-wcs-use-wcs-category-order-in-backoffice-submission-.patch ajouté
Compris, juste un warning.
Au rendu, l'utilisateur verra son paramètre 'src' ou 'href' non interprété et pourra donc se faire une idée de ce qui ne va pas et doit être corrigé.
<a href="{{e-services_url}}/backoffice/...">
Mis à jour par Nicolas Roche il y a plus de 4 ans
- Fichier 0001-utils-do-not-raise-on-Django-syntax-error-in-templat.patch 0001-utils-do-not-raise-on-Django-syntax-error-in-templat.patch ajouté
mauvais patch (désolé)
Mis à jour par Nicolas Roche il y a plus de 4 ans
- Fichier
0001-wcs-use-wcs-category-order-in-backoffice-submission-.patchsupprimé
Mis à jour par Frédéric Péters il y a plus de 4 ans
- Statut changé de Solution proposée à Solution validée
Tu peux juste utiliser url plutôt que refaire match.group(2), mais ok ainsi.
Mis à jour par Nicolas Roche il y a plus de 4 ans
- Fichier 0001-utils-do-not-raise-on-Django-syntax-error-in-templat.patch 0001-utils-do-not-raise-on-Django-syntax-error-in-templat.patch ajouté
- Statut changé de Solution validée à Solution proposée
J'ai corrigé.
Mis à jour par Thomas Noël il y a plus de 4 ans
- Statut changé de Solution proposée à Solution validée
Mis à jour par Nicolas Roche il y a plus de 4 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit 879be68be43bf849660c2fbd3cd9b7f50e724192 Author: Nicolas ROCHE <nroche@entrouvert.com> Date: Wed Sep 25 18:27:30 2019 +0200 utils: do not raise on Django syntax error in templated_url (#34518)
Mis à jour par Frédéric Péters il y a plus de 4 ans
- Statut changé de Résolu (à déployer) à Solution déployée
utils: do not raise on Django syntax error in templated_url (#34518)