wcs: add with_custom_view filter (#49406)
gitea-wip/combo/pipeline/head Build started... Details
gitea/combo/pipeline/head Build started... Details

This commit is contained in:
Lauréline Guérin 2020-12-17 10:23:17 +01:00
parent 4840516b90
commit 6e89336233
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
3 changed files with 33 additions and 1 deletions

View File

@ -33,9 +33,10 @@ def get_default_wcs_service_key():
class LazyCardDefObjectsManager(object):
def __init__(self, service_key, card_id, filters=None, user=Ellipsis):
def __init__(self, service_key, card_id, custom_view_id=None, filters=None, user=Ellipsis):
self._service_key = service_key
self._card_id = card_id
self._custom_view_id = custom_view_id
self._filters = filters or {}
self._user = user
@ -46,6 +47,7 @@ class LazyCardDefObjectsManager(object):
return LazyCardDefObjectsManager(
service_key=self._service_key,
card_id=self._card_id,
custom_view_id=self._custom_view_id,
filters=self._filters,
user=self._user)
@ -58,6 +60,11 @@ class LazyCardDefObjectsManager(object):
def count(self):
return len(self)
def with_custom_view(self, custom_view_id):
qs = self._clone()
qs._custom_view_id = custom_view_id
return qs
def filter_by(self, attribute):
qs = self._clone()
qs.pending_attr = attribute
@ -91,6 +98,8 @@ class LazyCardDefObjectsManager(object):
return []
api_url = 'api/cards/%s/list' % self._card_id
if self._custom_view_id:
api_url += '/%s' % self._custom_view_id
if self._filters:
query = urlencode(self._filters)
api_url += '?%s' % query

View File

@ -25,6 +25,11 @@ def objects(cards, slug):
return getattr(cards, slug).objects
@register.filter
def with_custom_view(queryset, custom_view_id):
return queryset.with_custom_view(custom_view_id)
@register.filter
def access_control(queryset, user):
return queryset.access_control(user)

View File

@ -105,6 +105,24 @@ def test_objects(mock_send, settings, context, nocache):
assert mock_send.call_args_list[0][0][0].url.startswith('http://127.0.0.3:8999/api/cards/bar/list?')
@mock.patch('combo.apps.wcs.models.requests.send', side_effect=mocked_requests_send)
def test_with_custom_view(mock_send, context, nocache):
t = Template('{% load wcs %}{{ cards|objects:"foo"|with_custom_view:"foobar"|list }}')
t.render(context)
assert mock_send.call_args_list[0][0][0].url.startswith('http://127.0.0.1:8999/api/cards/foo/list/foobar?') # primary service
t = Template('{% load wcs %}{{ cards|objects:"default:foo"|with_custom_view:"foobar"|list }}')
t.render(context)
assert mock_send.call_args_list[0][0][0].url.startswith('http://127.0.0.1:8999/api/cards/foo/list/foobar?')
mock_send.reset_mock()
t = Template('{% load wcs %}{{ cards|objects:"other:foo"|with_custom_view:"foobar"|list }}')
t.render(context)
assert mock_send.call_args_list[0][0][0].url.startswith('http://127.0.0.2:8999/api/cards/foo/list/foobar?')
mock_send.reset_mock()
t = Template('{% load wcs %}{{ cards|objects:"unknown:foo"|with_custom_view:"foobar"|list }}')
t.render(context)
assert mock_send.call_args_list == [] # unknown, not evaluated
@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
def test_errors(mock_send, context, nocache):
t = Template('{% load wcs %}{{ cards|objects:"foo"|list }}')