From e0fc44aa42c66f68a553d710528be54e974e5464 Mon Sep 17 00:00:00 2001 From: Ivan Kravets Date: Thu, 5 Apr 2018 13:08:23 -0700 Subject: [PATCH] Reinit download session when IOError --- platformio/downloader.py | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/platformio/downloader.py b/platformio/downloader.py index 2a59c002..a712c4c6 100644 --- a/platformio/downloader.py +++ b/platformio/downloader.py @@ -31,15 +31,8 @@ class FileDownloader(object): CHUNK_SIZE = 1024 def __init__(self, url, dest_dir=None): - self._request = None - # make connection - self._request = requests.get( - url, - stream=True, - headers=util.get_request_defheaders(), - verify=version_info >= (2, 7, 9)) - if self._request.status_code != 200: - raise FDUnrecognizedStatusCode(self._request.status_code, url) + self.url = url + self._request = self.init_request() disposition = self._request.headers.get("content-disposition") if disposition and "filename=" in disposition: @@ -50,12 +43,21 @@ class FileDownloader(object): else: self._fname = [p for p in url.split("/") if p][-1] - self._progressbar = None self._destination = self._fname if dest_dir: self.set_destination( join(dest_dir.decode(getfilesystemencoding()), self._fname)) + def init_request(self): + r = requests.get( + self.url, + stream=True, + headers=util.get_request_defheaders(), + verify=version_info >= (2, 7, 9)) + if r.status_code != 200: + raise FDUnrecognizedStatusCode(r.status_code, self.url) + return r + def set_destination(self, destination): self._destination = destination @@ -87,6 +89,8 @@ class FileDownloader(object): f.write(next(itercontent)) except IOError as e: if with_progress: + # reinitialize request + self._request = self.init_request() return self.start(with_progress=False) click.secho( "Error: Please read http://bit.ly/package-manager-ioerror",