Raise error if there are more than 1 artifact with same name/version
Change-Id: Ifa69a12de15b854c6b27d2b3edd37d0eb47eabf8
This commit is contained in:
parent
bcc6c0d821
commit
f79904c3f2
@ -29,6 +29,8 @@ from oslo_utils import encodeutils
|
||||
from oslo_utils import importutils
|
||||
import requests
|
||||
|
||||
from glareclient import exc
|
||||
|
||||
SENSITIVE_HEADERS = ('X-Auth-Token', )
|
||||
|
||||
|
||||
@ -159,3 +161,15 @@ def save_blob(data, path):
|
||||
finally:
|
||||
if path is not None:
|
||||
blob.close()
|
||||
|
||||
|
||||
def get_artifact_id(client, parsed_args):
|
||||
if parsed_args.id:
|
||||
return parsed_args.name
|
||||
try:
|
||||
return client.artifacts.get_by_name(
|
||||
parsed_args.name,
|
||||
version=parsed_args.artifact_version,
|
||||
type_name=parsed_args.type_name)['id']
|
||||
except exc.BadRequest as e:
|
||||
exit(msg=e.details)
|
||||
|
@ -42,18 +42,6 @@ def print_artifact(client, data, type_name):
|
||||
table)
|
||||
|
||||
|
||||
def get_artifact_id(client, parsed_args):
|
||||
if parsed_args.id:
|
||||
if parsed_args.artifact_version != 'latest':
|
||||
LOG.warning('Specified version is not considered when '
|
||||
'receiving of the artifact by ID.')
|
||||
return parsed_args.name
|
||||
|
||||
return client.artifacts.get_by_name(parsed_args.name,
|
||||
version=parsed_args.artifact_version,
|
||||
type_name=parsed_args.type_name)['id']
|
||||
|
||||
|
||||
class ListArtifacts(command.Lister):
|
||||
"""List of artifacts"""
|
||||
|
||||
@ -151,7 +139,7 @@ class ShowArtifact(command.Lister):
|
||||
LOG.debug('take_action({0})'.format(parsed_args))
|
||||
client = self.app.client_manager.artifact
|
||||
|
||||
af_id = get_artifact_id(client, parsed_args)
|
||||
af_id = glare_utils.get_artifact_id(client, parsed_args)
|
||||
data = client.artifacts.get(af_id,
|
||||
type_name=parsed_args.type_name)
|
||||
|
||||
@ -311,7 +299,7 @@ class UpdateArtifact(command.Lister):
|
||||
prop[key][k] = v
|
||||
|
||||
client = self.app.client_manager.artifact
|
||||
af_id = get_artifact_id(client, parsed_args)
|
||||
af_id = glare_utils.get_artifact_id(client, parsed_args)
|
||||
data = client.artifacts.update(
|
||||
af_id, type_name=parsed_args.type_name,
|
||||
remove_props=parsed_args.remove_property, **prop)
|
||||
@ -351,7 +339,7 @@ class DeleteArtifact(command.Command):
|
||||
def take_action(self, parsed_args):
|
||||
LOG.debug('take_action({0})'.format(parsed_args))
|
||||
client = self.app.client_manager.artifact
|
||||
af_id = get_artifact_id(client, parsed_args)
|
||||
af_id = glare_utils.get_artifact_id(client, parsed_args)
|
||||
client.artifacts.delete(af_id,
|
||||
type_name=parsed_args.type_name)
|
||||
|
||||
@ -388,7 +376,7 @@ class ActivateArtifact(command.Lister):
|
||||
def take_action(self, parsed_args):
|
||||
LOG.debug('take_action({0})'.format(parsed_args))
|
||||
client = self.app.client_manager.artifact
|
||||
af_id = get_artifact_id(client, parsed_args)
|
||||
af_id = glare_utils.get_artifact_id(client, parsed_args)
|
||||
data = client.artifacts.activate(af_id,
|
||||
type_name=parsed_args.type_name)
|
||||
return print_artifact(client, data, parsed_args.type_name)
|
||||
@ -426,7 +414,7 @@ class DeactivateArtifact(command.Lister):
|
||||
def take_action(self, parsed_args):
|
||||
LOG.debug('take_action({0})'.format(parsed_args))
|
||||
client = self.app.client_manager.artifact
|
||||
af_id = get_artifact_id(client, parsed_args)
|
||||
af_id = glare_utils.get_artifact_id(client, parsed_args)
|
||||
data = client.artifacts.deactivate(af_id,
|
||||
type_name=parsed_args.type_name)
|
||||
return print_artifact(client, data, parsed_args.type_name)
|
||||
@ -464,7 +452,7 @@ class ReactivateArtifact(command.Lister):
|
||||
def take_action(self, parsed_args):
|
||||
LOG.debug('take_action({0})'.format(parsed_args))
|
||||
client = self.app.client_manager.artifact
|
||||
af_id = get_artifact_id(client, parsed_args)
|
||||
af_id = glare_utils.get_artifact_id(client, parsed_args)
|
||||
data = client.artifacts.reactivate(af_id,
|
||||
type_name=parsed_args.type_name)
|
||||
return print_artifact(client, data, parsed_args.type_name)
|
||||
@ -502,7 +490,7 @@ class PublishArtifact(command.Lister):
|
||||
def take_action(self, parsed_args):
|
||||
LOG.debug('take_action({0})'.format(parsed_args))
|
||||
client = self.app.client_manager.artifact
|
||||
af_id = get_artifact_id(client, parsed_args)
|
||||
af_id = glare_utils.get_artifact_id(client, parsed_args)
|
||||
data = client.artifacts.publish(af_id,
|
||||
type_name=parsed_args.type_name)
|
||||
return print_artifact(client, data, parsed_args.type_name)
|
||||
@ -545,7 +533,7 @@ class AddTag(command.Lister):
|
||||
def take_action(self, parsed_args):
|
||||
LOG.debug('take_action({0})'.format(parsed_args))
|
||||
client = self.app.client_manager.artifact
|
||||
af_id = get_artifact_id(client, parsed_args)
|
||||
af_id = glare_utils.get_artifact_id(client, parsed_args)
|
||||
data = client.artifacts.add_tag(
|
||||
af_id, tag_value=parsed_args.tag, type_name=parsed_args.type_name)
|
||||
return print_artifact(client, data, parsed_args.type_name)
|
||||
@ -588,7 +576,7 @@ class RemoveTag(command.Lister):
|
||||
def take_action(self, parsed_args):
|
||||
LOG.debug('take_action({0})'.format(parsed_args))
|
||||
client = self.app.client_manager.artifact
|
||||
af_id = get_artifact_id(client, parsed_args)
|
||||
af_id = glare_utils.get_artifact_id(client, parsed_args)
|
||||
data = client.artifacts.remove_tag(
|
||||
af_id, tag_value=parsed_args.tag, type_name=parsed_args.type_name)
|
||||
return print_artifact(client, data, parsed_args.type_name)
|
||||
|
@ -37,18 +37,6 @@ def _default_blob_property(type_name):
|
||||
utils.exit('Unknown artifact type. Please specify --blob-property.')
|
||||
|
||||
|
||||
def get_artifact_id(client, parsed_args):
|
||||
if parsed_args.id:
|
||||
if parsed_args.artifact_version != 'latest':
|
||||
LOG.warning('Specified version is not considered when '
|
||||
'receiving of the artifact by ID.')
|
||||
return parsed_args.name
|
||||
|
||||
return client.artifacts.get_by_name(parsed_args.name,
|
||||
version=parsed_args.artifact_version,
|
||||
type_name=parsed_args.type_name)['id']
|
||||
|
||||
|
||||
class UploadBlob(command.ShowOne):
|
||||
"""Upload blob"""
|
||||
|
||||
@ -102,7 +90,7 @@ class UploadBlob(command.ShowOne):
|
||||
def take_action(self, parsed_args):
|
||||
LOG.debug('take_action({0})'.format(parsed_args))
|
||||
client = self.app.client_manager.artifact
|
||||
af_id = get_artifact_id(client, parsed_args)
|
||||
af_id = utils.get_artifact_id(client, parsed_args)
|
||||
|
||||
if not parsed_args.blob_property:
|
||||
parsed_args.blob_property = _default_blob_property(
|
||||
@ -186,7 +174,7 @@ class DownloadBlob(command.Command):
|
||||
if not parsed_args.blob_property:
|
||||
parsed_args.blob_property = _default_blob_property(
|
||||
parsed_args.type_name)
|
||||
af_id = get_artifact_id(client, parsed_args)
|
||||
af_id = utils.get_artifact_id(client, parsed_args)
|
||||
data = client.artifacts.download_blob(af_id,
|
||||
parsed_args.blob_property,
|
||||
type_name=parsed_args.type_name)
|
||||
@ -258,7 +246,7 @@ class AddLocation(command.ShowOne):
|
||||
def take_action(self, parsed_args):
|
||||
LOG.debug('take_action({0})'.format(parsed_args))
|
||||
client = self.app.client_manager.artifact
|
||||
af_id = get_artifact_id(client, parsed_args)
|
||||
af_id = utils.get_artifact_id(client, parsed_args)
|
||||
|
||||
if not parsed_args.blob_property:
|
||||
parsed_args.blob_property = _default_blob_property(
|
||||
|
@ -33,7 +33,7 @@ class TestUpload(testtools.TestCase):
|
||||
@mock.patch('glareclient.osc.v1.blobs.progressbar')
|
||||
@mock.patch('glareclient.osc.v1.blobs.sys')
|
||||
@mock.patch('glareclient.osc.v1.blobs.open', create=True)
|
||||
@mock.patch('glareclient.osc.v1.blobs.get_artifact_id')
|
||||
@mock.patch('glareclient.common.utils.get_artifact_id')
|
||||
def test_upload_file_progress(self, mock_get_id,
|
||||
mock_open, mock_sys, mock_progressbar):
|
||||
mock_parsed_args = mock.Mock(name='test-id',
|
||||
@ -58,7 +58,7 @@ class TestUpload(testtools.TestCase):
|
||||
|
||||
@mock.patch('glareclient.osc.v1.blobs.sys')
|
||||
@mock.patch('glareclient.osc.v1.blobs.open', create=True)
|
||||
@mock.patch('glareclient.osc.v1.blobs.get_artifact_id')
|
||||
@mock.patch('glareclient.common.utils.get_artifact_id')
|
||||
def test_upload_file_no_progress(self, mock_get_id, mock_open, mock_sys):
|
||||
mock_parsed_args = mock.Mock(name='test-id',
|
||||
id=True,
|
||||
@ -80,7 +80,7 @@ class TestUpload(testtools.TestCase):
|
||||
assert_called_once_with(*upload_args, **upload_kwargs)
|
||||
|
||||
@mock.patch('glareclient.osc.v1.blobs.sys')
|
||||
@mock.patch('glareclient.osc.v1.blobs.get_artifact_id')
|
||||
@mock.patch('glareclient.common.utils.get_artifact_id')
|
||||
def test_upload_file_stdin(self, mock_get_id, mock_sys):
|
||||
mock_sys.stdin.isatty.return_value = False
|
||||
mock_parsed_args = mock.Mock(name='test-id',
|
||||
|
@ -110,13 +110,32 @@ class Controller(object):
|
||||
"""Get information about an artifact by name.
|
||||
|
||||
:param name: name of the artifact to get.
|
||||
:param version: version of the artifact to get
|
||||
:param type_name: type name of the artifact
|
||||
"""
|
||||
type_name = self._check_type_name(type_name)
|
||||
url = '/artifacts/%s?version=%s&name=%s' % (type_name, version, name)
|
||||
resp, body = self.http_client.get(url)
|
||||
if not body[type_name]:
|
||||
utils.exit('Artifact with name=%s and version=%s not found.' %
|
||||
(name, version))
|
||||
arts = body[type_name]
|
||||
if not arts:
|
||||
msg = ('Artifact with name=%s and version=%s not found.' %
|
||||
(name, version))
|
||||
raise exc.BadRequest(msg)
|
||||
if len(arts) > 1:
|
||||
if type_name != "all":
|
||||
output = "\n".join([
|
||||
"Artifact: %s, owner: %s, visibility: %s" % (
|
||||
i['id'], i['owner'], i['visibility']) for i in arts])
|
||||
else:
|
||||
output = "\n".join([
|
||||
"Artifact: %s, owner: %s, visibility: %s, type: %s" % (
|
||||
i['id'], i['owner'], i['visibility'], i['type_name'])
|
||||
for i in arts])
|
||||
msg = (
|
||||
'There are more then one artifact with name=%s and version=%s.'
|
||||
' Please provide the concrete id from the list:\n%s' %
|
||||
(name, version, output))
|
||||
raise exc.BadRequest(msg)
|
||||
return body[type_name][0]
|
||||
|
||||
def list(self, type_name=None, **kwargs):
|
||||
|
Loading…
x
Reference in New Issue
Block a user