def make_collection_response(name, elements, parent_href=None): """Return a collection to client""" if getattr(g, 'filters', None): g.unused_args.difference_update( (arg for arg in request.args.iterkeys() if ':' in arg)) elements = apply_filters(elements, g.filters, g.collection_schema) # NOTE(imelnikov): size is number of element matching given # criteria -- calculated after filtering size = len(elements) if 'sortby' in g.unused_args: g.unused_args.discard('sortby') elements = apply_sortby(g.sortby, elements) elements = _apply_pagination(elements) result = { u'collection': { u'name': name, u'size': size }, name: elements } if parent_href is not None: result[u'collection'][u'parent-href'] = parent_href return make_json_response(result)
def test_missing_is_ok(self): param = [ { 'size': 30 }, { 'name': 'test', 'size': 30 }, ] expected = [ { 'name': 'test', 'size': 30 }, ] result = apply_filters(param, self.filters, self.schema) self.assertEquals(expected, result)
def test_not_exists_at_all(self): param = [ { 'size': 30 }, { 'name': 'test', 'size': 30 }, ] filters = { 'name': {'exists': False} } expected = [ { 'size': 30 }, ] result = apply_filters(param, filters, self.schema) self.assertEquals(expected, result)
def test_simple(self): param = [ { 'name': 'test1', 'size': 30 }, { 'name': 'test', 'size': 30 }, { 'name': 'test', 'size': 33 }, { 'name': 'test', 'size': 0 } ] expected = [ { 'name': 'test', 'size': 30 }, ] result = apply_filters(param, self.filters, self.schema) self.assertEquals(expected, result)
def test_apply_in(self): param = [ { 'name': 'test' }, { 'name': 'foo' }, { 'name': 'bar' } ] expected = [ { 'name': 'test' }, { 'name': 'bar' } ] filters = { 'name': { 'in': ['test', 'bar'] } } result = apply_filters(param, filters, self.schema) self.assertEquals(expected, result)
def test_not_exists_at_all(self): param = [ { 'size': 30 }, { 'name': 'test', 'size': 30 }, ] filters = {'name': {'exists': False}} expected = [ { 'size': 30 }, ] result = apply_filters(param, filters, self.schema) self.assertEquals(expected, result)
def make_collection_response(name, elements, parent_href=None): """Return a collection to client""" if getattr(g, 'filters', None): g.unused_args.difference_update( (arg for arg in request.args.iterkeys() if ':' in arg)) elements = apply_filters(elements, g.filters, g.collection_schema) # NOTE(imelnikov): size is number of element matching given # criteria -- calculated after filtering size = len(elements) if 'sortby' in g.unused_args: g.unused_args.discard('sortby') elements = apply_sortby(g.sortby, elements) elements = _apply_pagination(elements) result = {u'collection': {u'name': name, u'size': size}, name: elements} if parent_href is not None: result[u'collection'][u'parent-href'] = parent_href return make_json_response(result)
def test_simple(self): param = [{ 'name': 'test1', 'size': 30 }, { 'name': 'test', 'size': 30 }, { 'name': 'test', 'size': 33 }, { 'name': 'test', 'size': 0 }] expected = [ { 'name': 'test', 'size': 30 }, ] result = apply_filters(param, self.filters, self.schema) self.assertEquals(expected, result)
def test_empty_result(self): self.assertEquals([], apply_filters([], self.filters, self.schema))
def test_apply_in(self): param = [{'name': 'test'}, {'name': 'foo'}, {'name': 'bar'}] expected = [{'name': 'test'}, {'name': 'bar'}] filters = {'name': {'in': ['test', 'bar']}} result = apply_filters(param, filters, self.schema) self.assertEquals(expected, result)