Mercurial > libervia-backend
diff sat/plugins/plugin_misc_download.py @ 3186:84b0c8b4dee0
plugin download, aesgcm: fixed handling of HTTP errors
author | Goffi <goffi@goffi.org> |
---|---|
date | Wed, 26 Feb 2020 15:54:43 +0100 |
parents | 9d0df638c8b4 |
children | d92a144f3589 |
line wrap: on
line diff
--- a/sat/plugins/plugin_misc_download.py Wed Feb 26 15:54:43 2020 +0100 +++ b/sat/plugins/plugin_misc_download.py Wed Feb 26 15:54:43 2020 +0100 @@ -169,6 +169,17 @@ except KeyError: raise exceptions.NotFound(f"No callback registered for scheme {scheme!r}") + def errbackDownload(self, file_obj, download_d, resp): + """Set file_obj and download deferred appropriatly after a network error + + @param file_obj(SatFile): file where the download must be done + @param download_d(Deferred): deffered which must be fired on complete download + @param resp(treq.response.IResponse): treq response + """ + msg = f"HTTP error ({resp.code}): {resp.phrase.decode()}" + file_obj.close(error=msg) + download_d.errback(exceptions.NetworkError(msg)) + async def downloadHTTP(self, client, uri_parsed, dest_path, options): url = uri_parsed.geturl() @@ -189,6 +200,10 @@ progress_id = file_obj.uid resp = await treq.get(url, unbuffered=True) - d = treq.collect(resp, file_obj.write) - d.addBoth(lambda _: file_obj.close()) + if resp.code == 200: + d = treq.collect(resp, file_obj.write) + d.addBoth(lambda _: file_obj.close()) + else: + d = defer.Deferred() + self.errbackDownload(file_obj, d, resp) return progress_id, d