Skip to content

Commit

Permalink
config: pick any requested fields from post body in bulk list oper
Browse files Browse the repository at this point in the history
Extra fields (beyond props+refs) are specified in POST body in
bulk list instead of query string.

Change-Id: I7184babc86cfec8b005aee05b3e487b08c5a3f62
Closes-Bug: #1473261
  • Loading branch information
Hampapur Ajay committed Jul 10, 2015
1 parent 8a7a373 commit badda06
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 4 deletions.
13 changes: 13 additions & 0 deletions src/config/api-server/tests/test_crud_basic.py
Expand Up @@ -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
Expand Down
14 changes: 10 additions & 4 deletions src/config/api-server/vnc_cfg_api_server.py
Expand Up @@ -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
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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)

Expand Down

0 comments on commit badda06

Please sign in to comment.