def test_limiter_offset_medium(self): # Test offset key works with a medium sized number. req = webob.Request.blank('/?offset=10') self.assertEqual(common.limited(self.tiny, req), []) self.assertEqual(common.limited(self.small, req), self.small[10:]) self.assertEqual(common.limited(self.medium, req), self.medium[10:]) self.assertEqual(common.limited(self.large, req), self.large[10:1010])
def test_limiter_nothing(self): # Test request with no offset or limit. req = webob.Request.blank('/') self.assertEqual(common.limited(self.tiny, req), self.tiny) self.assertEqual(common.limited(self.small, req), self.small) self.assertEqual(common.limited(self.medium, req), self.medium) self.assertEqual(common.limited(self.large, req), self.large[:1000])
def test_limiter_offset_zero(self): # Test offset key works with 0. req = webob.Request.blank('/?offset=0') self.assertEqual(common.limited(self.tiny, req), self.tiny) self.assertEqual(common.limited(self.small, req), self.small) self.assertEqual(common.limited(self.medium, req), self.medium) self.assertEqual(common.limited(self.large, req), self.large[:1000])
def test_limiter_limit_zero(self): # Test limit of zero. req = webob.Request.blank('/?limit=0') self.assertEqual(common.limited(self.tiny, req), self.tiny) self.assertEqual(common.limited(self.small, req), self.small) self.assertEqual(common.limited(self.medium, req), self.medium) self.assertEqual(common.limited(self.large, req), self.large[:1000])
def test_limiter_offset_over_max(self): # Test offset key works with a number over 1000 (max_limit). req = webob.Request.blank("/?offset=1001") self.assertEqual(0, len(common.limited(self.tiny, req))) self.assertEqual(0, len(common.limited(self.small, req))) self.assertEqual(0, len(common.limited(self.medium, req))) self.assertEqual(common.limited(self.large, req), self.large[1001:2001])
def test_limiter_limit_zero(self): """ Test limit of zero. """ req = Request.blank("/?limit=0") self.assertEqual(common.limited(self.tiny, req), self.tiny) self.assertEqual(common.limited(self.small, req), self.small) self.assertEqual(common.limited(self.medium, req), self.medium) self.assertEqual(common.limited(self.large, req), self.large[:1000])
def test_limiter_offset_zero(self): """ Test offset key works with 0. """ req = Request.blank("/?offset=0") self.assertEqual(common.limited(self.tiny, req), self.tiny) self.assertEqual(common.limited(self.small, req), self.small) self.assertEqual(common.limited(self.medium, req), self.medium) self.assertEqual(common.limited(self.large, req), self.large[:1000])
def test_limiter_nothing(self): """ Test request with no offset or limit """ req = Request.blank("/") self.assertEqual(common.limited(self.tiny, req), self.tiny) self.assertEqual(common.limited(self.small, req), self.small) self.assertEqual(common.limited(self.medium, req), self.medium) self.assertEqual(common.limited(self.large, req), self.large[:1000])
def test_limiter_limit_over_max(self): # Test limit of 3000. req = webob.Request.blank("/?limit=3000") self.assertEqual(common.limited(self.tiny, req), self.tiny) self.assertEqual(common.limited(self.small, req), self.small) self.assertEqual(common.limited(self.medium, req), self.medium) self.assertEqual(common.limited(self.large, req), self.large[:1000])
def test_limiter_limit_over_max(self): """ Test limit of 3000. """ req = Request.blank('/?limit=3000') self.assertEqual(common.limited(self.tiny, req), self.tiny) self.assertEqual(common.limited(self.small, req), self.small) self.assertEqual(common.limited(self.medium, req), self.medium) self.assertEqual(common.limited(self.large, req), self.large[:1000])
def test_limiter_limit_medium(self): # Test limit of 10. req = webob.Request.blank('/?limit=10') self.assertEqual(common.limited(self.tiny, req), self.tiny) self.assertEqual(common.limited(self.small, req), self.small) self.assertEqual(common.limited(self.medium, req), self.medium[:10]) self.assertEqual(common.limited(self.large, req), self.large[:10])
def test_limiter_limit_medium(self): """ Test limit of 10. """ req = Request.blank("/?limit=10") self.assertEqual(common.limited(self.tiny, req), self.tiny) self.assertEqual(common.limited(self.small, req), self.small) self.assertEqual(common.limited(self.medium, req), self.medium[:10]) self.assertEqual(common.limited(self.large, req), self.large[:10])
def test_limiter_offset_over_max(self): """ Test offset key works with a number over 1000 (max_limit). """ req = Request.blank('/?offset=1001') self.assertEqual(common.limited(self.tiny, req), []) self.assertEqual(common.limited(self.small, req), []) self.assertEqual(common.limited(self.medium, req), []) self.assertEqual( common.limited(self.large, req), self.large[1001:2001])
def test_limiter_offset_bad(self): """ Test offset key works with a BAD offset. """ req = Request.blank(u'/?offset=\u0020aa') self.assertEqual(limited(self.tiny, req), self.tiny) self.assertEqual(limited(self.small, req), self.small) self.assertEqual(limited(self.medium, req), self.medium) self.assertEqual(limited(self.large, req), self.large[:1000])
def test_limiter_custom_max_limit(self): """ Test a max_limit other than 1000. """ items = range(2000) req = Request.blank("/?offset=1&limit=3") self.assertEqual(common.limited(items, req, max_limit=2000), items[1:4]) req = Request.blank("/?offset=3&limit=0") self.assertEqual(common.limited(items, req, max_limit=2000), items[3:]) req = Request.blank("/?offset=3&limit=2500") self.assertEqual(common.limited(items, req, max_limit=2000), items[3:]) req = Request.blank("/?offset=3000&limit=10") self.assertEqual(common.limited(items, req, max_limit=2000), [])
def test_limiter_limit_and_offset(self): """ Test request with both limit and offset. """ items = range(2000) req = Request.blank("/?offset=1&limit=3") self.assertEqual(common.limited(items, req), items[1:4]) req = Request.blank("/?offset=3&limit=0") self.assertEqual(common.limited(items, req), items[3:1003]) req = Request.blank("/?offset=3&limit=1500") self.assertEqual(common.limited(items, req), items[3:1003]) req = Request.blank("/?offset=3000&limit=10") self.assertEqual(common.limited(items, req), [])
def test_limiter_limit_and_offset(self): # Test request with both limit and offset. items = range(2000) req = webob.Request.blank('/?offset=1&limit=3') self.assertEqual(common.limited(items, req), items[1:4]) req = webob.Request.blank('/?offset=3&limit=0') self.assertEqual(common.limited(items, req), items[3:1003]) req = webob.Request.blank('/?offset=3&limit=1500') self.assertEqual(common.limited(items, req), items[3:1003]) req = webob.Request.blank('/?offset=3000&limit=10') self.assertEqual(common.limited(items, req), [])
def test_limiter_custom_max_limit(self): # Test a max_limit other than 1000. max_limit = 2000 self.flags(osapi_max_limit=max_limit) items = range(max_limit) req = webob.Request.blank("/?offset=1&limit=3") self.assertEqual(common.limited(items, req), items[1:4]) req = webob.Request.blank("/?offset=3&limit=0") self.assertEqual(common.limited(items, req), items[3:]) req = webob.Request.blank("/?offset=3&limit=2500") self.assertEqual(common.limited(items, req), items[3:]) req = webob.Request.blank("/?offset=3000&limit=10") self.assertEqual(0, len(common.limited(items, req)))
def test_limiter_custom_max_limit(self): # Test a max_limit other than 1000. items = range(2000) req = webob.Request.blank('/?offset=1&limit=3') self.assertEqual( common.limited(items, req, max_limit=2000), items[1:4]) req = webob.Request.blank('/?offset=3&limit=0') self.assertEqual( common.limited(items, req, max_limit=2000), items[3:]) req = webob.Request.blank('/?offset=3&limit=2500') self.assertEqual( common.limited(items, req, max_limit=2000), items[3:]) req = webob.Request.blank('/?offset=3000&limit=10') self.assertEqual(common.limited(items, req, max_limit=2000), [])
def _get_cells(self, ctxt, req, detail=False): """Return all cells.""" # Ask the CellsManager for the most recent data items = self.cells_rpcapi.get_cell_info_for_neighbors(ctxt) items = common.limited(items, req) items = [_scrub_cell(item, detail=detail) for item in items] return dict(cells=items)
def index(self, req): """Return all users in brief""" authorize(req.environ['nova.context']) users = self.manager.get_users() users = common.limited(users, req) users = [_translate_keys(user) for user in users] return dict(users=users)
def _items(self, req, entity_maker): """Returns a list of snapshots, transformed through entity_maker.""" context = req.environ["nova.context"] snapshots = self.volume_api.get_all_snapshots(context) limited_list = common.limited(snapshots, req) res = [entity_maker(context, snapshot) for snapshot in limited_list] return {"snapshots": res}
def _items(self, req, server_id, entity_maker): """Returns a list of VIFs, transformed through entity_maker.""" context = req.environ['nova.context'] vifs = self.network_api.get_vifs_by_instance(context, server_id) limited_list = common.limited(vifs, req) res = [entity_maker(context, vif) for vif in limited_list] return {'virtual_interfaces': res}
def index(self, req): """Return all zones in brief""" # Ask the ZoneManager in the Scheduler for most recent data, # or fall-back to the database ... items = api.get_zone_list(req.environ['nova.context']) items = common.limited(items, req) items = [_scrub_zone(item) for item in items] return dict(zones=items)
def _items(self, req, entity_maker): """Returns a list of volumes, transformed through entity_maker.""" context = req.environ['nova.context'] volumes = self.volume_api.get_all(context) limited_list = common.limited(volumes, req) res = [entity_maker(context, vol) for vol in limited_list] return {'volumes': res}
def _items(self, req, entity_maker): """Returns a list of volumes, transformed through entity_maker.""" context = req.environ["nova.context"] context.can(vol_policies.BASE_POLICY_NAME) volumes = self.volume_api.get_all(context) limited_list = common.limited(volumes, req) res = [entity_maker(context, vol) for vol in limited_list] return {"volumes": res}
def _items(self, req, server_id, entity_maker): """Returns a list of VIFs, transformed through entity_maker.""" context = req.environ["nova.context"] instance = common.get_instance(self.compute_api, context, server_id, want_objects=True) vifs = self.network_api.get_vifs_by_instance(context, instance) limited_list = common.limited(vifs, req) res = [entity_maker(context, vif) for vif in limited_list] return {"virtual_interfaces": res}
def _items(self, req, entity_maker): """Returns a list of servers for a given user. entity_maker - either _translate_detail_keys or _translate_keys """ instance_list = self.compute_api.get_all(req.environ['nova.context']) limited_list = common.limited(instance_list, req) res = [entity_maker(inst)['server'] for inst in limited_list] return dict(servers=res)
def _items(self, req, entity_maker): """Returns a list of snapshots, transformed through entity_maker.""" context = req.environ['nova.context'] context.can(vol_policies.BASE_POLICY_NAME) snapshots = self.volume_api.get_all_snapshots(context) limited_list = common.limited(snapshots, req) res = [entity_maker(context, snapshot) for snapshot in limited_list] return {'snapshots': res}
def detail(self, req): """Return a detailed index listing of images available to the request. :param req: `wsgi.Request` object. """ context = req.environ['nova.context'] images = self._image_service.detail(context) images = common.limited(images, req) builder = self.get_builder(req).build return dict(images=[builder(image, detail=True) for image in images])
def _items(self, req, server_id, entity_maker): """Returns a list of attachments, transformed through entity_maker.""" context = req.environ['nova.context'] authorize(context) instance = common.get_instance(self.compute_api, context, server_id, want_objects=True) bdms = objects.BlockDeviceMappingList.get_by_instance_uuid( context, instance.uuid) limited_list = common.limited(bdms, req) results = [] for bdm in limited_list: if bdm.volume_id: results.append( entity_maker(bdm.volume_id, bdm.instance_uuid, bdm.device_name)) return {'volumeAttachments': results}
def index(self, req): """Returns a list of security groups.""" context = _authorize_context(req) search_opts = {} search_opts.update(req.GET) project_id = context.project_id raw_groups = self.security_group_api.list(context, project=project_id, search_opts=search_opts) limited_list = common.limited(raw_groups, req) result = [ self._format_security_group(context, group) for group in limited_list ] return { 'security_groups': list(sorted(result, key=lambda k: (k['tenant_id'], k['name']))) }
def _items(self, req, server_id, entity_maker): """Returns a list of attachments, transformed through entity_maker.""" context = req.environ['nova.context'] authorize(context) try: instance = self.compute_api.get(context, server_id) except exception.NotFound as e: raise exc.HTTPNotFound(explanation=e.format_message()) bdms = objects.BlockDeviceMappingList.get_by_instance_uuid( context, instance['uuid']) limited_list = common.limited(bdms, req) results = [] for bdm in limited_list: if bdm.volume_id: results.append( entity_maker(bdm.volume_id, bdm.instance_uuid, bdm.device_name)) return {'volumeAttachments': results}
def index(self, req, server_id): """Returns the list of volume attachments for a given instance.""" context = req.environ['nova.context'] instance = common.get_instance(self.compute_api, context, server_id) context.can(va_policies.POLICY_ROOT % 'index', target={'project_id': instance.project_id}) bdms = objects.BlockDeviceMappingList.get_by_instance_uuid( context, instance.uuid) limited_list = common.limited(bdms, req) results = [] show_tag = api_version_request.is_supported(req, '2.70') show_delete_on_termination = api_version_request.is_supported( req, '2.79') for bdm in limited_list: if bdm.volume_id: va = _translate_attachment_detail_view( bdm, show_tag=show_tag, show_delete_on_termination=show_delete_on_termination) results.append(va) return {'volumeAttachments': results}
def index(self, req): """Returns a list of security groups.""" context = req.environ['nova.context'] context.can(sg_policies.POLICY_NAME % 'get', target={'project_id': context.project_id}) search_opts = {} search_opts.update(req.GET) project_id = context.project_id raw_groups = security_group_api.list(context, project=project_id, search_opts=search_opts) limited_list = common.limited(raw_groups, req) result = [ self._format_security_group(context, group) for group in limited_list ] return { 'security_groups': list(sorted(result, key=lambda k: (k['tenant_id'], k['name']))) }
def index(self, req): """Return all users in brief""" users = self.manager.get_users() users = common.limited(users, req) users = [_translate_keys(user) for user in users] return dict(users=users)
def index(self, req): """Return all public images in brief""" items = self._service.index(req.environ['nova.context']) items = common.limited(items, req) items = [_filter_keys(item, ('id', 'name')) for item in items] return dict(images=items)
def _limit_items(self, items, req): return common.limited(items, req)