Merge "Add column 'glareType' in show artifact"

This commit is contained in:
Jenkins 2016-10-04 12:21:44 +00:00 committed by Gerrit Code Review
commit dee0503f85
3 changed files with 72 additions and 47 deletions

View File

@ -19,10 +19,29 @@ from osc_lib.command import command
from glareclient.common import utils as glare_utils
from glareclient.osc.v1 import TypeMapperAction
from pprint import pformat
import six
LOG = logging.getLogger(__name__)
def print_artifact(client, data, type_name):
schema = \
client.artifacts.get_type_schema(type_name=type_name)['properties']
columns = ('field', 'value', 'glare type')
column_headers = [c.capitalize() for c in columns]
table = []
for key, value in six.iteritems(data):
if schema[key]['glareType'] == 'Blob':
value = pformat(value)
table.append((key, value, schema[key]['glareType']))
return (column_headers,
table)
class ListArtifacts(command.Lister):
"""List of artifacts"""
@ -85,7 +104,7 @@ class ListArtifacts(command.Lister):
table)
class ShowArtifact(command.ShowOne):
class ShowArtifact(command.Lister):
"""Show details artifact"""
def get_parser(self, prog_name):
@ -106,12 +125,13 @@ class ShowArtifact(command.ShowOne):
def take_action(self, parsed_args):
LOG.debug('take_action({0})'.format(parsed_args))
client = self.app.client_manager.artifact
data = client.artifacts.get(parsed_args.id,
type_name=parsed_args.type_name)
return self.dict2columns(data)
return print_artifact(client, data, parsed_args.type_name)
class CreateArtifact(command.ShowOne):
class CreateArtifact(command.Lister):
"""Create a new artifact"""
def get_parser(self, prog_name):
@ -156,10 +176,10 @@ class CreateArtifact(command.ShowOne):
type_name=parsed_args.type_name,
version=parsed_args.artifact_version,
**prop)
return self.dict2columns(data)
return print_artifact(client, data, parsed_args.type_name)
class UpdateArtifact(command.ShowOne):
class UpdateArtifact(command.Lister):
"""Update the properties of the artifact"""
def get_parser(self, prog_name):
@ -209,10 +229,10 @@ class UpdateArtifact(command.ShowOne):
parsed_args.id, type_name=parsed_args.type_name,
remove_props=parsed_args.remove_property, **prop)
return self.dict2columns(data)
return print_artifact(client, data, parsed_args.type_name)
class DeleteArtifact(command.ShowOne):
class DeleteArtifact(command.Command):
"""Delete the artifact"""
def get_parser(self, prog_name):
@ -233,12 +253,11 @@ class DeleteArtifact(command.ShowOne):
def take_action(self, parsed_args):
LOG.debug('take_action({0})'.format(parsed_args))
client = self.app.client_manager.artifact
data = client.artifacts.delete(parsed_args.id,
type_name=parsed_args.type_name)
return self.dict2columns(data)
client.artifacts.delete(parsed_args.id,
type_name=parsed_args.type_name)
class ActivateArtifact(command.ShowOne):
class ActivateArtifact(command.Lister):
"""Activate the artifact"""
def get_parser(self, prog_name):
@ -261,10 +280,10 @@ class ActivateArtifact(command.ShowOne):
client = self.app.client_manager.artifact
data = client.artifacts.activate(
parsed_args.id, type_name=parsed_args.type_name)
return self.dict2columns(data)
return print_artifact(client, data, parsed_args.type_name)
class DeactivateArtifact(command.ShowOne):
class DeactivateArtifact(command.Lister):
"""Deactivate the artifact"""
def get_parser(self, prog_name):
@ -287,10 +306,10 @@ class DeactivateArtifact(command.ShowOne):
client = self.app.client_manager.artifact
data = client.artifacts.deactivate(parsed_args.id,
type_name=parsed_args.type_name)
return self.dict2columns(data)
return print_artifact(client, data, parsed_args.type_name)
class ReactivateArtifact(command.ShowOne):
class ReactivateArtifact(command.Lister):
"""Reactivate the artifact"""
def get_parser(self, prog_name):
@ -313,10 +332,10 @@ class ReactivateArtifact(command.ShowOne):
client = self.app.client_manager.artifact
data = client.artifacts.reactivate(parsed_args.id,
type_name=parsed_args.type_name)
return self.dict2columns(data)
return print_artifact(client, data, parsed_args.type_name)
class PublishArtifact(command.ShowOne):
class PublishArtifact(command.Lister):
"""Publish the artifact"""
def get_parser(self, prog_name):
@ -339,7 +358,7 @@ class PublishArtifact(command.ShowOne):
client = self.app.client_manager.artifact
data = client.artifacts.publish(parsed_args.id,
type_name=parsed_args.type_name)
return self.dict2columns(data)
return print_artifact(client, data, parsed_args.type_name)
class TypeList(command.Lister):

