mirror of
https://github.com/TauricResearch/TradingAgents.git
synced 2026-06-16 21:06:15 +03:00
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.
43 lines
1.1 KiB
Python
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")
|