osc: Use FormattableColumn for formatter

... because usage of legacy format function was deprecated 8 years ago
and was recently removed from osc-lib[1].

[1] 0e7dada02b825b2f97ac3eb68544bdd438a3a099

Change-Id: I62521846b4aaf8036cd83e3f5a38d9eed6c520a7
This commit is contained in:
Takashi Kajinami
2025-05-07 14:29:14 +09:00
parent 28464d9b99
commit 85713447b1
7 changed files with 76 additions and 25 deletions

View File

@@ -18,7 +18,7 @@ import logging
from osc_lib.command import command
from osc_lib import utils
from heatclient.common import utils as heat_utils
from heatclient.osc.v1 import common
class BuildInfo(command.ShowOne):
@@ -37,8 +37,8 @@ class BuildInfo(command.ShowOne):
result = heat_client.build_info.build_info()
formatters = {
'api': heat_utils.json_formatter,
'engine': heat_utils.json_formatter,
'api': common.JsonColumn,
'engine': common.JsonColumn,
}
columns = sorted(list(result.keys()))
return columns, utils.get_dict_properties(result, columns,

View File

@@ -0,0 +1,42 @@
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
from cliff import columns
from heatclient.common import utils as heat_utils
class LinkColumn(columns.FormattableColumn):
def human_readable(self):
return heat_utils.link_formatter(self._value)
class JsonColumn(columns.FormattableColumn):
def human_readable(self):
return heat_utils.json_formatter(self._value)
class YamlColumn(columns.FormattableColumn):
def human_readable(self):
return heat_utils.yaml_formatter(self._value)
class TextWrapColumn(columns.FormattableColumn):
def human_readable(self):
return heat_utils.text_wrap_formatter(self._value)
class NewlineListColumn(columns.FormattableColumn):
def human_readable(self):
return heat_utils.newline_list_formatter(self._value)

View File

@@ -23,6 +23,7 @@ from heatclient._i18n import _
from heatclient.common import event_utils
from heatclient.common import utils as heat_utils
from heatclient import exc
from heatclient.osc.v1 import common
class ShowEvent(command.ShowOne):
@@ -69,8 +70,8 @@ class ShowEvent(command.ShowOne):
raise exc.CommandError(str(ex))
formatters = {
'links': heat_utils.link_formatter,
'resource_properties': heat_utils.json_formatter
'links': common.LinkColumn,
'resource_properties': common.JsonColumn
}
columns = []

View File

@@ -31,6 +31,7 @@ from heatclient.common import http
from heatclient.common import template_utils
from heatclient.common import utils as heat_utils
from heatclient import exc as heat_exc
from heatclient.osc.v1 import common
class CreateStack(command.ShowOne):
@@ -180,13 +181,13 @@ class CreateStack(command.ShowOne):
stack = client.stacks.preview(**fields)
formatters = {
'description': heat_utils.text_wrap_formatter,
'template_description': heat_utils.text_wrap_formatter,
'stack_status_reason': heat_utils.text_wrap_formatter,
'parameters': heat_utils.json_formatter,
'outputs': heat_utils.json_formatter,
'resources': heat_utils.json_formatter,
'links': heat_utils.link_formatter,
'description': common.TextWrapColumn,
'template_description': common.TextWrapColumn,
'stack_status_reason': common.TextWrapColumn,
'parameters': common.JsonColumn,
'outputs': common.JsonColumn,
'resources': common.JsonColumn,
'links': common.LinkColumn,
}
columns = []
@@ -386,7 +387,7 @@ class UpdateStack(command.ShowOne):
'resource_identity']
columns = sorted(changes.get("resource_changes", {}).keys())
data = [heat_utils.json_formatter(changes["resource_changes"][key])
data = [common.JsonColumn(changes["resource_changes"][key])
for key in columns]
return columns, data
@@ -478,9 +479,9 @@ def _show_stack(heat_client, stack_id, format='', short=False,
formatters = {}
complex_formatter = None
if format in 'table':
complex_formatter = heat_utils.yaml_formatter
complex_formatter = common.YamlColumn
elif format in ('shell', 'value', 'html'):
complex_formatter = heat_utils.json_formatter
complex_formatter = common.JsonColumn
if complex_formatter:
formatters['parameters'] = complex_formatter
formatters['outputs'] = complex_formatter
@@ -1019,7 +1020,7 @@ class OutputShowStack(command.ShowOne):
values = []
for output in outputs:
columns.append(output['output_key'])
values.append(heat_utils.json_formatter(output))
values.append(common.JsonColumn(output))
return columns, values

View File

@@ -14,6 +14,7 @@
import logging
from cliff import columns
from osc_lib.command import command
from osc_lib import utils
@@ -25,6 +26,11 @@ from heatclient.common import utils as heat_utils
from heatclient import exc
class ListColumn(columns.FormattableColumn):
def human_readable(self):
return ','.join(self._value)
class VersionList(command.Lister):
"""List the available template versions."""
@@ -39,11 +45,8 @@ class VersionList(command.Lister):
try:
versions[1].aliases
def format_alias(aliases):
return ','.join(aliases)
fields = ['Version', 'Type', 'Aliases']
formatters = {'Aliases': format_alias}
formatters = {'Aliases': ListColumn}
except AttributeError:
fields = ['Version', 'Type']
formatters = None

View File

@@ -14,6 +14,7 @@
from unittest import mock
from heatclient.osc.v1 import build_info as osc_build_info
from heatclient.osc.v1 import common
from heatclient.tests.unit.osc.v1 import fakes as orchestration_fakes
@@ -39,6 +40,7 @@ class TestBuildInfo(orchestration_fakes.TestOrchestrationv1):
columns, data = self.cmd.take_action(parsed_args)
self.mock_client.build_info.build_info.assert_called_with()
self.assertEqual(['api', 'engine'], columns)
self.assertEqual(['{\n "revision": "{api_build_revision}"\n}',
'{\n "revision": "{engine_build_revision}"\n}'],
list(data))
self.assertEqual([
common.JsonColumn({"revision": "{api_build_revision}"}),
common.JsonColumn({"revision": "{engine_build_revision}"})
], list(data))

View File

@@ -57,8 +57,10 @@ class TestTemplateVersionList(TestTemplate):
columns, data = self.cmd.take_action(parsed_args)
self.assertEqual(['Version', 'Type', 'Aliases'], columns)
self.assertEqual([('HOT123', 'hot', 'releasex'),
('CFN456', 'cfn', 'releasey')], list(data))
self.assertEqual([
('HOT123', 'hot', template.ListColumn(['releasex'])),
('CFN456', 'cfn', template.ListColumn(['releasey']))
], list(data))
class TestTemplateFunctionList(TestTemplate):