Merge "Add column 'glareType' in show artifact"
This commit is contained in:
commit
dee0503f85
|
@ -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):
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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]
|
||||
|
|
Loading…
Reference in New Issue