wcs: add new operators (#79828)
gitea/publik-django-templatetags/pipeline/head This commit looks good Details

This commit is contained in:
Lauréline Guérin 2023-07-20 09:04:54 +02:00
parent 9d4cf4f53b
commit d232a663e1
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
3 changed files with 76 additions and 0 deletions

View File

@ -175,6 +175,23 @@ class LazyCardDefObjectsManager:
def apply_gte(self):
return self.apply_op('gte')
def apply_in(self):
return self.apply_op('in')
def apply_not_in(self):
return self.apply_op('not_in')
def apply_between(self):
return self.apply_op('between')
def apply_absent(self):
self.apply_op('absent')
return self.apply_filter_value('on')
def apply_existing(self):
self.apply_op('existing')
return self.apply_filter_value('on')
def filter_by_internal_id(self, internal_id, op='eq'):
qs = self._clone()
if internal_id:

View File

@ -208,6 +208,46 @@ def gte(queryset):
return None
@register.filter(name='in')
def _in(queryset):
try:
return queryset.apply_in()
except AttributeError:
return None
@register.filter()
def not_in(queryset):
try:
return queryset.apply_not_in()
except AttributeError:
return None
@register.filter()
def between(queryset):
try:
return queryset.apply_between()
except AttributeError:
return None
@register.filter()
def absent(queryset):
try:
return queryset.apply_absent()
except AttributeError:
return None
@register.filter()
def existing(queryset):
try:
return queryset.apply_existing()
except AttributeError:
return None
@register.filter
def order_by(queryset, attribute):
try:

View File

@ -347,6 +347,13 @@ OPERATORS = [
('less_than_or_equal', 'lte'),
('greater_than', 'gt'),
('greater_than_or_equal', 'gte'),
('in', 'in'),
('not_in', 'not_in'),
('between', 'between'),
]
OPERATORS_WITHOUT_VALUE = [
('absent', 'absent'),
('existing', 'existing'),
]
@ -393,6 +400,18 @@ def test_filter(mock_send, context, nocache):
t.render(context)
assert mock_send.call_args_list == []
for filter_op, api_op in OPERATORS_WITHOUT_VALUE:
mock_send.reset_mock()
t = Template('{{ cards|objects:"foo"|filter_by:"foo"|%s|list }}' % filter_op)
t.render(context)
assert 'filter-foo=on&' 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)