diff --git a/swiftclient/service.py b/swiftclient/service.py index 3cedb1c4..fa39eccc 100644 --- a/swiftclient/service.py +++ b/swiftclient/service.py @@ -1003,18 +1003,18 @@ class SwiftService(object): fp = None try: no_file = options['no_download'] - make_dir = not no_file and out_file != "-" content_type = headers.get('content-type') if content_type.split(';', 1)[0] == 'text/directory': + make_dir = not no_file and out_file != "-" if make_dir and not isdir(path): mkdirs(path) - for _ in obj_body.buffer(): - continue else: - dirpath = dirname(path) - if make_dir and dirpath and not isdir(dirpath): - mkdirs(dirpath) + make_dir = not (no_file or out_file) + if make_dir: + dirpath = dirname(path) + if dirpath and not isdir(dirpath): + mkdirs(dirpath) if not no_file: if out_file == "-": @@ -1023,30 +1023,25 @@ class SwiftService(object): 'contents': obj_body } return res - elif out_file: + if out_file: fp = open(out_file, 'wb') else: if basename(path): fp = open(path, 'wb') else: pseudodir = True - no_file = True - for chunk in obj_body.buffer(): - if not no_file: - fp.write(chunk) - - else: - for _ in obj_body.buffer(): - continue + for chunk in obj_body.buffer(): + if fp is not None: + fp.write(chunk) finish_time = time() + finally: bytes_read = obj_body.bytes_read() if fp is not None: fp.close() - if 'x-object-meta-mtime' in headers \ - and not options['no_download']: + if 'x-object-meta-mtime' in headers and not no_file: mtime = float(headers['x-object-meta-mtime']) if options['out_file'] \ and not options['out_file'] == "-":