Allow to specify dict and list properties in cli
Change-Id: I9da3c3b0f9f34429ec40d891f76acee863c4ec79
This commit is contained in:
parent
50e117c20d
commit
8e8d788a84
glareclient
@ -15,13 +15,13 @@
|
||||
import logging
|
||||
|
||||
from osc_lib.command import command
|
||||
from oslo_utils import strutils
|
||||
from pprint import pformat
|
||||
import six
|
||||
|
||||
from glareclient.common import utils as glare_utils
|
||||
from glareclient.osc.v1 import TypeMapperAction
|
||||
|
||||
from pprint import pformat
|
||||
import six
|
||||
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@ -185,7 +185,21 @@ class CreateArtifact(command.Lister):
|
||||
metavar='<key=value>',
|
||||
action='append',
|
||||
default=[],
|
||||
help='Artifact property.'
|
||||
help='Simple artifact property.'
|
||||
)
|
||||
parser.add_argument(
|
||||
'--list', '-l',
|
||||
metavar='<key=value>',
|
||||
action='append',
|
||||
default=[],
|
||||
help='Artifact list property.'
|
||||
)
|
||||
parser.add_argument(
|
||||
'--dict', '-d',
|
||||
metavar='<key=value>',
|
||||
action='append',
|
||||
default=[],
|
||||
help='Artifact dict property.'
|
||||
)
|
||||
return parser
|
||||
|
||||
@ -197,6 +211,19 @@ class CreateArtifact(command.Lister):
|
||||
key, value = datum.split('=', 1)
|
||||
prop[key] = value
|
||||
|
||||
for datum in parsed_args.list:
|
||||
key, value = datum.split('=', 1)
|
||||
value = strutils.split_by_commas(value)
|
||||
prop[key] = value
|
||||
|
||||
for datum in parsed_args.dict:
|
||||
key, value = datum.split('=', 1)
|
||||
value = strutils.split_by_commas(value)
|
||||
prop[key] = {}
|
||||
for elem in value:
|
||||
k, v = elem.split(':', 1)
|
||||
prop[key][k] = v
|
||||
|
||||
client = self.app.client_manager.artifact
|
||||
data = client.artifacts.create(parsed_args.name,
|
||||
type_name=parsed_args.type_name,
|
||||
@ -244,7 +271,21 @@ class UpdateArtifact(command.Lister):
|
||||
metavar='<key=value>',
|
||||
action='append',
|
||||
default=[],
|
||||
help='Update property values.'
|
||||
help='Simple artifact property.'
|
||||
)
|
||||
parser.add_argument(
|
||||
'--list', '-l',
|
||||
metavar='<key=value>',
|
||||
action='append',
|
||||
default=[],
|
||||
help='Artifact list property.'
|
||||
)
|
||||
parser.add_argument(
|
||||
'--dict', '-d',
|
||||
metavar='<key=value>',
|
||||
action='append',
|
||||
default=[],
|
||||
help='Artifact dict property.'
|
||||
)
|
||||
return parser
|
||||
|
||||
@ -256,6 +297,19 @@ class UpdateArtifact(command.Lister):
|
||||
key, value = datum.split('=', 1)
|
||||
prop[key] = value
|
||||
|
||||
for datum in parsed_args.list:
|
||||
key, value = datum.split('=', 1)
|
||||
value = strutils.split_by_commas(value)
|
||||
prop[key] = value
|
||||
|
||||
for datum in parsed_args.dict:
|
||||
key, value = datum.split('=', 1)
|
||||
value = strutils.split_by_commas(value)
|
||||
prop[key] = {}
|
||||
for elem in value:
|
||||
k, v = elem.split(':', 1)
|
||||
prop[key][k] = v
|
||||
|
||||
client = self.app.client_manager.artifact
|
||||
af_id = get_artifact_id(client, parsed_args)
|
||||
data = client.artifacts.update(
|
||||
|
@ -192,6 +192,42 @@ class TestCreateArtifacts(TestArtifacts):
|
||||
# Check that columns are correct
|
||||
self.assertEqual(self.COLUMNS, name_fields)
|
||||
|
||||
def test_create_artifact_list_prop(self):
|
||||
arglist = ['images', 'art',
|
||||
'--artifact-version', '0.2.4',
|
||||
'--list', 'l=10,11,12']
|
||||
verify = [('type_name', 'images'),
|
||||
('list', ['l=10,11,12']),
|
||||
('artifact_version', '0.2.4')]
|
||||
parsed_args = self.check_parser(self.cmd, arglist, verify)
|
||||
with mock.patch.object(
|
||||
self.app.client_manager.artifact.artifacts,
|
||||
'create') as patched_create:
|
||||
self.cmd.take_action(parsed_args)
|
||||
patched_create.assert_called_once_with(
|
||||
'art',
|
||||
l=['10', '11', '12'],
|
||||
type_name='images',
|
||||
version='0.2.4')
|
||||
|
||||
def test_create_artifact_dict_prop(self):
|
||||
arglist = ['images', 'art',
|
||||
'--artifact-version', '0.2.4',
|
||||
'--dict', 'd=a:10,b:11,c:12']
|
||||
verify = [('type_name', 'images'),
|
||||
('dict', ['d=a:10,b:11,c:12']),
|
||||
('artifact_version', '0.2.4')]
|
||||
parsed_args = self.check_parser(self.cmd, arglist, verify)
|
||||
with mock.patch.object(
|
||||
self.app.client_manager.artifact.artifacts,
|
||||
'create') as patched_create:
|
||||
self.cmd.take_action(parsed_args)
|
||||
patched_create.assert_called_once_with(
|
||||
'art',
|
||||
d={'a': '10', 'c': '12', 'b': '11'},
|
||||
type_name='images',
|
||||
version='0.2.4')
|
||||
|
||||
def test_create_artifact_multiproperty(self):
|
||||
arglist = ['images', 'art',
|
||||
'--artifact-version', '0.2.4',
|
||||
@ -235,6 +271,40 @@ class TestUpdateArtifacts(TestArtifacts):
|
||||
# Check that columns are correct
|
||||
self.assertEqual(self.COLUMNS, name_fields)
|
||||
|
||||
def test_update_artifact_list_prop(self):
|
||||
arglist = ['images',
|
||||
'fc15c365-d4f9-4b8b-a090-d9e230f1f6ba',
|
||||
'--list', 'l=10,11,12']
|
||||
verify = [('type_name', 'images'),
|
||||
('list', ['l=10,11,12'])]
|
||||
parsed_args = self.check_parser(self.cmd, arglist, verify)
|
||||
with mock.patch.object(
|
||||
self.app.client_manager.artifact.artifacts,
|
||||
'update') as patched_update:
|
||||
self.cmd.take_action(parsed_args)
|
||||
patched_update.assert_called_once_with(
|
||||
'fc15c365-d4f9-4b8b-a090-d9e230f1f6ba',
|
||||
l=['10', '11', '12'],
|
||||
remove_props=[],
|
||||
type_name='images')
|
||||
|
||||
def test_update_artifact_dict_prop(self):
|
||||
arglist = ['images',
|
||||
'fc15c365-d4f9-4b8b-a090-d9e230f1f6ba',
|
||||
'--dict', 'd=a:10,b:11,c:12']
|
||||
verify = [('type_name', 'images'),
|
||||
('dict', ['d=a:10,b:11,c:12'])]
|
||||
parsed_args = self.check_parser(self.cmd, arglist, verify)
|
||||
with mock.patch.object(
|
||||
self.app.client_manager.artifact.artifacts,
|
||||
'update') as patched_update:
|
||||
self.cmd.take_action(parsed_args)
|
||||
patched_update.assert_called_once_with(
|
||||
'fc15c365-d4f9-4b8b-a090-d9e230f1f6ba',
|
||||
d={'a': '10', 'c': '12', 'b': '11'},
|
||||
remove_props=[],
|
||||
type_name='images')
|
||||
|
||||
def test_artifact_update_bad(self):
|
||||
arglist = ['images',
|
||||
'fc15c365-d4f9-4b8b-a090-d9e230f1f6ba',
|
||||
|
Loading…
x
Reference in New Issue
Block a user