wcs: fix templatefilters on AttributeError (#71382)
This commit is contained in:
parent
77b277fc63
commit
f0a435dd8a
|
@ -51,7 +51,10 @@ def getlist(mapping, key):
|
|||
|
||||
@register.filter(name='list')
|
||||
def as_list(obj):
|
||||
try:
|
||||
return list(obj)
|
||||
except TypeError:
|
||||
return []
|
||||
|
||||
|
||||
@register.filter
|
||||
|
|
|
@ -26,116 +26,183 @@ def objects(cards, slug):
|
|||
|
||||
@register.filter
|
||||
def with_custom_view(queryset, custom_view_id):
|
||||
try:
|
||||
return queryset.with_custom_view(custom_view_id)
|
||||
except AttributeError:
|
||||
return None
|
||||
|
||||
|
||||
@register.filter
|
||||
def get_full(queryset):
|
||||
try:
|
||||
return queryset.get_full()
|
||||
except AttributeError:
|
||||
return None
|
||||
|
||||
|
||||
@register.filter
|
||||
def include_fields(queryset):
|
||||
try:
|
||||
return queryset.include_fields()
|
||||
except AttributeError:
|
||||
return None
|
||||
|
||||
|
||||
@register.filter
|
||||
def include_evolution(queryset):
|
||||
try:
|
||||
return queryset.include_evolution()
|
||||
except AttributeError:
|
||||
return None
|
||||
|
||||
|
||||
@register.filter
|
||||
def include_roles(queryset):
|
||||
try:
|
||||
return queryset.include_roles()
|
||||
except AttributeError:
|
||||
return None
|
||||
|
||||
|
||||
@register.filter
|
||||
def include_submission(queryset):
|
||||
try:
|
||||
return queryset.include_submission()
|
||||
except AttributeError:
|
||||
return None
|
||||
|
||||
|
||||
@register.filter
|
||||
def include_workflow(queryset):
|
||||
try:
|
||||
return queryset.include_workflow()
|
||||
except AttributeError:
|
||||
return None
|
||||
|
||||
|
||||
@register.filter
|
||||
def include_workflow_data(queryset):
|
||||
try:
|
||||
return queryset.include_workflow_data()
|
||||
except AttributeError:
|
||||
return None
|
||||
|
||||
|
||||
@register.filter
|
||||
def access_control(queryset, user):
|
||||
try:
|
||||
return queryset.access_control(user)
|
||||
except AttributeError:
|
||||
return None
|
||||
|
||||
|
||||
@register.filter
|
||||
def count(queryset):
|
||||
if queryset is None:
|
||||
return 0
|
||||
try:
|
||||
return queryset.count
|
||||
except AttributeError:
|
||||
return 0
|
||||
|
||||
|
||||
@register.filter
|
||||
def filter_by(queryset, attribute):
|
||||
try:
|
||||
return queryset.filter_by(attribute)
|
||||
except AttributeError:
|
||||
return None
|
||||
|
||||
|
||||
@register.filter
|
||||
def filter_value(queryset, value):
|
||||
try:
|
||||
return queryset.apply_filter_value(value)
|
||||
except AttributeError:
|
||||
return None
|
||||
|
||||
|
||||
@register.filter
|
||||
def filter_by_internal_id(queryset, internal_id):
|
||||
try:
|
||||
return queryset.filter_by_internal_id(internal_id)
|
||||
except AttributeError:
|
||||
return None
|
||||
|
||||
|
||||
@register.filter
|
||||
def filter_by_number(queryset, number):
|
||||
try:
|
||||
return queryset.filter_by_number(number)
|
||||
except AttributeError:
|
||||
return None
|
||||
|
||||
|
||||
@register.filter
|
||||
def filter_by_user(queryset, user):
|
||||
try:
|
||||
return queryset.filter_by_user(user)
|
||||
except AttributeError:
|
||||
return None
|
||||
|
||||
|
||||
@register.filter
|
||||
def filter_by_status(queryset, status):
|
||||
try:
|
||||
return queryset.filter_by_status(status)
|
||||
except AttributeError:
|
||||
return None
|
||||
|
||||
|
||||
@register.filter(name='equal')
|
||||
def eq(queryset):
|
||||
try:
|
||||
return queryset.apply_eq()
|
||||
except AttributeError:
|
||||
return None
|
||||
|
||||
|
||||
@register.filter(name='not_equal')
|
||||
def ne(queryset):
|
||||
try:
|
||||
return queryset.apply_ne()
|
||||
except AttributeError:
|
||||
return None
|
||||
|
||||
|
||||
@register.filter(name='less_than')
|
||||
def lt(queryset):
|
||||
try:
|
||||
return queryset.apply_lt()
|
||||
except AttributeError:
|
||||
return None
|
||||
|
||||
|
||||
@register.filter(name='less_than_or_equal')
|
||||
def lte(queryset):
|
||||
try:
|
||||
return queryset.apply_lte()
|
||||
except AttributeError:
|
||||
return None
|
||||
|
||||
|
||||
@register.filter(name='greater_than')
|
||||
def gt(queryset):
|
||||
try:
|
||||
return queryset.apply_gt()
|
||||
except AttributeError:
|
||||
return None
|
||||
|
||||
|
||||
@register.filter(name='greater_than_or_equal')
|
||||
def gte(queryset):
|
||||
try:
|
||||
return queryset.apply_gte()
|
||||
except AttributeError:
|
||||
return None
|
||||
|
||||
|
||||
@register.filter
|
||||
def order_by(queryset, attribute):
|
||||
try:
|
||||
return queryset.order_by(attribute)
|
||||
except AttributeError:
|
||||
return None
|
||||
|
|
|
@ -134,6 +134,12 @@ def test_with_custom_view(mock_send, context, nocache):
|
|||
t.render(context)
|
||||
assert mock_send.call_args_list == [] # unknown, not evaluated
|
||||
|
||||
mock_send.reset_mock()
|
||||
context['foobar'] = None
|
||||
t = Template('{{ foobar|with_custom_view:"foobar"|list }}')
|
||||
t.render(context)
|
||||
assert mock_send.call_args_list == []
|
||||
|
||||
|
||||
@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
|
||||
def test_full(mock_send, context, nocache):
|
||||
|
@ -145,6 +151,12 @@ def test_full(mock_send, context, nocache):
|
|||
t.render(context)
|
||||
assert 'full=on&' in mock_send.call_args_list[0][0][0].url
|
||||
|
||||
mock_send.reset_mock()
|
||||
context['foobar'] = None
|
||||
t = Template('{{ foobar|get_full|list }}')
|
||||
t.render(context)
|
||||
assert mock_send.call_args_list == []
|
||||
|
||||
|
||||
@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
|
||||
def test_include_filters(mock_send, context, nocache):
|
||||
|
@ -159,6 +171,12 @@ def test_include_filters(mock_send, context, nocache):
|
|||
t.render(context)
|
||||
assert '%s=on&' % param in mock_send.call_args_list[0][0][0].url
|
||||
|
||||
mock_send.reset_mock()
|
||||
context['foobar'] = None
|
||||
t = Template('{{ foobar|%s|list }}' % _filter)
|
||||
t.render(context)
|
||||
assert mock_send.call_args_list == []
|
||||
|
||||
|
||||
@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
|
||||
def test_errors(mock_send, context, nocache):
|
||||
|
@ -243,6 +261,12 @@ def test_access_control(mock_send, context, nocache):
|
|||
assert 'NameID' not in mock_send.call_args_list[0][0][0].url
|
||||
assert 'email=foo%40example.net&' in mock_send.call_args_list[0][0][0].url
|
||||
|
||||
mock_send.reset_mock()
|
||||
context['foobar'] = None
|
||||
t = Template('{{ foobar|access_control:request.user|list }}')
|
||||
t.render(context)
|
||||
assert mock_send.call_args_list == []
|
||||
|
||||
|
||||
@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
|
||||
def test_count(mock_send, context, nocache):
|
||||
|
@ -294,6 +318,7 @@ def test_filter(mock_send, context, nocache):
|
|||
t.render(context)
|
||||
assert 'filter-foo=&' in mock_send.call_args_list[0][0][0].url
|
||||
|
||||
context['foobar'] = None
|
||||
for filter_op, api_op in OPERATORS:
|
||||
mock_send.reset_mock()
|
||||
t = Template('{{ cards|objects:"foo"|filter_by:"foo"|%s|filter_value:"bar"|list }}' % filter_op)
|
||||
|
@ -301,6 +326,21 @@ def test_filter(mock_send, context, nocache):
|
|||
assert 'filter-foo=bar&' in mock_send.call_args_list[0][0][0].url
|
||||
assert 'filter-foo-operator=%s&' % api_op in mock_send.call_args_list[0][0][0].url
|
||||
|
||||
mock_send.reset_mock()
|
||||
t = Template('{{ foobar|%s }}' % filter_op)
|
||||
t.render(context)
|
||||
assert mock_send.call_args_list == []
|
||||
|
||||
mock_send.reset_mock()
|
||||
t = Template('{{ foobar|filter_by:"foo"|list }}')
|
||||
t.render(context)
|
||||
assert mock_send.call_args_list == []
|
||||
|
||||
mock_send.reset_mock()
|
||||
t = Template('{{ foobar|filter_value:"foo"|list }}')
|
||||
t.render(context)
|
||||
assert mock_send.call_args_list == []
|
||||
|
||||
|
||||
@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
|
||||
def test_filter_by_internal_id(mock_send, context, nocache):
|
||||
|
@ -333,6 +373,12 @@ def test_filter_by_internal_id(mock_send, context, nocache):
|
|||
assert 'filter-internal-id=42&' in mock_send.call_args_list[0][0][0].url
|
||||
assert 'filter-internal-id-operator=%s&' % api_op in mock_send.call_args_list[0][0][0].url
|
||||
|
||||
mock_send.reset_mock()
|
||||
context['foobar'] = None
|
||||
t = Template('{{ foobar|filter_by_internal_id:"42"|list }}')
|
||||
t.render(context)
|
||||
assert mock_send.call_args_list == []
|
||||
|
||||
|
||||
@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
|
||||
def test_filter_by_number(mock_send, context, nocache):
|
||||
|
@ -364,6 +410,12 @@ def test_filter_by_number(mock_send, context, nocache):
|
|||
# not for this filter
|
||||
assert 'filter-number-operator=%s&' % api_op not in mock_send.call_args_list[0][0][0].url
|
||||
|
||||
mock_send.reset_mock()
|
||||
context['foobar'] = None
|
||||
t = Template('{{ foobar|filter_by_number:"42"|list }}')
|
||||
t.render(context)
|
||||
assert mock_send.call_args_list == []
|
||||
|
||||
|
||||
@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
|
||||
def test_filter_by_user(mock_send, context, nocache):
|
||||
|
@ -399,6 +451,12 @@ def test_filter_by_user(mock_send, context, nocache):
|
|||
# not for this filter
|
||||
assert 'filter-user-uuid-operator=%s&' % api_op not in mock_send.call_args_list[0][0][0].url
|
||||
|
||||
mock_send.reset_mock()
|
||||
context['foobar'] = None
|
||||
t = Template('{{ foobar|filter_by_user:request.user|list }}')
|
||||
t.render(context)
|
||||
assert mock_send.call_args_list == []
|
||||
|
||||
|
||||
@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
|
||||
def test_filter_by_status(mock_send, context, nocache):
|
||||
|
@ -436,6 +494,12 @@ def test_filter_by_status(mock_send, context, nocache):
|
|||
else:
|
||||
assert 'filter-operator=%s&' % api_op not in mock_send.call_args_list[0][0][0].url
|
||||
|
||||
mock_send.reset_mock()
|
||||
context['foobar'] = None
|
||||
t = Template('{{ foobar|filter_by_status:"foobar"|list }}')
|
||||
t.render(context)
|
||||
assert mock_send.call_args_list == []
|
||||
|
||||
|
||||
@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
|
||||
def test_getlist(mock_send, context, nocache):
|
||||
|
@ -489,3 +553,9 @@ def test_order_by(mock_send, context, nocache):
|
|||
t = Template('{% for v in cards|objects:"foo"|order_by:""|order_by:"bar" %}{{ v }},{% endfor %}')
|
||||
t.render(context)
|
||||
assert 'order_by=bar' in mock_send.call_args_list[0][0][0].url
|
||||
|
||||
mock_send.reset_mock()
|
||||
context['foobar'] = None
|
||||
t = Template('{{ foobar|order_by:"foo" }}')
|
||||
t.render(context)
|
||||
assert mock_send.call_args_list == []
|
||||
|
|
Loading…
Reference in New Issue