Add package show to openstack CLI

usage: openstack package show [-h] [-f {json,shell,table,value,yaml}]
                              [-c COLUMN] [--max-width <integer>]
                              [--fit-width] [--print-empty] [--noindent]
                              [--prefix PREFIX]
                              <ID>

Display details for a package.

Partially implements: blueprint openstack-client-plugin-support

Change-Id: I4373469a98f11194eb9d3dfe78898eef0bd36c3d
This commit is contained in:
zhurong 2017-08-16 22:29:13 +08:00
parent 9c867d8dde
commit 2fbfc68f8a
3 changed files with 67 additions and 0 deletions

View File

@ -25,6 +25,7 @@ from osc_lib.command import command
from osc_lib import exceptions as exc
from osc_lib import utils
from oslo_log import log as logging
from oslo_serialization import jsonutils
from muranoclient.apiclient import exceptions
from muranoclient.common import exceptions as common_exceptions
@ -631,3 +632,44 @@ class ImportBundle(command.Lister):
columns,
) for s in imported_list)
)
class ShowPackage(command.ShowOne):
"""Display details for a package."""
def get_parser(self, prog_name):
parser = super(ShowPackage, self).get_parser(prog_name)
parser.add_argument(
"id",
metavar="<ID>",
help=("Package ID to show."),
)
return parser
def take_action(self, parsed_args):
LOG.debug("take_action({0})".format(parsed_args))
client = self.app.client_manager.application_catalog
try:
package = client.packages.get(parsed_args.id)
except common_exceptions.HTTPNotFound:
raise exceptions.CommandError("Package with id %s not "
"found" % parsed_args.id)
else:
to_display = dict(
id=package.id,
type=package.type,
owner_id=package.owner_id,
name=package.name,
fully_qualified_name=package.fully_qualified_name,
is_public=package.is_public,
enabled=package.enabled,
class_definitions=jsonutils.dumps(package.class_definitions,
indent=2),
categories=jsonutils.dumps(package.categories, indent=2),
tags=jsonutils.dumps(package.tags, indent=2),
description=package.description
)
return self.dict2columns(to_display)

View File

@ -688,3 +688,27 @@ class TestBundleImport(TestPackage):
], any_order=True,
)
shutil.rmtree(tmp_dir)
class TestShowPackage(TestPackage):
def setUp(self):
super(TestShowPackage, self).setUp()
# Command to test
self.cmd = osc_pkg.ShowPackage(self.app, None)
def test_package_show(self):
arglist = ['fake']
verifylist = [('id', 'fake')]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
columns, data = self.cmd.take_action(parsed_args)
# Check that columns are correct
expected_columns = ('categories', 'class_definitions', 'description',
'enabled', 'fully_qualified_name', 'id',
'is_public', 'name', 'owner_id', 'tags', 'type')
self.assertEqual(expected_columns, columns)
self.package_mock.get.assert_called_with('fake')

View File

@ -56,6 +56,7 @@ openstack.application_catalog.v1 =
package_list = muranoclient.osc.v1.package:ListPackages
package_delete = muranoclient.osc.v1.package:DeletePackage
package_import = muranoclient.osc.v1.package:ImportPackage
package_show = muranoclient.osc.v1.package:ShowPackage
bundle_import = muranoclient.osc.v1.package:ImportBundle