Preserve uncertain-write evidence and safe transport diagnostics for v0.1.3 [skip ci]

This commit is contained in:
渡口浪人
2026-10-16 10:30:08 +08:00
parent 8a3c616b5f
commit d2f02d8054
9 changed files with 105 additions and 10 deletions
+19 -1
View File
@@ -51,13 +51,30 @@ class SafeTransport:
timeout=(5, 120 if endpoint == "/upload" else 30),
allow_redirects=False,
)
except requests.RequestException:
except requests.RequestException as exc:
# Persist only fixed categories: exception text and download URLs may
# contain credentials. Unknown writes must still never be replayed.
category = next(
(
label
for kind, label in (
(requests.ConnectTimeout, "connect_timeout"),
(requests.ReadTimeout, "read_timeout"),
(requests.exceptions.SSLError, "tls_error"),
(requests.ConnectionError, "connection_error"),
(requests.Timeout, "timeout"),
)
if isinstance(exc, kind)
),
"request_error",
)
raise FlowError(
E.WRITE_RESULT_UNKNOWN if write else E.CLOUD_UNAVAILABLE,
"Cloud write outcome is unknown"
if write
else "Device cloud is unavailable",
502,
details={"transport_error": category},
) from None
if response.status_code != 200:
code = (
@@ -73,6 +90,7 @@ class SafeTransport:
code,
"Device cloud request failed",
429 if code == E.RATE_LIMITED else 502,
details={"http_status": response.status_code},
)
if binary:
if len(response.content) > 20 * 1024 * 1024: