diff --git a/cli/koji_cli/lib.py b/cli/koji_cli/lib.py index 9dbadc77b22a..7cda6f708e31 100644 --- a/cli/koji_cli/lib.py +++ b/cli/koji_cli/lib.py @@ -488,11 +488,21 @@ Available categories are: %(categories)s print(_("Downloading: %s") % relpath) - with closing(requests.get(url, stream=True)) as response: + f = open(relpath, 'ab') + headers = {} + pos = f.tell() + if pos: + headers['Range'] = f'bytes={pos}-' + + with closing(requests.get(url, headers=headers, stream=True)) as response: # raise error if occured - response.raise_for_status() + if (response.status_code == 200): # full content provided + f.close() + f = open(relpath, 'wb') + elif not (response.status_code == 416 and pos): # error? + response.raise_for_status() length = response.headers.get('content-length') - f = open(relpath, 'wb') + if length is None: f.write(response.content) length = len(response.content) @@ -506,7 +516,7 @@ Available categories are: %(categories)s f.write(chunk) if not (quiet or noprogress): _download_progress(length, l) - f.close() + f.close() if not (quiet or noprogress): print('')