Files
tradingagents/tests/test_stocktwits_resilience.py
Yijia-Xiao 308757c999 fix(data): catch http.client transport errors in StockTwits
A truncated/incomplete chunked response raises http.client exceptions
(IncompleteRead/BadStatusLine) that are not OSErrors, so they bypassed the
existing handler and crashed the analysis. Broaden the catch so the fetch
degrades to its placeholder string like every other transport failure.
2026-06-14 07:23:19 +00:00

43 lines
1.1 KiB
Python

"""StockTwits fetch degrades (never raises) on transport errors, including the
http.client chunked-transfer exceptions that are not OSErrors (#1024)."""
from __future__ import annotations
import http.client
from unittest.mock import patch
from urllib.error import HTTPError
import pytest
from tradingagents.dataflows import stocktwits
def _raise(exc):
class _Resp:
def __enter__(self_inner):
return self_inner
def __exit__(self_inner, *a):
return False
def read(self_inner):
raise exc
return _Resp()
@pytest.mark.unit
class StockTwitsResilienceTests:
@pytest.mark.parametrize(
"exc",
[
http.client.IncompleteRead(b""),
HTTPError("url", 503, "down", {}, None),
TimeoutError("slow"),
],
)
def test_transport_errors_return_placeholder(self, exc):
with patch.object(stocktwits, "urlopen", return_value=_raise(exc)):
out = stocktwits.fetch_stocktwits_messages("NVDA")
assert "unavailable" in out.lower()
assert out.startswith("<stocktwits unavailable")