Projet

Général

Profil

0001-templatetags-remove-json_script-as-it-s-available-in.patch

Frédéric Péters, 31 mai 2022 11:44

Télécharger (2,91 ko)

Voir les différences:

Subject: [PATCH] templatetags: remove json_script as it's available in django
 (#65801)

 combo/public/templatetags/combo.py | 24 ------------------------
 tests/test_public_templatetags.py  |  8 --------
 2 files changed, 32 deletions(-)
combo/public/templatetags/combo.py
27 27
from django import template
28 28
from django.core import signing
29 29
from django.core.exceptions import PermissionDenied
30
from django.core.serializers.json import DjangoJSONEncoder
31 30
from django.template import VariableDoesNotExist
32 31

  
33 32
try:
......
43 42
from django.template.defaultfilters import stringfilter
44 43
from django.utils import dateparse
45 44
from django.utils.encoding import force_text
46
from django.utils.html import format_html
47
from django.utils.safestring import mark_safe
48 45
from django.utils.timezone import is_naive, make_aware
49 46

  
50 47
from combo.apps.dashboard.models import DashboardCell, Tile
......
652 649
    return decimal(abs(parse_decimal(value)))
653 650

  
654 651

  
655
_json_script_escapes = {
656
    ord('>'): '\\u003E',
657
    ord('<'): '\\u003C',
658
    ord('&'): '\\u0026',
659
}
660

  
661

  
662
@register.filter(is_safe=True)
663
def json_script(value, element_id):
664
    """
665
    Escape all the HTML/XML special characters with their unicode escapes, so
666
    value is safe to be output anywhere except for inside a tag attribute. Wrap
667
    the escaped JSON in a script tag.
668
    --
669
    This is a backport from Django 2.1; it should be removed once Combo bumps
670
    its minimal dependency to 2.1.
671
    """
672
    json_str = json.dumps(value, cls=DjangoJSONEncoder).translate(_json_script_escapes)
673
    return format_html('<script id="{}" type="application/json">{}</script>', element_id, mark_safe(json_str))
674

  
675

  
676 652
@register.filter(is_safe=False)
677 653
def phonenumber_fr(value, separator=' '):
678 654
    DROMS = ('262', '508', '590', '594', '596')
tests/test_public_templatetags.py
854 854
    assert tmpl.render(Context({'value': None})) == '0'
855 855

  
856 856

  
857
def test_json_script():
858
    tmpl = Template('{{ plop|json_script:"toto" }}')
859
    assert (
860
        tmpl.render(Context({'plop': {'a': 'b'}}))
861
        == '<script id="toto" type="application/json">{"a": "b"}</script>'
862
    )
863

  
864

  
865 857
def test_phonenumber_fr():
866 858
    t = Template('{{ number|phonenumber_fr }}')
867 859
    assert t.render(Context({'number': '01 23 45 67 89'})) == '01 23 45 67 89'
868
-