| tests/cli/test_sector_momentum_filter.py:1892: in test_overheated_sector_filters_symbol
|
| result = apply_filter(
|
| apply_filter = <function apply_sector_momentum_filter at 0x126ac8d60>
|
| date = <class 'datetime.date'>
|
| mock_check = <MagicMock name='check_sector_overheated' id='5027222144'>
|
| picks = [{'momentum_final_score': 150.0, 'sector': 'Consumer Defensive', 'symbol': 'BG'}]
|
| self = <test_sector_momentum_filter.TestOverheatedSectorFilter object at 0x12630a990>
|
| rtrader/cli/trader_eod_core/services/log_formatting_service.py:1368: in apply_sector_momentum_filter
|
| _spy_status, _spy_text = read_text_with_status(_spy_path)
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| CAUTION_WORSENING_BLOCK = True
|
| CHANNEL_REGIME_FILTER_ENABLED = True
|
| EXHAUSTION_FILTER_ENABLED = True
|
| INSTITUTIONAL_DISTRIBUTION_FILTER_ENABLED = True
|
| NEGATIVE_MOMENTUM_FILTER_ENABLED = False
|
| NEGATIVE_SCORE_FILTER_ENABLED = False
|
| NfsReadStatus = <enum 'NfsReadStatus'>
|
| OK_WORSENING_FILTER_ENABLED = True
|
| OPTIONS_BEARISH_THRESHOLD = 1.0
|
| OPTIONS_BULLISH_THRESHOLD = 1.0
|
| OPTIONS_SENTIMENT_ENABLED = True
|
| OVERHEATED_SECTOR_FILTER_ENABLED = True
|
| SECTOR_BREAKOUT_EXCEPTION_ENABLED = False
|
| SECTOR_BREAKOUT_LOOKBACK_DAYS = 1
|
| SECTOR_BREAKOUT_MIN_BREAKOUT_CONF = 1.0
|
| SECTOR_BREAKOUT_MIN_CORRELATION = 1.0
|
| SECTOR_BREAKOUT_MIN_MEMBERSHIP_CONF = 1.0
|
| SYMBOL_CROSS_CHECK_THRESHOLD = 1.0
|
| TREND_STATE_FILTER_ENABLED = False
|
| _capitulation = False
|
| _find_spy_snap = <function find_snapshot_json at 0x126fc9760>
|
| _json_spy = <module 'json' from '/Users/cao/.pyenv/versions/3.12.12/lib/python3.12/json/__init__.py'>
|
| _load_sector_channel = <function apply_sector_momentum_filter.<locals>._load_sector_channel at 0x12ba31440>
|
| _market_defensive = False
|
| _sector_channel_cache = {}
|
| _spy_dvr = 0.0
|
| _spy_path = PosixPath('/Users/cao/mnt/silverssd/minio-mirror/data/snapshots/2026-01-28/SPY.json')
|
| _spy_regime = ''
|
| _spy_slope = 0.0
|
| _spy_snapshot_row = None
|
| _symbol_options_bearish = <function apply_sector_momentum_filter.<locals>._symbol_options_bearish at 0x12ba31940>
|
| bearish_families = set()
|
| cfg = <MagicMock id='5027247840'>
|
| exempt_symbols = None
|
| market_stress_level = None
|
| picks = [{'momentum_final_score': 150.0, 'sector': 'Consumer Defensive', 'symbol': 'BG'}]
|
| read_text_with_status = <function read_text_with_status at 0x126fc8f40>
|
| result = SectorMomentumFilterResult(filtered_picks=[], filtered_out_by_sector={}, saved_by_individual_momentum=[], filtered_out...stribution=[], filtered_out_by_channel_regime={}, market_defensive=False, spy_momentum_guard=False, spy_regime_info='')
|
| sector_direction = None
|
| sector_momentum_data = None
|
| sector_options_sentiment = None
|
| snapshot_dir = None
|
| symbol_options_sentiment = None
|
| symbol_sectors = {'BG': 'Consumer Defensive'}
|
| trading_day = datetime.date(2026, 1, 28)
|
| trend_stats_cache = {}
|
| weak_sectors = set()
|
| rtrader/utils/nfs.py:262: in read_text_with_status
|
| minio_text = _read_from_minio(s3key)
|
| ^^^^^^^^^^^^^^^^^^^^^^^
|
| path = PosixPath('/Users/cao/mnt/silverssd/minio-mirror/data/snapshots/2026-01-28/SPY.json')
|
| s3key = 'snapshots/2026-01-28/SPY.json'
|
| timeout = 2.0
|
| rtrader/utils/nfs.py:225: in _read_from_minio
|
| data = response.read().decode("utf-8")
|
| ^^^^^^^^^^^^^^^
|
| _is_minio_reachable = <function _is_minio_reachable at 0x12663fa60>
|
| client = <minio.api.Minio object at 0x12ba767e0>
|
| minio_client = <function minio_client at 0x12663fce0>
|
| response = <urllib3.response.HTTPResponse object at 0x12b963ca0>
|
| s3key = 'snapshots/2026-01-28/SPY.json'
|
| ../.pyenv/versions/3.12.12/lib/python3.12/site-packages/urllib3/response.py:980: in read
|
| data = self._raw_read(amt)
|
| ^^^^^^^^^^^^^^^^^^^
|
| amt = None
|
| cache_content = False
|
| decode_content = True
|
| self = <urllib3.response.HTTPResponse object at 0x12b963ca0>
|
| ../.pyenv/versions/3.12.12/lib/python3.12/site-packages/urllib3/response.py:904: in _raw_read
|
| data = self._fp_read(amt, read1=read1) if not fp_closed else b""
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| amt = None
|
| fp_closed = False
|
| read1 = False
|
| self = <urllib3.response.HTTPResponse object at 0x12b963ca0>
|
| ../.pyenv/versions/3.12.12/lib/python3.12/site-packages/urllib3/response.py:887: in _fp_read
|
| return self._fp.read(amt) if amt is not None else self._fp.read()
|
| ^^^^^^^^^^^^^^^
|
| amt = None
|
| c_int_max = 2147483647
|
| read1 = False
|
| self = <urllib3.response.HTTPResponse object at 0x12b963ca0>
|
| ../.pyenv/versions/3.12.12/lib/python3.12/http/client.py:495: in read
|
| s = self._safe_read(self.length)
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| amt = None
|
| self = <http.client.HTTPResponse object at 0x12bad5000>
|
| ../.pyenv/versions/3.12.12/lib/python3.12/http/client.py:642: in _safe_read
|
| data = self.fp.read(amt)
|
| ^^^^^^^^^^^^^^^^^
|
| amt = 111495
|
| self = <http.client.HTTPResponse object at 0x12bad5000>
|
| ../.pyenv/versions/3.12.12/lib/python3.12/socket.py:720: in readinto
|
| return self._sock.recv_into(b)
|
| ^^^^^^^^^^^^^^^^^^^^^^^
|
| E Failed: Timeout (>60.0s) from pytest-timeout.
|
| b = <memory at 0x12b95a980>
|
| self = <socket.SocketIO object at 0x12bad49d0>
|