def test_add_list_categories(self): self._create_categories() res = api.categories_list() self.assertEqual(2, len(res)) for cat in res: self.assertIsNotNone(cat.id) self.assertTrue(cat.name.startswith('cat'))
def test_add_list_categories(self): self._create_categories() res = api.categories_list() self.assertEqual(2, len(res)) for cat in res: self.assertTrue(cat.id is not None) self.assertTrue(cat.name.startswith('cat'))
def list_categories(self, req): """List all categories List all categories with pagination and sorting Acceptable filter params: :param sort_keys: an array of fields used to sort the list :param sort_dir: the direction of the sort ('asc' or 'desc') :param limit: the number of categories to list :param marker: the ID of the last item in the previous page """ def _get_category_filters(req): query_params = {} valid_query_params = ['sort_keys', 'sort_dir', 'limit', 'marker'] for key, value in req.GET.items(): if key not in valid_query_params: raise exc.HTTPBadRequest( _('Bad value passed to filter. ' 'Got {key}, expected:{valid}').format( key=key, valid=', '.join(valid_query_params))) if key == 'sort_keys': available_sort_keys = [ 'name', 'created', 'updated', 'package_count', 'id' ] value = [v.strip() for v in value.split(',')] for sort_key in value: if sort_key not in available_sort_keys: raise exc.HTTPBadRequest(explanation=_( 'Invalid sort key: {sort_key}. ' 'Must be one of the following: ' '{available}').format( sort_key=sort_key, available=', '.join(available_sort_keys))) if key == 'sort_dir': if value not in ['asc', 'desc']: msg = _('Invalid sort direction: {0}').format(value) raise exc.HTTPBadRequest(explanation=msg) query_params[key] = value return query_params policy.check("get_category", req.context) filters = _get_category_filters(req) marker = filters.get('marker') limit = self._validate_limit(filters.get('limit')) result = {} categories = db_api.categories_list(filters, limit=limit, marker=marker) if len(categories) == limit: result['next_marker'] = categories[-1].id result['categories'] = [category.to_dict() for category in categories] return result
def list_categories(self, req): """List all categories List all categories with pagination and sorting Acceptable filter params: :param sort_keys: an array of fields used to sort the list :param sort_dir: the direction of the sort ('asc' or 'desc') :param limit: the number of categories to list :param marker: the ID of the last item in the previous page """ def _get_category_filters(req): query_params = {} valid_query_params = ['sort_keys', 'sort_dir', 'limit', 'marker'] for key, value in req.GET.items(): if key not in valid_query_params: raise exc.HTTPBadRequest( _('Bad value passed to filter. ' 'Got {key}, exected:{valid}').format( key=key, valid=', '.join(valid_query_params))) if key == 'sort_keys': available_sort_keys = ['name', 'created', 'updated', 'package_count', 'id'] value = [v.strip() for v in value.split(',')] for sort_key in value: if sort_key not in available_sort_keys: raise exc.HTTPBadRequest( explanation=_('Invalid sort key: {sort_key}. ' 'Must be one of the following: ' '{available}').format( sort_key=sort_key, available=', '.join(available_sort_keys))) if key == 'sort_dir': if value not in ['asc', 'desc']: msg = _('Invalid sort direction: {0}').format(value) raise exc.HTTPBadRequest(explanation=msg) query_params[key] = value return query_params policy.check("get_category", req.context) filters = _get_category_filters(req) marker = filters.get('marker') limit = self._validate_limit(filters.get('limit')) result = {} categories = db_api.categories_list(filters, limit=limit, marker=marker) if len(categories) == limit: result['next_marker'] = categories[-1].id result['categories'] = [category.to_dict() for category in categories] return result
def test_category_paginate(self): """Paginate through a list of categories using limit and marker""" category_names = ['cat1', 'cat2', 'cat3', 'cat4', 'cat5'] categories = [] for name in category_names: categories.append(api.category_add(name)) uuids = [c.id for c in categories] page = api.categories_list(limit=2) self.assertEqual(category_names[:2], [c.name for c in page]) last = page[-1].id page = api.categories_list(limit=3, marker=last) self.assertEqual(category_names[2:5], [c.name for c in page]) page = api.categories_list(marker=uuids[-1]) self.assertEqual([], page) category_names.reverse() page = api.categories_list({'sort_dir': 'desc'}) self.assertEqual(category_names, [c.name for c in page])
def show_categories(self, req): policy.check("get_category", req.context) categories = db_api.categories_list() return {'categories': [category.name for category in categories]}
def list_categories(self, req): policy.check("get_category", req.context) categories = db_api.categories_list() return {'categories': [category.to_dict() for category in categories]}