Merge "Allow to specify dict and list properties in cli"
This commit is contained in:
commit
c03388e413
@ -15,13 +15,13 @@
|
|||||||
import logging
|
import logging
|
||||||
|
|
||||||
from osc_lib.command import command
|
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.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__)
|
||||||
|
|
||||||
|
|
||||||
@ -185,7 +185,21 @@ class CreateArtifact(command.Lister):
|
|||||||
metavar='<key=value>',
|
metavar='<key=value>',
|
||||||
action='append',
|
action='append',
|
||||||
default=[],
|
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
|
return parser
|
||||||
|
|
||||||
@ -197,6 +211,19 @@ class CreateArtifact(command.Lister):
|
|||||||
key, value = datum.split('=', 1)
|
key, value = datum.split('=', 1)
|
||||||
prop[key] = value
|
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
|
client = self.app.client_manager.artifact
|
||||||
data = client.artifacts.create(parsed_args.name,
|
data = client.artifacts.create(parsed_args.name,
|
||||||
type_name=parsed_args.type_name,
|
type_name=parsed_args.type_name,
|
||||||
@ -244,7 +271,21 @@ class UpdateArtifact(command.Lister):
|
|||||||
metavar='<key=value>',
|
metavar='<key=value>',
|
||||||
action='append',
|
action='append',
|
||||||
default=[],
|
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
|
return parser
|
||||||
|
|
||||||
@ -256,6 +297,19 @@ class UpdateArtifact(command.Lister):
|
|||||||
key, value = datum.split('=', 1)
|
key, value = datum.split('=', 1)
|
||||||
prop[key] = value
|
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
|
client = self.app.client_manager.artifact
|
||||||
af_id = get_artifact_id(client, parsed_args)
|
af_id = get_artifact_id(client, parsed_args)
|
||||||
data = client.artifacts.update(
|
data = client.artifacts.update(
|
||||||
|
@ -192,6 +192,42 @@ class TestCreateArtifacts(TestArtifacts):
|
|||||||
# Check that columns are correct
|
# Check that columns are correct
|
||||||
self.assertEqual(self.COLUMNS, name_fields)
|
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):
|
def test_create_artifact_multiproperty(self):
|
||||||
arglist = ['images', 'art',
|
arglist = ['images', 'art',
|
||||||
'--artifact-version', '0.2.4',
|
'--artifact-version', '0.2.4',
|
||||||
@ -235,6 +271,40 @@ class TestUpdateArtifacts(TestArtifacts):
|
|||||||
# Check that columns are correct
|
# Check that columns are correct
|
||||||
self.assertEqual(self.COLUMNS, name_fields)
|
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):
|
def test_artifact_update_bad(self):
|
||||||
arglist = ['images',
|
arglist = ['images',
|
||||||
'fc15c365-d4f9-4b8b-a090-d9e230f1f6ba',
|
'fc15c365-d4f9-4b8b-a090-d9e230f1f6ba',
|
||||||
|
Loading…
x
Reference in New Issue
Block a user