From 583adc34f8cd4abd1048c57c058e88b8c68d5780 Mon Sep 17 00:00:00 2001 From: Cindy Pallares Date: Tue, 17 Mar 2015 17:20:45 -0500 Subject: [PATCH] Check image-download for redirection Currently when you download an image without specifying a file or redirecting the output, the image is dumped into the console as gibberish. We can avoid this if we check if file is being redirected or if a file is specified. Change-Id: I257760752f05b82b935cf19fb10573ee7ff1395d --- glanceclient/v1/shell.py | 11 ++++++++--- glanceclient/v2/shell.py | 16 ++++++++++++---- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/glanceclient/v1/shell.py b/glanceclient/v1/shell.py index bc689da..286d2a8 100644 --- a/glanceclient/v1/shell.py +++ b/glanceclient/v1/shell.py @@ -147,8 +147,8 @@ def do_image_show(gc, args): @utils.arg('--file', metavar='', help='Local file to save downloaded image data to. ' - 'If this is not specified the image data will be ' - 'written to stdout.') + 'If this is not specified and there is no redirection ' + 'the image data will be not be saved.') @utils.arg('image', metavar='', help='Name or ID of image to download.') @utils.arg('--progress', action='store_true', default=False, help='Show download progress bar.') @@ -158,7 +158,12 @@ def do_image_download(gc, args): body = image.data() if args.progress: body = progressbar.VerboseIteratorWrapper(body, len(body)) - utils.save_image(body, args.file) + if not (sys.stdout.isatty() and args.file is None): + utils.save_image(body, args.file) + else: + print('No redirection or local file specified for downloaded image ' + 'data. Please specify a local file with --file to save ' + 'downloaded image or redirect output to another source.') @utils.arg('--id', metavar='', diff --git a/glanceclient/v2/shell.py b/glanceclient/v2/shell.py index 2628919..0fd3e46 100644 --- a/glanceclient/v2/shell.py +++ b/glanceclient/v2/shell.py @@ -13,6 +13,8 @@ # License for the specific language governing permissions and limitations # under the License. +import sys + from glanceclient.common import progressbar from glanceclient.common import utils from glanceclient import exc @@ -44,7 +46,7 @@ def get_image_schema(): ' May be used multiple times.')) @utils.arg('--file', metavar='', help='Local file that contains disk image to be uploaded ' - 'during creation. Alternatively, images can be passed ' + 'during creation. Must be present if images are not passed ' 'to the client via stdin.') @utils.arg('--progress', action='store_true', default=False, help='Show upload progress bar.') @@ -247,8 +249,8 @@ def do_explain(gc, args): @utils.arg('--file', metavar='', help='Local file to save downloaded image data to. ' - 'If this is not specified the image data will be ' - 'written to stdout.') + 'If this is not specified and there is no redirection ' + 'the image data will be not be saved.') @utils.arg('id', metavar='', help='ID of image to download.') @utils.arg('--progress', action='store_true', default=False, help='Show download progress bar.') @@ -257,7 +259,13 @@ def do_image_download(gc, args): body = gc.images.data(args.id) if args.progress: body = progressbar.VerboseIteratorWrapper(body, len(body)) - utils.save_image(body, args.file) + if not (sys.stdout.isatty() and args.file is None): + utils.save_image(body, args.file) + else: + msg = ('No redirection or local file specified for downloaded image ' + 'data. Please specify a local file with --file to save ' + 'downloaded image or redirect output to another source.') + utils.exit(msg) @utils.arg('--file', metavar='',