Merge "Add column 'glareType' in show artifact"
This commit is contained in:
@@ -19,10 +19,29 @@ from osc_lib.command import command
|
|||||||
from glareclient.common import utils as glare_utils
|
from glareclient.common import utils as glare_utils
|
||||||
from glareclient.osc.v1 import TypeMapperAction
|
from glareclient.osc.v1 import TypeMapperAction
|
||||||
|
|
||||||
|
from pprint import pformat
|
||||||
|
import six
|
||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
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):
|
class ListArtifacts(command.Lister):
|
||||||
"""List of artifacts"""
|
"""List of artifacts"""
|
||||||
|
|
||||||
@@ -85,7 +104,7 @@ class ListArtifacts(command.Lister):
|
|||||||
table)
|
table)
|
||||||
|
|
||||||
|
|
||||||
class ShowArtifact(command.ShowOne):
|
class ShowArtifact(command.Lister):
|
||||||
"""Show details artifact"""
|
"""Show details artifact"""
|
||||||
|
|
||||||
def get_parser(self, prog_name):
|
def get_parser(self, prog_name):
|
||||||
@@ -106,12 +125,13 @@ class ShowArtifact(command.ShowOne):
|
|||||||
def take_action(self, parsed_args):
|
def take_action(self, parsed_args):
|
||||||
LOG.debug('take_action({0})'.format(parsed_args))
|
LOG.debug('take_action({0})'.format(parsed_args))
|
||||||
client = self.app.client_manager.artifact
|
client = self.app.client_manager.artifact
|
||||||
|
|
||||||
data = client.artifacts.get(parsed_args.id,
|
data = client.artifacts.get(parsed_args.id,
|
||||||
type_name=parsed_args.type_name)
|
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"""
|
"""Create a new artifact"""
|
||||||
|
|
||||||
def get_parser(self, prog_name):
|
def get_parser(self, prog_name):
|
||||||
@@ -156,10 +176,10 @@ class CreateArtifact(command.ShowOne):
|
|||||||
type_name=parsed_args.type_name,
|
type_name=parsed_args.type_name,
|
||||||
version=parsed_args.artifact_version,
|
version=parsed_args.artifact_version,
|
||||||
**prop)
|
**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"""
|
"""Update the properties of the artifact"""
|
||||||
|
|
||||||
def get_parser(self, prog_name):
|
def get_parser(self, prog_name):
|
||||||
@@ -209,10 +229,10 @@ class UpdateArtifact(command.ShowOne):
|
|||||||
parsed_args.id, type_name=parsed_args.type_name,
|
parsed_args.id, type_name=parsed_args.type_name,
|
||||||
remove_props=parsed_args.remove_property, **prop)
|
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"""
|
"""Delete the artifact"""
|
||||||
|
|
||||||
def get_parser(self, prog_name):
|
def get_parser(self, prog_name):
|
||||||
@@ -233,12 +253,11 @@ class DeleteArtifact(command.ShowOne):
|
|||||||
def take_action(self, parsed_args):
|
def take_action(self, parsed_args):
|
||||||
LOG.debug('take_action({0})'.format(parsed_args))
|
LOG.debug('take_action({0})'.format(parsed_args))
|
||||||
client = self.app.client_manager.artifact
|
client = self.app.client_manager.artifact
|
||||||
data = client.artifacts.delete(parsed_args.id,
|
client.artifacts.delete(parsed_args.id,
|
||||||
type_name=parsed_args.type_name)
|
type_name=parsed_args.type_name)
|
||||||
return self.dict2columns(data)
|
|
||||||
|
|
||||||
|
|
||||||
class ActivateArtifact(command.ShowOne):
|
class ActivateArtifact(command.Lister):
|
||||||
"""Activate the artifact"""
|
"""Activate the artifact"""
|
||||||
|
|
||||||
def get_parser(self, prog_name):
|
def get_parser(self, prog_name):
|
||||||
@@ -261,10 +280,10 @@ class ActivateArtifact(command.ShowOne):
|
|||||||
client = self.app.client_manager.artifact
|
client = self.app.client_manager.artifact
|
||||||
data = client.artifacts.activate(
|
data = client.artifacts.activate(
|
||||||
parsed_args.id, type_name=parsed_args.type_name)
|
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"""
|
"""Deactivate the artifact"""
|
||||||
|
|
||||||
def get_parser(self, prog_name):
|
def get_parser(self, prog_name):
|
||||||
@@ -287,10 +306,10 @@ class DeactivateArtifact(command.ShowOne):
|
|||||||
client = self.app.client_manager.artifact
|
client = self.app.client_manager.artifact
|
||||||
data = client.artifacts.deactivate(parsed_args.id,
|
data = client.artifacts.deactivate(parsed_args.id,
|
||||||
type_name=parsed_args.type_name)
|
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"""
|
"""Reactivate the artifact"""
|
||||||
|
|
||||||
def get_parser(self, prog_name):
|
def get_parser(self, prog_name):
|
||||||
@@ -313,10 +332,10 @@ class ReactivateArtifact(command.ShowOne):
|
|||||||
client = self.app.client_manager.artifact
|
client = self.app.client_manager.artifact
|
||||||
data = client.artifacts.reactivate(parsed_args.id,
|
data = client.artifacts.reactivate(parsed_args.id,
|
||||||
type_name=parsed_args.type_name)
|
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"""
|
"""Publish the artifact"""
|
||||||
|
|
||||||
def get_parser(self, prog_name):
|
def get_parser(self, prog_name):
|
||||||
@@ -339,7 +358,7 @@ class PublishArtifact(command.ShowOne):
|
|||||||
client = self.app.client_manager.artifact
|
client = self.app.client_manager.artifact
|
||||||
data = client.artifacts.publish(parsed_args.id,
|
data = client.artifacts.publish(parsed_args.id,
|
||||||
type_name=parsed_args.type_name)
|
type_name=parsed_args.type_name)
|
||||||
return self.dict2columns(data)
|
return print_artifact(client, data, parsed_args.type_name)
|
||||||
|
|
||||||
|
|
||||||
class TypeList(command.Lister):
|
class TypeList(command.Lister):
|
||||||
|
@@ -29,6 +29,8 @@ class TestArtifacts(fakes.TestArtifacts):
|
|||||||
self.artifact_mock = \
|
self.artifact_mock = \
|
||||||
self.app.client_manager.artifact.artifacts
|
self.app.client_manager.artifact.artifacts
|
||||||
self.http = mock.MagicMock()
|
self.http = mock.MagicMock()
|
||||||
|
self.COLUMNS = set(['id', 'name', 'owner',
|
||||||
|
'status', 'version', 'visibility'])
|
||||||
|
|
||||||
|
|
||||||
class TestListArtifacts(TestArtifacts):
|
class TestListArtifacts(TestArtifacts):
|
||||||
@@ -122,20 +124,20 @@ class TestShowArtifacts(TestArtifacts):
|
|||||||
|
|
||||||
# Command to test
|
# Command to test
|
||||||
self.cmd = osc_art.ShowArtifact(self.app, None)
|
self.cmd = osc_art.ShowArtifact(self.app, None)
|
||||||
self.COLUMNS = ('id', 'name', 'owner',
|
|
||||||
'status', 'version', 'visibility')
|
|
||||||
|
|
||||||
def test_artifact_show(self):
|
def test_artifact_show(self):
|
||||||
arglist = ['sample_artifact', 'fc15c365-d4f9-4b8b-a090-d9e230f1f6ba']
|
arglist = ['sample_artifact', 'fc15c365-d4f9-4b8b-a090-d9e230f1f6ba']
|
||||||
verify = [('type_name', 'sample_artifact')]
|
verify = [('type_name', 'sample_artifact')]
|
||||||
COLUMNS = ('blob', 'environment', 'id', 'image', 'name', 'owner',
|
COLUMNS = set(['blob', 'environment', 'id', 'image',
|
||||||
'package', 'status', 'template', 'version', 'visibility')
|
'name', 'owner', 'package', 'status',
|
||||||
|
'template', 'version', 'visibility'])
|
||||||
|
|
||||||
parsed_args = self.check_parser(self.cmd, arglist, verify)
|
parsed_args = self.check_parser(self.cmd, arglist, verify)
|
||||||
columns, data = self.cmd.take_action(parsed_args)
|
columns, data = self.cmd.take_action(parsed_args)
|
||||||
|
|
||||||
|
name_fields = set([column[0] for column in data])
|
||||||
# Check that columns are correct
|
# Check that columns are correct
|
||||||
self.assertEqual(COLUMNS, columns)
|
self.assertEqual(COLUMNS, name_fields)
|
||||||
|
|
||||||
def test_artifact_show_without_id(self):
|
def test_artifact_show_without_id(self):
|
||||||
arglist = ['sample_artifact']
|
arglist = ['sample_artifact']
|
||||||
@@ -161,8 +163,6 @@ class TestCreateArtifacts(TestArtifacts):
|
|||||||
|
|
||||||
# Command to test
|
# Command to test
|
||||||
self.cmd = osc_art.CreateArtifact(self.app, None)
|
self.cmd = osc_art.CreateArtifact(self.app, None)
|
||||||
self.COLUMNS = ('id', 'name', 'owner',
|
|
||||||
'status', 'version', 'visibility')
|
|
||||||
|
|
||||||
def test_create_artifact(self):
|
def test_create_artifact(self):
|
||||||
arglist = ['sample_artifact', 'art',
|
arglist = ['sample_artifact', 'art',
|
||||||
@@ -174,8 +174,9 @@ class TestCreateArtifacts(TestArtifacts):
|
|||||||
parsed_args = self.check_parser(self.cmd, arglist, verify)
|
parsed_args = self.check_parser(self.cmd, arglist, verify)
|
||||||
columns, data = self.cmd.take_action(parsed_args)
|
columns, data = self.cmd.take_action(parsed_args)
|
||||||
|
|
||||||
|
name_fields = set([column[0] for column in data])
|
||||||
# Check that columns are correct
|
# Check that columns are correct
|
||||||
self.assertEqual(self.COLUMNS, columns)
|
self.assertEqual(self.COLUMNS, name_fields)
|
||||||
|
|
||||||
def test_create_artifact_multiproperty(self):
|
def test_create_artifact_multiproperty(self):
|
||||||
arglist = ['sample_artifact', 'art',
|
arglist = ['sample_artifact', 'art',
|
||||||
@@ -205,8 +206,6 @@ class TestUpdateArtifacts(TestArtifacts):
|
|||||||
|
|
||||||
# Command to test
|
# Command to test
|
||||||
self.cmd = osc_art.UpdateArtifact(self.app, None)
|
self.cmd = osc_art.UpdateArtifact(self.app, None)
|
||||||
self.COLUMNS = ('id', 'name', 'owner',
|
|
||||||
'status', 'version', 'visibility')
|
|
||||||
|
|
||||||
def test_artifact_update(self):
|
def test_artifact_update(self):
|
||||||
arglist = ['sample_artifact',
|
arglist = ['sample_artifact',
|
||||||
@@ -217,8 +216,10 @@ class TestUpdateArtifacts(TestArtifacts):
|
|||||||
('property', ['blah=1', 'blag=2'])]
|
('property', ['blah=1', 'blag=2'])]
|
||||||
parsed_args = self.check_parser(self.cmd, arglist, verify)
|
parsed_args = self.check_parser(self.cmd, arglist, verify)
|
||||||
columns, data = self.cmd.take_action(parsed_args)
|
columns, data = self.cmd.take_action(parsed_args)
|
||||||
|
|
||||||
|
name_fields = set([column[0] for column in data])
|
||||||
# Check that columns are correct
|
# Check that columns are correct
|
||||||
self.assertEqual(self.COLUMNS, columns)
|
self.assertEqual(self.COLUMNS, name_fields)
|
||||||
|
|
||||||
def test_artifact_update_bad(self):
|
def test_artifact_update_bad(self):
|
||||||
arglist = ['sample_artifact',
|
arglist = ['sample_artifact',
|
||||||
@@ -240,8 +241,9 @@ class TestUpdateArtifacts(TestArtifacts):
|
|||||||
('remove_property', ['prop1', 'prop2'])]
|
('remove_property', ['prop1', 'prop2'])]
|
||||||
parsed_args = self.check_parser(self.cmd, arglist, verify)
|
parsed_args = self.check_parser(self.cmd, arglist, verify)
|
||||||
columns, data = self.cmd.take_action(parsed_args)
|
columns, data = self.cmd.take_action(parsed_args)
|
||||||
|
name_fields = set([column[0] for column in data])
|
||||||
# Check that columns are correct
|
# Check that columns are correct
|
||||||
self.assertEqual(self.COLUMNS, columns)
|
self.assertEqual(self.COLUMNS, name_fields)
|
||||||
|
|
||||||
|
|
||||||
class TestDeleteArtifacts(TestArtifacts):
|
class TestDeleteArtifacts(TestArtifacts):
|
||||||
@@ -253,8 +255,6 @@ class TestDeleteArtifacts(TestArtifacts):
|
|||||||
|
|
||||||
# Command to test
|
# Command to test
|
||||||
self.cmd = osc_art.DeleteArtifact(self.app, None)
|
self.cmd = osc_art.DeleteArtifact(self.app, None)
|
||||||
self.COLUMNS = ('id', 'name', 'owner',
|
|
||||||
'status', 'version', 'visibility')
|
|
||||||
|
|
||||||
def test_artifact_delete(self):
|
def test_artifact_delete(self):
|
||||||
arglist = ['sample_artifact',
|
arglist = ['sample_artifact',
|
||||||
@@ -262,9 +262,7 @@ class TestDeleteArtifacts(TestArtifacts):
|
|||||||
verify = [('type_name', 'sample_artifact'),
|
verify = [('type_name', 'sample_artifact'),
|
||||||
('id', 'fc15c365-d4f9-4b8b-a090-d9e230f1f6ba')]
|
('id', 'fc15c365-d4f9-4b8b-a090-d9e230f1f6ba')]
|
||||||
parsed_args = self.check_parser(self.cmd, arglist, verify)
|
parsed_args = self.check_parser(self.cmd, arglist, verify)
|
||||||
columns, data = self.cmd.take_action(parsed_args)
|
self.assertIsNone(self.cmd.take_action(parsed_args))
|
||||||
# Check that columns are correct
|
|
||||||
self.assertEqual(self.COLUMNS, columns)
|
|
||||||
|
|
||||||
|
|
||||||
class TestActivateArtifacts(TestArtifacts):
|
class TestActivateArtifacts(TestArtifacts):
|
||||||
@@ -276,8 +274,6 @@ class TestActivateArtifacts(TestArtifacts):
|
|||||||
|
|
||||||
# Command to test
|
# Command to test
|
||||||
self.cmd = osc_art.ActivateArtifact(self.app, None)
|
self.cmd = osc_art.ActivateArtifact(self.app, None)
|
||||||
self.COLUMNS = ('id', 'name', 'owner',
|
|
||||||
'status', 'version', 'visibility')
|
|
||||||
|
|
||||||
def test_artifact_activate(self):
|
def test_artifact_activate(self):
|
||||||
arglist = ['sample_artifact',
|
arglist = ['sample_artifact',
|
||||||
@@ -286,8 +282,10 @@ class TestActivateArtifacts(TestArtifacts):
|
|||||||
('id', 'fc15c365-d4f9-4b8b-a090-d9e230f1f6ba')]
|
('id', 'fc15c365-d4f9-4b8b-a090-d9e230f1f6ba')]
|
||||||
parsed_args = self.check_parser(self.cmd, arglist, verify)
|
parsed_args = self.check_parser(self.cmd, arglist, verify)
|
||||||
columns, data = self.cmd.take_action(parsed_args)
|
columns, data = self.cmd.take_action(parsed_args)
|
||||||
|
|
||||||
|
name_fields = set([column[0] for column in data])
|
||||||
# Check that columns are correct
|
# Check that columns are correct
|
||||||
self.assertEqual(self.COLUMNS, columns)
|
self.assertEqual(self.COLUMNS, name_fields)
|
||||||
|
|
||||||
|
|
||||||
class TestDeactivateArtifacts(TestArtifacts):
|
class TestDeactivateArtifacts(TestArtifacts):
|
||||||
@@ -299,8 +297,6 @@ class TestDeactivateArtifacts(TestArtifacts):
|
|||||||
|
|
||||||
# Command to test
|
# Command to test
|
||||||
self.cmd = osc_art.DeactivateArtifact(self.app, None)
|
self.cmd = osc_art.DeactivateArtifact(self.app, None)
|
||||||
self.COLUMNS = ('id', 'name', 'owner',
|
|
||||||
'status', 'version', 'visibility')
|
|
||||||
|
|
||||||
def test_artifact_deactivate(self):
|
def test_artifact_deactivate(self):
|
||||||
arglist = ['sample_artifact',
|
arglist = ['sample_artifact',
|
||||||
@@ -309,8 +305,10 @@ class TestDeactivateArtifacts(TestArtifacts):
|
|||||||
('id', 'fc15c365-d4f9-4b8b-a090-d9e230f1f6ba')]
|
('id', 'fc15c365-d4f9-4b8b-a090-d9e230f1f6ba')]
|
||||||
parsed_args = self.check_parser(self.cmd, arglist, verify)
|
parsed_args = self.check_parser(self.cmd, arglist, verify)
|
||||||
columns, data = self.cmd.take_action(parsed_args)
|
columns, data = self.cmd.take_action(parsed_args)
|
||||||
|
|
||||||
|
name_fields = set([column[0] for column in data])
|
||||||
# Check that columns are correct
|
# Check that columns are correct
|
||||||
self.assertEqual(self.COLUMNS, columns)
|
self.assertEqual(self.COLUMNS, name_fields)
|
||||||
|
|
||||||
|
|
||||||
class TestReactivateArtifacts(TestArtifacts):
|
class TestReactivateArtifacts(TestArtifacts):
|
||||||
@@ -322,8 +320,6 @@ class TestReactivateArtifacts(TestArtifacts):
|
|||||||
|
|
||||||
# Command to test
|
# Command to test
|
||||||
self.cmd = osc_art.ReactivateArtifact(self.app, None)
|
self.cmd = osc_art.ReactivateArtifact(self.app, None)
|
||||||
self.COLUMNS = ('id', 'name', 'owner',
|
|
||||||
'status', 'version', 'visibility')
|
|
||||||
|
|
||||||
def test_artifact_rectivate(self):
|
def test_artifact_rectivate(self):
|
||||||
arglist = ['sample_artifact',
|
arglist = ['sample_artifact',
|
||||||
@@ -332,8 +328,10 @@ class TestReactivateArtifacts(TestArtifacts):
|
|||||||
('id', 'fc15c365-d4f9-4b8b-a090-d9e230f1f6ba')]
|
('id', 'fc15c365-d4f9-4b8b-a090-d9e230f1f6ba')]
|
||||||
parsed_args = self.check_parser(self.cmd, arglist, verify)
|
parsed_args = self.check_parser(self.cmd, arglist, verify)
|
||||||
columns, data = self.cmd.take_action(parsed_args)
|
columns, data = self.cmd.take_action(parsed_args)
|
||||||
|
|
||||||
|
name_fields = set([column[0] for column in data])
|
||||||
# Check that columns are correct
|
# Check that columns are correct
|
||||||
self.assertEqual(self.COLUMNS, columns)
|
self.assertEqual(self.COLUMNS, name_fields)
|
||||||
|
|
||||||
|
|
||||||
class TestPublishArtifacts(TestArtifacts):
|
class TestPublishArtifacts(TestArtifacts):
|
||||||
@@ -345,8 +343,6 @@ class TestPublishArtifacts(TestArtifacts):
|
|||||||
|
|
||||||
# Command to test
|
# Command to test
|
||||||
self.cmd = osc_art.PublishArtifact(self.app, None)
|
self.cmd = osc_art.PublishArtifact(self.app, None)
|
||||||
self.COLUMNS = ('id', 'name', 'owner',
|
|
||||||
'status', 'version', 'visibility')
|
|
||||||
|
|
||||||
def test_publish_delete(self):
|
def test_publish_delete(self):
|
||||||
arglist = ['sample_artifact',
|
arglist = ['sample_artifact',
|
||||||
@@ -355,5 +351,7 @@ class TestPublishArtifacts(TestArtifacts):
|
|||||||
('id', 'fc15c365-d4f9-4b8b-a090-d9e230f1f6ba')]
|
('id', 'fc15c365-d4f9-4b8b-a090-d9e230f1f6ba')]
|
||||||
parsed_args = self.check_parser(self.cmd, arglist, verify)
|
parsed_args = self.check_parser(self.cmd, arglist, verify)
|
||||||
columns, data = self.cmd.take_action(parsed_args)
|
columns, data = self.cmd.take_action(parsed_args)
|
||||||
|
|
||||||
|
name_fields = set([column[0] for column in data])
|
||||||
# Check that columns are correct
|
# 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']):
|
for type_name, type_schema in six.iteritems(body['schemas']):
|
||||||
type_list.append((type_name, type_schema['version']))
|
type_list.append((type_name, type_schema['version']))
|
||||||
return type_list
|
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]
|
||||||
|
Reference in New Issue
Block a user