data: inject computed variables in context for cell condition (#66632)
This commit is contained in:
parent
f4ecedaf35
commit
f97022233e
|
@ -1331,9 +1331,8 @@ class CellBase(models.Model, metaclass=CellMeta):
|
|||
condition = self.condition
|
||||
if not condition:
|
||||
return True
|
||||
context = RequestContext(request)
|
||||
if condition in self.page.extra_variables:
|
||||
condition = self.page.extra_variables[condition].strip('{ }')
|
||||
context = self.page.get_extra_variables(request, {})
|
||||
context = RequestContext(request, context)
|
||||
try:
|
||||
return Template('{%% if %s %%}OK{%% endif %%}' % condition).render(context) == 'OK'
|
||||
except (TemplateSyntaxError, VariableDoesNotExist):
|
||||
|
|
|
@ -430,7 +430,7 @@ def get_data_from_url(url):
|
|||
return WCS_CARDS_CUSTOM_VIEW_DATA
|
||||
m_list = re.match(r'/api/cards/([a-z0-9_]+)/list', url)
|
||||
if m_list:
|
||||
return WCS_CARDS_DATA[m_list.group(1)]
|
||||
return WCS_CARDS_DATA.get(m_list.group(1)) or []
|
||||
return []
|
||||
|
||||
|
||||
|
@ -4249,18 +4249,44 @@ def test_cell_condition(mock_send, nocache, app):
|
|||
resp = app.get(page.get_online_url())
|
||||
assert len(resp.context.get('cells') or []) == 0
|
||||
|
||||
page.extra_variables = {'var1': 'cards|objects:"card_model_1"|getlist:"id"|list'}
|
||||
page.extra_variables = {'var1': '{{ cards|objects:"card_model_1"|getlist:"id"|list }}'}
|
||||
page.save()
|
||||
cell.condition = 'var1'
|
||||
cell.save()
|
||||
resp = app.get(page.get_online_url())
|
||||
assert len(resp.context['cells']) == 1
|
||||
|
||||
page.extra_variables = {'var1': 'cards|objects:"card_model_1"|getlist:"id"|get:42'}
|
||||
page.extra_variables = {'var1': '{{ cards|objects:"card_model_1"|getlist:"id"|get:42|default:"" }}'}
|
||||
page.save()
|
||||
resp = app.get(page.get_online_url())
|
||||
assert len(resp.context.get('cells') or []) == 0
|
||||
|
||||
page.extra_variables = {
|
||||
'var1': '{{ cards|objects:"unknown"|first|get:"id"|default:"" }}',
|
||||
'var2': '{{ cards|objects:"card_model_1"|first|get:"id"|default:"" }}',
|
||||
}
|
||||
page.save()
|
||||
cell.condition = 'not var1'
|
||||
cell.save()
|
||||
resp = app.get(page.get_online_url())
|
||||
assert len(resp.context['cells']) == 1
|
||||
cell.condition = 'var2'
|
||||
cell.save()
|
||||
resp = app.get(page.get_online_url())
|
||||
assert len(resp.context['cells']) == 1
|
||||
cell.condition = 'not var2'
|
||||
cell.save()
|
||||
resp = app.get(page.get_online_url())
|
||||
assert len(resp.context.get('cells') or []) == 0
|
||||
cell.condition = 'not var1 and not var2'
|
||||
cell.save()
|
||||
resp = app.get(page.get_online_url())
|
||||
assert len(resp.context.get('cells') or []) == 0
|
||||
cell.condition = 'not var1 and var2'
|
||||
cell.save()
|
||||
resp = app.get(page.get_online_url())
|
||||
assert len(resp.context['cells']) == 1
|
||||
|
||||
|
||||
@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
|
||||
def test_link_list_cell_condition(mock_send, nocache, app):
|
||||
|
@ -4286,7 +4312,7 @@ def test_link_list_cell_condition(mock_send, nocache, app):
|
|||
assert len(resp.context['cells']) == 1
|
||||
assert 'Example Site' not in resp
|
||||
|
||||
page.extra_variables = {'var1': 'cards|objects:"card_model_1"|getlist:"id"'}
|
||||
page.extra_variables = {'var1': '{{ cards|objects:"card_model_1"|getlist:"id"|list }}'}
|
||||
page.save()
|
||||
link_cell.condition = 'var1'
|
||||
link_cell.save()
|
||||
|
@ -4294,7 +4320,7 @@ def test_link_list_cell_condition(mock_send, nocache, app):
|
|||
assert len(resp.context['cells']) == 1
|
||||
assert 'Example Site' in resp
|
||||
|
||||
page.extra_variables = {'var1': 'cards|objects:"card_model_1"|getlist:"id"|get:42'}
|
||||
page.extra_variables = {'var1': '{{ cards|objects:"card_model_1"|getlist:"id"|get:42|default:"" }}'}
|
||||
page.save()
|
||||
resp = app.get(page.get_online_url())
|
||||
assert len(resp.context['cells']) == 1
|
||||
|
|
Loading…
Reference in New Issue