data: inject computed variables in context for cell condition (#66632)
gitea-wip/combo/pipeline/head There was a failure building this commit Details
gitea/combo/pipeline/head Something is wrong with the build of this commit Details

This commit is contained in:
Lauréline Guérin 2022-06-27 16:44:25 +02:00
parent f4ecedaf35
commit f97022233e
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
2 changed files with 33 additions and 8 deletions

View File

@ -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):

View File

@ -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