From dbd0c9ac9cf392d2c82b34a9e6e64838829302fa Mon Sep 17 00:00:00 2001 From: Tomas Kopecek Date: Sep 07 2020 08:10:59 +0000 Subject: cli: delete downloaded file with zero size Fixes: https://pagure.io/koji/issue/2451 --- diff --git a/cli/koji_cli/lib.py b/cli/koji_cli/lib.py index 890ba80..61986a5 100644 --- a/cli/koji_cli/lib.py +++ b/cli/koji_cli/lib.py @@ -525,22 +525,27 @@ def download_file(url, relpath, quiet=False, noprogress=False, size=None, # rewrite f = open(relpath, 'wb') - # closing needs to be used for requests < 2.18.0 - with closing(requests.get(url, headers=headers, stream=True)) as response: - if response.status_code in (200, 416): # full content provided or reaching behing EOF - # rewrite in such case - f.close() - f = open(relpath, 'wb') - response.raise_for_status() - length = filesize or int(response.headers.get('content-length') or 0) - for chunk in response.iter_content(chunk_size=1024**2): - pos += len(chunk) - f.write(chunk) - if not (quiet or noprogress): - _download_progress(length, pos, filesize) - if not length and not (quiet or noprogress): - _download_progress(pos, pos, filesize) - f.close() + try: + # closing needs to be used for requests < 2.18.0 + with closing(requests.get(url, headers=headers, stream=True)) as response: + if response.status_code in (200, 416): # full content provided or reaching behind EOF + # rewrite in such case + f.close() + f = open(relpath, 'wb') + response.raise_for_status() + length = filesize or int(response.headers.get('content-length') or 0) + for chunk in response.iter_content(chunk_size=1024**2): + pos += len(chunk) + f.write(chunk) + if not (quiet or noprogress): + _download_progress(length, pos, filesize) + if not length and not (quiet or noprogress): + _download_progress(pos, pos, filesize) + finally: + f.close() + if pos == 0: + # nothing was downloaded, e.g file not found + os.unlink(relpath) if not (quiet or noprogress): print('')