View File

@ -29,6 +29,8 @@ class TestArtifacts(fakes.TestArtifacts):
self.artifact_mock = \
self.app.client_manager.artifact.artifacts
self.http = mock.MagicMock()
self.COLUMNS = set(['id', 'name', 'owner',
'status', 'version', 'visibility'])
class TestListArtifacts(TestArtifacts):
@ -122,20 +124,20 @@ class TestShowArtifacts(TestArtifacts):
# Command to test
self.cmd = osc_art.ShowArtifact(self.app, None)
self.COLUMNS = ('id', 'name', 'owner',
'status', 'version', 'visibility')
def test_artifact_show(self):
arglist = ['sample_artifact', 'fc15c365-d4f9-4b8b-a090-d9e230f1f6ba']
verify = [('type_name', 'sample_artifact')]
COLUMNS = ('blob', 'environment', 'id', 'image', 'name', 'owner',
'package', 'status', 'template', 'version', 'visibility')
COLUMNS = set(['blob', 'environment', 'id', 'image',
'name', 'owner', 'package', 'status',
'template', 'version', 'visibility'])
parsed_args = self.check_parser(self.cmd, arglist, verify)
columns, data = self.cmd.take_action(parsed_args)
name_fields = set([column[0] for column in data])
# Check that columns are correct
self.assertEqual(COLUMNS, columns)
self.assertEqual(COLUMNS, name_fields)
def test_artifact_show_without_id(self):
arglist = ['sample_artifact']
@ -161,8 +163,6 @@ class TestCreateArtifacts(TestArtifacts):
# Command to test
self.cmd = osc_art.CreateArtifact(self.app, None)
self.COLUMNS = ('id', 'name', 'owner',
'status', 'version', 'visibility')
def test_create_artifact(self):
arglist = ['sample_artifact', 'art',
@ -174,8 +174,9 @@ class TestCreateArtifacts(TestArtifacts):
parsed_args = self.check_parser(self.cmd, arglist, verify)
columns, data = self.cmd.take_action(parsed_args)
name_fields = set([column[0] for column in data])
# Check that columns are correct
self.assertEqual(self.COLUMNS, columns)
self.assertEqual(self.COLUMNS, name_fields)
def test_create_artifact_multiproperty(self):
arglist = ['sample_artifact', 'art',
@ -205,8 +206,6 @@ class TestUpdateArtifacts(TestArtifacts):
# Command to test
self.cmd = osc_art.UpdateArtifact(self.app, None)
self.COLUMNS = ('id', 'name', 'owner',
'status', 'version', 'visibility')
def test_artifact_update(self):
arglist = ['sample_artifact',
@ -217,8 +216,10 @@ class TestUpdateArtifacts(TestArtifacts):
('property', ['blah=1', 'blag=2'])]
parsed_args = self.check_parser(self.cmd, arglist, verify)
columns, data = self.cmd.take_action(parsed_args)
name_fields = set([column[0] for column in data])
# Check that columns are correct
self.assertEqual(self.COLUMNS, columns)
self.assertEqual(self.COLUMNS, name_fields)
def test_artifact_update_bad(self):
arglist = ['sample_artifact',
@ -240,8 +241,9 @@ class TestUpdateArtifacts(TestArtifacts):
('remove_property', ['prop1', 'prop2'])]
parsed_args = self.check_parser(self.cmd, arglist, verify)
columns, data = self.cmd.take_action(parsed_args)
name_fields = set([column[0] for column in data])
# Check that columns are correct
self.assertEqual(self.COLUMNS, columns)
self.assertEqual(self.COLUMNS, name_fields)
class TestDeleteArtifacts(TestArtifacts):
@ -253,8 +255,6 @@ class TestDeleteArtifacts(TestArtifacts):
# Command to test
self.cmd = osc_art.DeleteArtifact(self.app, None)
self.COLUMNS = ('id', 'name', 'owner',
'status', 'version', 'visibility')
def test_artifact_delete(self):
arglist = ['sample_artifact',
@ -262,9 +262,7 @@ class TestDeleteArtifacts(TestArtifacts):
verify = [('type_name', 'sample_artifact'),
('id', 'fc15c365-d4f9-4b8b-a090-d9e230f1f6ba')]
parsed_args = self.check_parser(self.cmd, arglist, verify)
columns, data = self.cmd.take_action(parsed_args)
# Check that columns are correct
self.assertEqual(self.COLUMNS, columns)
self.assertIsNone(self.cmd.take_action(parsed_args))
class TestActivateArtifacts(TestArtifacts):
@ -276,8 +274,6 @@ class TestActivateArtifacts(TestArtifacts):
# Command to test
self.cmd = osc_art.ActivateArtifact(self.app, None)
self.COLUMNS = ('id', 'name', 'owner',
'status', 'version', 'visibility')
def test_artifact_activate(self):
arglist = ['sample_artifact',
@ -286,8 +282,10 @@ class TestActivateArtifacts(TestArtifacts):
('id', 'fc15c365-d4f9-4b8b-a090-d9e230f1f6ba')]
parsed_args = self.check_parser(self.cmd, arglist, verify)
columns, data = self.cmd.take_action(parsed_args)
name_fields = set([column[0] for column in data])
# Check that columns are correct
self.assertEqual(self.COLUMNS, columns)
self.assertEqual(self.COLUMNS, name_fields)
class TestDeactivateArtifacts(TestArtifacts):
@ -299,8 +297,6 @@ class TestDeactivateArtifacts(TestArtifacts):
# Command to test
self.cmd = osc_art.DeactivateArtifact(self.app, None)
self.COLUMNS = ('id', 'name', 'owner',
'status', 'version', 'visibility')
def test_artifact_deactivate(self):
arglist = ['sample_artifact',
@ -309,8 +305,10 @@ class TestDeactivateArtifacts(TestArtifacts):
('id', 'fc15c365-d4f9-4b8b-a090-d9e230f1f6ba')]
parsed_args = self.check_parser(self.cmd, arglist, verify)
columns, data = self.cmd.take_action(parsed_args)
name_fields = set([column[0] for column in data])
# Check that columns are correct
self.assertEqual(self.COLUMNS, columns)
self.assertEqual(self.COLUMNS, name_fields)
class TestReactivateArtifacts(TestArtifacts):
@ -322,8 +320,6 @@ class TestReactivateArtifacts(TestArtifacts):
# Command to test
self.cmd = osc_art.ReactivateArtifact(self.app, None)
self.COLUMNS = ('id', 'name', 'owner',
'status', 'version', 'visibility')
def test_artifact_rectivate(self):
arglist = ['sample_artifact',
@ -332,8 +328,10 @@ class TestReactivateArtifacts(TestArtifacts):
('id', 'fc15c365-d4f9-4b8b-a090-d9e230f1f6ba')]
parsed_args = self.check_parser(self.cmd, arglist, verify)
columns, data = self.cmd.take_action(parsed_args)
name_fields = set([column[0] for column in data])
# Check that columns are correct
self.assertEqual(self.COLUMNS, columns)
self.assertEqual(self.COLUMNS, name_fields)
class TestPublishArtifacts(TestArtifacts):
@ -345,8 +343,6 @@ class TestPublishArtifacts(TestArtifacts):
# Command to test
self.cmd = osc_art.PublishArtifact(self.app, None)
self.COLUMNS = ('id', 'name', 'owner',
'status', 'version', 'visibility')
def test_publish_delete(self):
arglist = ['sample_artifact',
@ -355,5 +351,7 @@ class TestPublishArtifacts(TestArtifacts):
('id', 'fc15c365-d4f9-4b8b-a090-d9e230f1f6ba')]
parsed_args = self.check_parser(self.cmd, arglist, verify)
columns, data = self.cmd.take_action(parsed_args)
name_fields = set([column[0] for column in data])
# Check that columns are correct
self.assertEqual(self.COLUMNS, columns)
self.assertEqual(self.COLUMNS, name_fields)

View File

@ -239,3 +239,11 @@ class Controller(object):
for type_name, type_schema in six.iteritems(body['schemas']):
type_list.append((type_name, type_schema['version']))
return type_list
def get_type_schema(self, type_name=None):
"""Show schema of type name."""
type_name = self._check_type_name(type_name)
url = '/schemas/%s' % type_name
resp, body = self.http_client.get(url)
return body['schemas'][type_name]