diff options
| author | Akihiro Motoki <amotoki@gmail.com> | 2017-05-15 07:55:41 +0000 |
|---|---|---|
| committer | Dean Troyer <dtroyer@gmail.com> | 2019-06-22 14:53:28 -0500 |
| commit | 1af3056e301807e4474cde49eef3e00931ab08c2 (patch) | |
| tree | 4da6432ad7d2eaa7b37bf87f9cf439fad418035f /openstackclient/volume/v1/volume_snapshot.py | |
| parent | 1a21f02bc7507120f3a4fe2af12ba7a27b002b44 (diff) | |
| download | python-openstackclient-1af3056e301807e4474cde49eef3e00931ab08c2.tar.gz | |
Use cliff formattable columns in volume v1 commands
Partial-Bug: #1687955
Partially implement blueprint osc-formattable-columns
Change-Id: Ib4c5798171e32a8ddc08a37ee1d416e366a71d76
Diffstat (limited to 'openstackclient/volume/v1/volume_snapshot.py')
| -rw-r--r-- | openstackclient/volume/v1/volume_snapshot.py | 54 |
1 files changed, 38 insertions, 16 deletions
diff --git a/openstackclient/volume/v1/volume_snapshot.py b/openstackclient/volume/v1/volume_snapshot.py index 3e83da5a..50f81771 100644 --- a/openstackclient/volume/v1/volume_snapshot.py +++ b/openstackclient/volume/v1/volume_snapshot.py @@ -16,8 +16,11 @@ """Volume v1 Snapshot action implementations""" import copy +import functools import logging +from cliff import columns as cliff_columns +from osc_lib.cli import format_columns from osc_lib.cli import parseractions from osc_lib.command import command from osc_lib import exceptions @@ -30,6 +33,33 @@ from openstackclient.i18n import _ LOG = logging.getLogger(__name__) +class VolumeIdColumn(cliff_columns.FormattableColumn): + """Formattable column for volume ID column. + + Unlike the parent FormattableColumn class, the initializer of the + class takes volume_cache as the second argument. + osc_lib.utils.get_item_properties instantiate cliff FormattableColumn + object with a single parameter "column value", so you need to pass + a partially initialized class like + ``functools.partial(VolumeIdColumn, volume_cache)``. + """ + + def __init__(self, value, volume_cache=None): + super(VolumeIdColumn, self).__init__(value) + self._volume_cache = volume_cache or {} + + def human_readable(self): + """Return a volume name if available + + :rtype: either the volume ID or name + """ + volume_id = self._value + volume = volume_id + if volume_id in self._volume_cache.keys(): + volume = self._volume_cache[volume_id].display_name + return volume + + class CreateVolumeSnapshot(command.ShowOne): _description = _("Create new volume snapshot") @@ -76,7 +106,8 @@ class CreateVolumeSnapshot(command.ShowOne): ) snapshot._info.update( - {'properties': utils.format_dict(snapshot._info.pop('metadata'))} + {'properties': + format_columns.DictColumn(snapshot._info.pop('metadata'))} ) return zip(*sorted(six.iteritems(snapshot._info))) @@ -160,18 +191,6 @@ class ListVolumeSnapshot(command.Lister): def take_action(self, parsed_args): volume_client = self.app.client_manager.volume - def _format_volume_id(volume_id): - """Return a volume name if available - - :param volume_id: a volume ID - :rtype: either the volume ID or name - """ - - volume = volume_id - if volume_id in volume_cache.keys(): - volume = volume_cache[volume_id].display_name - return volume - if parsed_args.long: columns = ['ID', 'Display Name', 'Display Description', 'Status', 'Size', 'Created At', 'Volume ID', 'Metadata'] @@ -195,6 +214,8 @@ class ListVolumeSnapshot(command.Lister): except Exception: # Just forget it if there's any trouble pass + VolumeIdColumnWithCache = functools.partial(VolumeIdColumn, + volume_cache=volume_cache) volume_id = None if parsed_args.volume: @@ -213,8 +234,8 @@ class ListVolumeSnapshot(command.Lister): return (column_headers, (utils.get_item_properties( s, columns, - formatters={'Metadata': utils.format_dict, - 'Volume ID': _format_volume_id}, + formatters={'Metadata': format_columns.DictColumn, + 'Volume ID': VolumeIdColumnWithCache}, ) for s in data)) @@ -317,7 +338,8 @@ class ShowVolumeSnapshot(command.ShowOne): parsed_args.snapshot) snapshot._info.update( - {'properties': utils.format_dict(snapshot._info.pop('metadata'))} + {'properties': + format_columns.DictColumn(snapshot._info.pop('metadata'))} ) return zip(*sorted(six.iteritems(snapshot._info))) |
