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
|
condition = self.condition
|
||||||
if not condition:
|
if not condition:
|
||||||
return True
|
return True
|
||||||
context = RequestContext(request)
|
context = self.page.get_extra_variables(request, {})
|
||||||
if condition in self.page.extra_variables:
|
context = RequestContext(request, context)
|
||||||
condition = self.page.extra_variables[condition].strip('{ }')
|
|
||||||
try:
|
try:
|
||||||
return Template('{%% if %s %%}OK{%% endif %%}' % condition).render(context) == 'OK'
|
return Template('{%% if %s %%}OK{%% endif %%}' % condition).render(context) == 'OK'
|
||||||
except (TemplateSyntaxError, VariableDoesNotExist):
|
except (TemplateSyntaxError, VariableDoesNotExist):
|
||||||
|
|
|
@ -430,7 +430,7 @@ def get_data_from_url(url):
|
||||||
return WCS_CARDS_CUSTOM_VIEW_DATA
|
return WCS_CARDS_CUSTOM_VIEW_DATA
|
||||||
m_list = re.match(r'/api/cards/([a-z0-9_]+)/list', url)
|
m_list = re.match(r'/api/cards/([a-z0-9_]+)/list', url)
|
||||||
if m_list:
|
if m_list:
|
||||||
return WCS_CARDS_DATA[m_list.group(1)]
|
return WCS_CARDS_DATA.get(m_list.group(1)) or []
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
||||||
|
@ -4249,18 +4249,44 @@ def test_cell_condition(mock_send, nocache, app):
|
||||||
resp = app.get(page.get_online_url())
|
resp = app.get(page.get_online_url())
|
||||||
assert len(resp.context.get('cells') or []) == 0
|
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()
|
page.save()
|
||||||
cell.condition = 'var1'
|
cell.condition = 'var1'
|
||||||
cell.save()
|
cell.save()
|
||||||
resp = app.get(page.get_online_url())
|
resp = app.get(page.get_online_url())
|
||||||
assert len(resp.context['cells']) == 1
|
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()
|
page.save()
|
||||||
resp = app.get(page.get_online_url())
|
resp = app.get(page.get_online_url())
|
||||||
assert len(resp.context.get('cells') or []) == 0
|
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)
|
@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
|
||||||
def test_link_list_cell_condition(mock_send, nocache, app):
|
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 len(resp.context['cells']) == 1
|
||||||
assert 'Example Site' not in resp
|
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()
|
page.save()
|
||||||
link_cell.condition = 'var1'
|
link_cell.condition = 'var1'
|
||||||
link_cell.save()
|
link_cell.save()
|
||||||
|
@ -4294,7 +4320,7 @@ def test_link_list_cell_condition(mock_send, nocache, app):
|
||||||
assert len(resp.context['cells']) == 1
|
assert len(resp.context['cells']) == 1
|
||||||
assert 'Example Site' in resp
|
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()
|
page.save()
|
||||||
resp = app.get(page.get_online_url())
|
resp = app.get(page.get_online_url())
|
||||||
assert len(resp.context['cells']) == 1
|
assert len(resp.context['cells']) == 1
|
||||||
|
|
Loading…
Reference in New Issue