[core] Catch body-read errors in download_content (#16023)

This commit is contained in:
J. Nick Koston
2026-04-29 14:06:41 -04:00
committed by GitHub
parent e5b1991cf7
commit 44cabc191d
2 changed files with 68 additions and 1 deletions
+5 -1
View File
@@ -175,6 +175,11 @@ def download_content(url: str, path: Path, timeout: int = NETWORK_TIMEOUT) -> by
headers={"User-agent": f"ESPHome/{__version__} (https://esphome.io)"},
)
req.raise_for_status()
# `.content` reads the body lazily; chunked-decode, gzip-decode,
# and mid-stream connection errors all surface here as
# RequestException subclasses, so this needs the same fall-back
# treatment as the request itself.
data = req.content
except requests.exceptions.RequestException as e:
if path.exists():
_LOGGER.warning(
@@ -185,7 +190,6 @@ def download_content(url: str, path: Path, timeout: int = NETWORK_TIMEOUT) -> by
return path.read_bytes()
raise cv.Invalid(f"Could not download from {url}: {e}") from e
data = req.content
write_file(path, data)
_write_etag(path, req.headers.get(ETAG))
return data