Convert data from raw clients to Munch objects

Change-Id: Ib6fcb0b18e550c75248eaf00f4a305f5882e6cdf
Signed-off-by: Rosario Di Somma <rosario.disomma@dreamhost.com>
This commit is contained in:
Rosario Di Somma 2017-06-09 13:49:05 +00:00
parent 40c4f3ca15
commit 75ce9ad924
3 changed files with 22 additions and 7 deletions

View File

@ -568,3 +568,17 @@ def warlock_to_dict(obj):
if isinstance(value, NON_CALLABLES) and not key.startswith('_'): if isinstance(value, NON_CALLABLES) and not key.startswith('_'):
obj_dict[key] = value obj_dict[key] = value
return obj_dict return obj_dict
def get_and_munchify(key, data):
"""Get the value associated to key and convert it.
The value will be converted in a Munch object or a list of Munch objects
based on the type
"""
result = data.get(key, [])
if isinstance(result, list):
return obj_list_to_dict(result)
elif isinstance(result, dict):
return obj_to_dict(result)
return result

View File

@ -1661,7 +1661,7 @@ class OpenStackCloud(
""" """
def _list(data): def _list(data):
volumes.extend(data.get('volumes', [])) volumes.extend(meta.get_and_munchify('volumes', data))
endpoint = None endpoint = None
for l in data.get('volumes_links', []): for l in data.get('volumes_links', []):
if 'rel' in l and 'next' == l['rel']: if 'rel' in l and 'next' == l['rel']:
@ -1689,7 +1689,7 @@ class OpenStackCloud(
params=dict(is_public='None'), params=dict(is_public='None'),
error_message='Error fetching volume_type list') error_message='Error fetching volume_type list')
return self._normalize_volume_types( return self._normalize_volume_types(
data.get('volume_types', [])) meta.get_and_munchify('volume_types', data))
@_utils.cache_on_arguments() @_utils.cache_on_arguments()
def list_availability_zone_names(self, unavailable=False): def list_availability_zone_names(self, unavailable=False):
@ -3844,7 +3844,7 @@ class OpenStackCloud(
'/volumes', '/volumes',
json=dict(payload), json=dict(payload),
error_message='Error in creating volume') error_message='Error in creating volume')
volume = data.get('volume', {}) volume = meta.get_and_munchify('volume', data)
self.list_volumes.invalidate(self) self.list_volumes.invalidate(self)
if volume['status'] == 'error': if volume['status'] == 'error':
@ -4054,7 +4054,7 @@ class OpenStackCloud(
"Error in attaching volume %s" % volume['id'] "Error in attaching volume %s" % volume['id']
) )
return self._normalize_volume_attachment( return self._normalize_volume_attachment(
data.get('volumeAttachment', {})) meta.get_and_munchify('volumeAttachment', data))
def _get_volume_kwargs(self, kwargs): def _get_volume_kwargs(self, kwargs):
name = kwargs.pop('name', kwargs.pop('display_name', None)) name = kwargs.pop('name', kwargs.pop('display_name', None))
@ -4233,7 +4233,7 @@ class OpenStackCloud(
endpoint, endpoint,
params=search_opts, params=search_opts,
error_message="Error getting a list of snapshots") error_message="Error getting a list of snapshots")
return data.get('snapshots', []) return meta.get_and_munchify('snapshots', data)
def list_volume_backups(self, detailed=True, search_opts=None): def list_volume_backups(self, detailed=True, search_opts=None):
""" """
@ -4256,7 +4256,7 @@ class OpenStackCloud(
data = self._volume_client.get( data = self._volume_client.get(
endpoint, params=search_opts, endpoint, params=search_opts,
error_message="Error getting a list of backups") error_message="Error getting a list of backups")
return data.get('backups', []) return meta.get_and_munchify('backups', data)
def delete_volume_backup(self, name_or_id=None, force=False, wait=False, def delete_volume_backup(self, name_or_id=None, force=False, wait=False,
timeout=None): timeout=None):

View File

@ -18,6 +18,7 @@ from ironicclient import exceptions as ironic_exceptions
from novaclient import exceptions as nova_exceptions from novaclient import exceptions as nova_exceptions
from shade.exc import * # noqa from shade.exc import * # noqa
from shade import meta
from shade import openstackcloud from shade import openstackcloud
from shade import _tasks from shade import _tasks
from shade import _utils from shade import _utils
@ -1992,7 +1993,7 @@ class OperatorCloud(openstackcloud.OpenStackCloud):
error_message="Unable to get volume type access" error_message="Unable to get volume type access"
" {name}".format(name=name_or_id)) " {name}".format(name=name_or_id))
return self._normalize_volume_type_accesses( return self._normalize_volume_type_accesses(
data.get('volume_type_access', [])) meta.get_and_munchify('volume_type_access', data))
def add_volume_type_access(self, name_or_id, project_id): def add_volume_type_access(self, name_or_id, project_id):
"""Grant access on a volume_type to a project. """Grant access on a volume_type to a project.