Merge "Add new 'all' visibility filter for listing images"
This commit is contained in:
commit
a772017d3e
@ -831,7 +831,8 @@ class RequestDeserializer(wsgi.JSONRequestDeserializer):
|
|||||||
def _get_filters(self, filters):
|
def _get_filters(self, filters):
|
||||||
visibility = filters.get('visibility')
|
visibility = filters.get('visibility')
|
||||||
if visibility:
|
if visibility:
|
||||||
if visibility not in ['community', 'public', 'private', 'shared']:
|
if visibility not in ['community', 'public', 'private', 'shared',
|
||||||
|
'all']:
|
||||||
msg = _('Invalid visibility value: %s') % visibility
|
msg = _('Invalid visibility value: %s') % visibility
|
||||||
raise webob.exc.HTTPBadRequest(explanation=msg)
|
raise webob.exc.HTTPBadRequest(explanation=msg)
|
||||||
changes_since = filters.get('changes-since')
|
changes_since = filters.get('changes-since')
|
||||||
|
@ -658,8 +658,9 @@ def image_get_all(context, filters=None, marker=None, limit=None,
|
|||||||
visibility)
|
visibility)
|
||||||
if visibility is not None:
|
if visibility is not None:
|
||||||
# with a visibility, we always and only include images with that
|
# with a visibility, we always and only include images with that
|
||||||
# visibility
|
# visibility except when using the 'all' visibility
|
||||||
query = query.filter(models.Image.visibility == visibility)
|
if visibility != 'all':
|
||||||
|
query = query.filter(models.Image.visibility == visibility)
|
||||||
elif context.owner is None:
|
elif context.owner is None:
|
||||||
# without either a visibility or an owner, we never include
|
# without either a visibility or an owner, we never include
|
||||||
# 'community' images
|
# 'community' images
|
||||||
|
@ -2204,6 +2204,11 @@ class VisibilityTests(object):
|
|||||||
for i in images:
|
for i in images:
|
||||||
self.assertEqual('community', i['visibility'])
|
self.assertEqual('community', i['visibility'])
|
||||||
|
|
||||||
|
def test_unknown_admin_visibility_all(self):
|
||||||
|
images = self.db_api.image_get_all(self.admin_none_context,
|
||||||
|
filters={'visibility': 'all'})
|
||||||
|
self.assertEqual(16, len(images))
|
||||||
|
|
||||||
def test_known_admin_sees_all_but_others_community_images(self):
|
def test_known_admin_sees_all_but_others_community_images(self):
|
||||||
images = self.db_api.image_get_all(self.admin_context)
|
images = self.db_api.image_get_all(self.admin_context)
|
||||||
self.assertEqual(13, len(images))
|
self.assertEqual(13, len(images))
|
||||||
@ -2262,6 +2267,11 @@ class VisibilityTests(object):
|
|||||||
for i in images:
|
for i in images:
|
||||||
self.assertEqual('community', i['visibility'])
|
self.assertEqual('community', i['visibility'])
|
||||||
|
|
||||||
|
def test_known_admin_visibility_all(self):
|
||||||
|
images = self.db_api.image_get_all(self.admin_context,
|
||||||
|
filters={'visibility': 'all'})
|
||||||
|
self.assertEqual(16, len(images))
|
||||||
|
|
||||||
def test_what_unknown_user_sees(self):
|
def test_what_unknown_user_sees(self):
|
||||||
images = self.db_api.image_get_all(self.none_context)
|
images = self.db_api.image_get_all(self.none_context)
|
||||||
self.assertEqual(4, len(images))
|
self.assertEqual(4, len(images))
|
||||||
@ -2308,6 +2318,11 @@ class VisibilityTests(object):
|
|||||||
for i in images:
|
for i in images:
|
||||||
self.assertEqual('community', i['visibility'])
|
self.assertEqual('community', i['visibility'])
|
||||||
|
|
||||||
|
def test_unknown_user_visibility_all(self):
|
||||||
|
images = self.db_api.image_get_all(self.none_context,
|
||||||
|
filters={'visibility': 'all'})
|
||||||
|
self.assertEqual(8, len(images))
|
||||||
|
|
||||||
def test_what_tenant1_sees(self):
|
def test_what_tenant1_sees(self):
|
||||||
images = self.db_api.image_get_all(self.tenant1_context)
|
images = self.db_api.image_get_all(self.tenant1_context)
|
||||||
self.assertEqual(7, len(images))
|
self.assertEqual(7, len(images))
|
||||||
@ -2366,6 +2381,11 @@ class VisibilityTests(object):
|
|||||||
for i in images:
|
for i in images:
|
||||||
self.assertEqual('community', i['visibility'])
|
self.assertEqual('community', i['visibility'])
|
||||||
|
|
||||||
|
def test_tenant1_visibility_all(self):
|
||||||
|
images = self.db_api.image_get_all(self.tenant1_context,
|
||||||
|
filters={'visibility': 'all'})
|
||||||
|
self.assertEqual(10, len(images))
|
||||||
|
|
||||||
def _setup_is_public_red_herring(self):
|
def _setup_is_public_red_herring(self):
|
||||||
values = {
|
values = {
|
||||||
'name': 'Red Herring',
|
'name': 'Red Herring',
|
||||||
|
@ -263,6 +263,12 @@ class TestImageRepo(test_utils.BaseTestCase):
|
|||||||
image_ids = set([i.image_id for i in images])
|
image_ids = set([i.image_id for i in images])
|
||||||
self.assertEqual(set([UUID2]), image_ids)
|
self.assertEqual(set([UUID2]), image_ids)
|
||||||
|
|
||||||
|
def test_list_all_images(self):
|
||||||
|
filters = {'visibility': 'all'}
|
||||||
|
images = self.image_repo.list(filters=filters)
|
||||||
|
image_ids = set([i.image_id for i in images])
|
||||||
|
self.assertEqual(set([UUID1, UUID2, UUID3]), image_ids)
|
||||||
|
|
||||||
def test_list_with_checksum_filter_single_image(self):
|
def test_list_with_checksum_filter_single_image(self):
|
||||||
filters = {'checksum': CHECKSUM}
|
filters = {'checksum': CHECKSUM}
|
||||||
images = self.image_repo.list(filters=filters)
|
images = self.image_repo.list(filters=filters)
|
||||||
|
@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
features:
|
||||||
|
- |
|
||||||
|
You can now list all images that are available to you. Use the 'all'
|
||||||
|
visibility option.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user