diff --git a/src/config/api-server/tests/test_crud_basic.py b/src/config/api-server/tests/test_crud_basic.py index d0168f90770..31a46e40018 100644 --- a/src/config/api-server/tests/test_crud_basic.py +++ b/src/config/api-server/tests/test_crud_basic.py @@ -994,6 +994,19 @@ def test_list_bulk_collection(self): for ret in ret_list['virtual-machine-interfaces']] self.assertThat(set(vmi_uuids), Equals(set(ret_uuids))) + logger.info("Querying VNs by obj_uuids and children fields.") + flexmock(self._api_server).should_call('_list_collection').once() + ret_objs = self._vnc_lib.resource_list('virtual-network', + detail=True, + obj_uuids=vn_uuids, + fields=['routing_instances']) + ret_ri_uuids = [] + for vn_obj in ret_objs: + ri_children = getattr(vn_obj, 'routing_instances', + 'RI children absent') + self.assertNotEqual(ri_children, 'RI children absent') + ret_ri_uuids.extend([ri['uuid'] for ri in ri_children]) + self.assertThat(set(ri_uuids), Equals(set(ret_ri_uuids))) # end test_list_bulk_collection # end class TestVncCfgApiServer diff --git a/src/config/api-server/vnc_cfg_api_server.py b/src/config/api-server/vnc_cfg_api_server.py index 45779c78dea..e4327ee0ff6 100644 --- a/src/config/api-server/vnc_cfg_api_server.py +++ b/src/config/api-server/vnc_cfg_api_server.py @@ -768,8 +768,13 @@ def list_bulk_collection_http_post(self): except KeyError: is_detail = False + req_fields = bottle.request.json.get('fields', []) + if req_fields: + req_fields = req_fields.split(',') + return self._list_collection(obj_type, parent_uuids, back_ref_uuids, - obj_uuids, is_count, is_detail) + obj_uuids, is_count, is_detail, + req_fields) # end list_bulk_collection_http_post # Private Methods @@ -1202,7 +1207,8 @@ def _create_singleton_entry(self, singleton_obj): def _list_collection(self, obj_type, parent_uuids=None, back_ref_uuids=None, obj_uuids=None, - is_count=False, is_detail=False): + is_count=False, is_detail=False, + req_fields=None): method_name = obj_type.replace('-', '_') # e.g. virtual_network (ok, result) = self._db_conn.dbe_list(obj_type, @@ -1249,8 +1255,8 @@ def _list_collection(self, obj_type, parent_uuids=None, obj_class = self._resource_classes[obj_type] obj_fields = list(obj_class.prop_fields) + \ list(obj_class.ref_fields) - if 'fields' in bottle.request.query: - obj_fields.extend(bottle.request.query.fields.split(',')) + if req_fields: + obj_fields.extend(req_fields) (ok, result) = self._db_conn.dbe_read_multi( obj_type, obj_ids_list, obj_fields)