|
18 | 18 | import json |
19 | 19 | import logging |
20 | 20 |
|
| 21 | +from cliff import columns as cliff_columns |
| 22 | +from osc_lib.cli import format_columns |
21 | 23 | from osc_lib.cli import parseractions |
22 | 24 | from osc_lib.command import command |
23 | 25 | from osc_lib import exceptions |
|
32 | 34 | LOG = logging.getLogger(__name__) |
33 | 35 |
|
34 | 36 |
|
35 | | -def _format_admin_state(state): |
36 | | - return 'UP' if state else 'DOWN' |
| 37 | +class AdminStateColumn(cliff_columns.FormattableColumn): |
| 38 | + def human_readable(self): |
| 39 | + return 'UP' if self._value else 'DOWN' |
37 | 40 |
|
38 | 41 |
|
39 | | -def _format_router_info(info): |
40 | | - try: |
41 | | - return json.dumps(info) |
42 | | - except (TypeError, KeyError): |
43 | | - return '' |
| 42 | +class RouterInfoColumn(cliff_columns.FormattableColumn): |
| 43 | + def human_readable(self): |
| 44 | + try: |
| 45 | + return json.dumps(self._value) |
| 46 | + except (TypeError, KeyError): |
| 47 | + return '' |
44 | 48 |
|
45 | 49 |
|
46 | | -def _format_routes(routes): |
47 | | - # Map the route keys to match --route option. |
48 | | - for route in routes: |
49 | | - if 'nexthop' in route: |
50 | | - route['gateway'] = route.pop('nexthop') |
51 | | - return utils.format_list_of_dicts(routes) |
| 50 | +class RoutesColumn(cliff_columns.FormattableColumn): |
| 51 | + def human_readable(self): |
| 52 | + # Map the route keys to match --route option. |
| 53 | + for route in self._value: |
| 54 | + if 'nexthop' in route: |
| 55 | + route['gateway'] = route.pop('nexthop') |
| 56 | + return utils.format_list_of_dicts(self._value) |
52 | 57 |
|
53 | 58 |
|
54 | 59 | _formatters = { |
55 | | - 'admin_state_up': _format_admin_state, |
56 | | - 'is_admin_state_up': _format_admin_state, |
57 | | - 'external_gateway_info': _format_router_info, |
58 | | - 'availability_zones': utils.format_list, |
59 | | - 'availability_zone_hints': utils.format_list, |
60 | | - 'routes': _format_routes, |
61 | | - 'tags': utils.format_list, |
| 60 | + 'admin_state_up': AdminStateColumn, |
| 61 | + 'is_admin_state_up': AdminStateColumn, |
| 62 | + 'external_gateway_info': RouterInfoColumn, |
| 63 | + 'availability_zones': format_columns.ListColumn, |
| 64 | + 'availability_zone_hints': format_columns.ListColumn, |
| 65 | + 'routes': RoutesColumn, |
| 66 | + 'tags': format_columns.ListColumn, |
62 | 67 | } |
63 | 68 |
|
64 | 69 |
|
@@ -720,7 +725,7 @@ def take_action(self, parsed_args): |
720 | 725 |
|
721 | 726 | setattr(obj, 'interfaces_info', interfaces_info) |
722 | 727 | display_columns, columns = _get_columns(obj) |
723 | | - _formatters['interfaces_info'] = _format_router_info |
| 728 | + _formatters['interfaces_info'] = RouterInfoColumn |
724 | 729 | data = utils.get_item_properties(obj, columns, formatters=_formatters) |
725 | 730 |
|
726 | 731 | return (display_columns, data) |
|
0 commit comments