wcs: add new operators (#79828)
gitea/publik-django-templatetags/pipeline/head This commit looks good
Details
gitea/publik-django-templatetags/pipeline/head This commit looks good
Details
This commit is contained in:
parent
9d4cf4f53b
commit
d232a663e1
|
@ -175,6 +175,23 @@ class LazyCardDefObjectsManager:
|
||||||
def apply_gte(self):
|
def apply_gte(self):
|
||||||
return self.apply_op('gte')
|
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'):
|
def filter_by_internal_id(self, internal_id, op='eq'):
|
||||||
qs = self._clone()
|
qs = self._clone()
|
||||||
if internal_id:
|
if internal_id:
|
||||||
|
|
|
@ -208,6 +208,46 @@ def gte(queryset):
|
||||||
return None
|
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
|
@register.filter
|
||||||
def order_by(queryset, attribute):
|
def order_by(queryset, attribute):
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -347,6 +347,13 @@ OPERATORS = [
|
||||||
('less_than_or_equal', 'lte'),
|
('less_than_or_equal', 'lte'),
|
||||||
('greater_than', 'gt'),
|
('greater_than', 'gt'),
|
||||||
('greater_than_or_equal', 'gte'),
|
('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)
|
t.render(context)
|
||||||
assert mock_send.call_args_list == []
|
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()
|
mock_send.reset_mock()
|
||||||
t = Template('{{ foobar|filter_by:"foo"|list }}')
|
t = Template('{{ foobar|filter_by:"foo"|list }}')
|
||||||
t.render(context)
|
t.render(context)
|
||||||
|
|
Loading…
Reference in New Issue