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):
|
||||
visibility = filters.get('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
|
||||
raise webob.exc.HTTPBadRequest(explanation=msg)
|
||||
changes_since = filters.get('changes-since')
|
||||
|
|
|
@ -658,7 +658,8 @@ def image_get_all(context, filters=None, marker=None, limit=None,
|
|||
visibility)
|
||||
if visibility is not None:
|
||||
# with a visibility, we always and only include images with that
|
||||
# visibility
|
||||
# visibility except when using the 'all' visibility
|
||||
if visibility != 'all':
|
||||
query = query.filter(models.Image.visibility == visibility)
|
||||
elif context.owner is None:
|
||||
# without either a visibility or an owner, we never include
|
||||
|
|
|
@ -2204,6 +2204,11 @@ class VisibilityTests(object):
|
|||
for i in images:
|
||||
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):
|
||||
images = self.db_api.image_get_all(self.admin_context)
|
||||
self.assertEqual(13, len(images))
|
||||
|
@ -2262,6 +2267,11 @@ class VisibilityTests(object):
|
|||
for i in images:
|
||||
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):
|
||||
images = self.db_api.image_get_all(self.none_context)
|
||||
self.assertEqual(4, len(images))
|
||||
|
@ -2308,6 +2318,11 @@ class VisibilityTests(object):
|
|||
for i in images:
|
||||
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):
|
||||
images = self.db_api.image_get_all(self.tenant1_context)
|
||||
self.assertEqual(7, len(images))
|
||||
|
@ -2366,6 +2381,11 @@ class VisibilityTests(object):
|
|||
for i in images:
|
||||
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):
|
||||
values = {
|
||||
'name': 'Red Herring',
|
||||
|
|
|
@ -263,6 +263,12 @@ class TestImageRepo(test_utils.BaseTestCase):
|
|||
image_ids = set([i.image_id for i in images])
|
||||
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):
|
||||
filters = {'checksum': CHECKSUM}
|
||||
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