wcs: add with_custom_view filter (#49406)
This commit is contained in:
parent
4840516b90
commit
6e89336233
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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 }}')
|
||||
|
|
Loading…
Reference in New Issue