diff options
| author | Jenkins <jenkins@review.openstack.org> | 2016-03-09 17:30:23 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2016-03-09 17:30:23 +0000 |
| commit | 26d2a0f4c29d15208b426443e7a5f8570abdc323 (patch) | |
| tree | 9abe306dd9e6732f55eb1265b050fd83b09231c3 | |
| parent | 8d87a244e04e623495f2e9c0a0f239d47faf8e0e (diff) | |
| parent | c077858dd6e0cd827af2418e1a05ca1f27937764 (diff) | |
| download | python-glanceclient-1.1.1.tar.gz | |
Merge "Fix the download error when the image locations are blank" into stable/liberty1.1.1
| -rw-r--r-- | glanceclient/tests/unit/v2/test_images.py | 8 | ||||
| -rw-r--r-- | glanceclient/v2/images.py | 6 | ||||
| -rw-r--r-- | glanceclient/v2/shell.py | 4 |
3 files changed, 16 insertions, 2 deletions
diff --git a/glanceclient/tests/unit/v2/test_images.py b/glanceclient/tests/unit/v2/test_images.py index 7260f47..5b18e04 100644 --- a/glanceclient/tests/unit/v2/test_images.py +++ b/glanceclient/tests/unit/v2/test_images.py @@ -14,7 +14,7 @@ # under the License. import errno - +import mock import testtools from glanceclient import exc @@ -844,6 +844,12 @@ class TestController(testtools.TestCase): body = ''.join([b for b in body]) self.assertEqual('CCC', body) + def test_download_no_data(self): + resp = utils.FakeResponse(headers={}, status_code=204) + self.controller.http_client.get = mock.Mock(return_value=(resp, None)) + body = self.controller.data('image_id') + self.assertEqual(None, body) + def test_update_replace_prop(self): image_id = '3a4560a1-e585-443e-9b39-553b46ec92d1' params = {'name': 'pong'} diff --git a/glanceclient/v2/images.py b/glanceclient/v2/images.py index 451a0fe..2d68f64 100644 --- a/glanceclient/v2/images.py +++ b/glanceclient/v2/images.py @@ -14,8 +14,8 @@ # under the License. import json - from oslo_utils import encodeutils +from requests import codes import six from six.moves.urllib import parse import warlock @@ -189,9 +189,13 @@ class Controller(object): :param image_id: ID of the image to download. :param do_checksum: Enable/disable checksum validation. + :returns: An interable body or None """ url = '/v2/images/%s/file' % image_id resp, body = self.http_client.get(url) + if resp.status_code == codes.no_content: + return None + checksum = resp.headers.get('content-md5', None) content_length = int(resp.headers.get('content-length', 0)) diff --git a/glanceclient/v2/shell.py b/glanceclient/v2/shell.py index 86a1f3d..dab9e67 100644 --- a/glanceclient/v2/shell.py +++ b/glanceclient/v2/shell.py @@ -276,6 +276,10 @@ def do_explain(gc, args): def do_image_download(gc, args): """Download a specific image.""" body = gc.images.data(args.id) + if body is None: + msg = ('Image %s has no data.' % args.id) + utils.exit(msg) + if args.progress: body = progressbar.VerboseIteratorWrapper(body, len(body)) if not (sys.stdout.isatty() and args.file is None): |
