summaryrefslogtreecommitdiff
path: root/openstackclient/volume/v1/volume_snapshot.py
diff options
context:
space:
mode:
authorAkihiro Motoki <amotoki@gmail.com>2017-05-15 07:55:41 +0000
committerDean Troyer <dtroyer@gmail.com>2019-06-22 14:53:28 -0500
commit1af3056e301807e4474cde49eef3e00931ab08c2 (patch)
tree4da6432ad7d2eaa7b37bf87f9cf439fad418035f /openstackclient/volume/v1/volume_snapshot.py
parent1a21f02bc7507120f3a4fe2af12ba7a27b002b44 (diff)
downloadpython-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.py54
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)))