summaryrefslogtreecommitdiff
path: root/openstackclient/network/v2/router.py
diff options
context:
space:
mode:
authorAkihiro Motoki <amotoki@gmail.com>2017-05-03 14:19:27 +0000
committerDean Troyer <dtroyer@gmail.com>2019-05-09 21:51:57 -0500
commitc44f26eb7e41c28bb13ef9bd31c8ddda9e638862 (patch)
tree062fc4fea3e465ac7da63516ee77489e1acbc45a /openstackclient/network/v2/router.py
parent6385d64237c9973dd4c7dd53efb6664ea2c719da (diff)
downloadpython-openstackclient-c44f26eb7e41c28bb13ef9bd31c8ddda9e638862.tar.gz
Use cliff formattable columns in network commands
Use cliff formattable columns not to convert complex fields into a string when a machine readable format like JSON or YAML is requested. Partial-Bug: #1687955 Partially implement blueprint osc-formattable-columns Change-Id: I9878f327e39f56852cc0fb6e4eee9105b7141da9
Diffstat (limited to 'openstackclient/network/v2/router.py')
-rw-r--r--openstackclient/network/v2/router.py47
1 files changed, 26 insertions, 21 deletions
diff --git a/openstackclient/network/v2/router.py b/openstackclient/network/v2/router.py
index 2ec3e2f0..fd6a24fd 100644
--- a/openstackclient/network/v2/router.py
+++ b/openstackclient/network/v2/router.py
@@ -18,6 +18,8 @@ import copy
import json
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
@@ -32,33 +34,36 @@ from openstackclient.network.v2 import _tag
LOG = logging.getLogger(__name__)
-def _format_admin_state(state):
- return 'UP' if state else 'DOWN'
+class AdminStateColumn(cliff_columns.FormattableColumn):
+ def human_readable(self):
+ return 'UP' if self._value else 'DOWN'
-def _format_router_info(info):
- try:
- return json.dumps(info)
- except (TypeError, KeyError):
- return ''
+class RouterInfoColumn(cliff_columns.FormattableColumn):
+ def human_readable(self):
+ try:
+ return json.dumps(self._value)
+ except (TypeError, KeyError):
+ return ''
-def _format_routes(routes):
- # Map the route keys to match --route option.
- for route in routes:
- if 'nexthop' in route:
- route['gateway'] = route.pop('nexthop')
- return utils.format_list_of_dicts(routes)
+class RoutesColumn(cliff_columns.FormattableColumn):
+ def human_readable(self):
+ # Map the route keys to match --route option.
+ for route in self._value:
+ if 'nexthop' in route:
+ route['gateway'] = route.pop('nexthop')
+ return utils.format_list_of_dicts(self._value)
_formatters = {
- 'admin_state_up': _format_admin_state,
- 'is_admin_state_up': _format_admin_state,
- 'external_gateway_info': _format_router_info,
- 'availability_zones': utils.format_list,
- 'availability_zone_hints': utils.format_list,
- 'routes': _format_routes,
- 'tags': utils.format_list,
+ 'admin_state_up': AdminStateColumn,
+ 'is_admin_state_up': AdminStateColumn,
+ 'external_gateway_info': RouterInfoColumn,
+ 'availability_zones': format_columns.ListColumn,
+ 'availability_zone_hints': format_columns.ListColumn,
+ 'routes': RoutesColumn,
+ 'tags': format_columns.ListColumn,
}
@@ -720,7 +725,7 @@ class ShowRouter(command.ShowOne):
setattr(obj, 'interfaces_info', interfaces_info)
display_columns, columns = _get_columns(obj)
- _formatters['interfaces_info'] = _format_router_info
+ _formatters['interfaces_info'] = RouterInfoColumn
data = utils.get_item_properties(obj, columns, formatters=_formatters)
return (display_columns, data)