Projet

Général

Profil

0001-data-fix-extra_variables-VariableDoesNotExist-65746.patch

Lauréline Guérin, 30 mai 2022 09:35

Télécharger (3,3 ko)

Voir les différences:

Subject: [PATCH] data: fix extra_variables & VariableDoesNotExist (#65746)

 combo/data/models.py | 14 ++++++++++----
 tests/test_public.py | 13 +++++++++----
 2 files changed, 19 insertions(+), 8 deletions(-)
combo/data/models.py
45 45
from django.dispatch import receiver
46 46
from django.forms import models as model_forms
47 47
from django.forms.widgets import MediaDefiningClass
48
from django.template import RequestContext, Template, TemplateDoesNotExist, TemplateSyntaxError, engines
48
from django.template import (
49
    RequestContext,
50
    Template,
51
    TemplateDoesNotExist,
52
    TemplateSyntaxError,
53
    VariableDoesNotExist,
54
    engines,
55
)
49 56
from django.test.client import RequestFactory
50 57
from django.utils import timezone
51 58
from django.utils.encoding import force_text, smart_bytes
......
660 667
        context.push(original_context)
661 668
        for key, tplt in (self.extra_variables or {}).items():
662 669
            try:
663
                template = Template(tplt)
664
            except TemplateSyntaxError:
670
                result[key] = Template(tplt).render(context)
671
            except (TemplateSyntaxError, VariableDoesNotExist):
665 672
                continue
666
            result[key] = template.render(context)
667 673
        return result
668 674

  
669 675
    def get_extra_variables_keys(self):
tests/test_public.py
1136 1136
        title='Home',
1137 1137
        slug='page',
1138 1138
        template_name='standard',
1139
        extra_variables={'foo': 'bar', 'bar_id': '{{ 40|add:2 }}'},
1139
        extra_variables={
1140
            'foo': 'bar',
1141
            'bar_id': '{{ 40|add:2 }}',
1142
            'syntax_error': '{% for %}',
1143
            'variable_error': '{{ "foo"|add:user.email }}',
1144
        },
1140 1145
    )
1141 1146
    cell = JsonCell.objects.create(
1142 1147
        page=page,
1143 1148
        url='http://example.net',
1144 1149
        order=0,
1145 1150
        placeholder='content',
1146
        template_string='XX{{ foo }}YY{{ bar_id }}ZZ',
1151
        template_string='XX{{ foo }}YY{{ bar_id }}ZZ{{ baz_user }}AA{{ syntax_error }}BB{{ variable_error }}CC',
1147 1152
    )
1148 1153

  
1149 1154
    with mock.patch('combo.utils.requests.get') as requests_get:
1150 1155
        requests_get.return_value = mock.Mock(content='{}', status_code=200)
1151 1156
        resp = app.get('/page/')
1152
    assert '<div>XXbarYY42ZZ</div>' in resp
1157
    assert '<div>XXbarYY42ZZAABBCC</div>' in resp
1153 1158

  
1154 1159
    with mock.patch('combo.utils.requests.get') as requests_get:
1155 1160
        requests_get.return_value = mock.Mock(content='{}', status_code=200)
......
1159 1164
                kwargs={'page_pk': page.pk, 'cell_reference': cell.get_reference()},
1160 1165
            )
1161 1166
        )
1162
    assert resp.text.strip() == 'XXbarYY42ZZ'
1167
    assert resp.text.strip() == 'XXbarYY42ZZAABBCC'
1163 1168

  
1164 1169
    # check sub_slug/extra_variables override
1165 1170
    page.sub_slug = '(?P<fooo>[a-z]+)'
1166
-