[gw0] darwin -- Python 3.12.12 /Users/cao/.pyenv/versions/3.12.12/bin/python3.12 [1m [31mrtrader/utils/nfs.py [0m:289: in read_text_with_status [0mresult = future.result(timeout=timeout) [90m [39;49;00m ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [90m [39;49;00m executor = future = path = PosixPath('/Users/cao/mnt/silverssd/minio-mirror/data/snapshots/2026-01-30/SPY.json') s3key = 'snapshots/2026-01-30/SPY.json' timeout = 2.0 [1m [31m../.pyenv/versions/3.12.12/lib/python3.12/concurrent/futures/_base.py [0m:456: in result [0m [94mreturn [39;49;00m [96mself [39;49;00m.__get_result() [90m [39;49;00m ^^^^^^^^^^^^^^^^^^^ [90m [39;49;00m self = None timeout = 2.0 [1m [31m../.pyenv/versions/3.12.12/lib/python3.12/concurrent/futures/_base.py [0m:401: in __get_result [0m [94mraise [39;49;00m [96mself [39;49;00m._exception [90m [39;49;00m self = None [1m [31m../.pyenv/versions/3.12.12/lib/python3.12/concurrent/futures/thread.py [0m:59: in run [0mresult = [96mself [39;49;00m.fn(* [96mself [39;49;00m.args, ** [96mself [39;49;00m.kwargs) [90m [39;49;00m ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [90m [39;49;00m self = None [1m [31m../.pyenv/versions/3.12.12/lib/python3.12/pathlib.py [0m:1027: in read_text [0m [94mwith [39;49;00m [96mself [39;49;00m.open(mode= [33m' [39;49;00m [33mr [39;49;00m [33m' [39;49;00m, encoding=encoding, errors=errors) [94mas [39;49;00m f: [90m [39;49;00m ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [90m [39;49;00m encoding = 'locale' errors = None self = PosixPath('/Users/cao/mnt/silverssd/minio-mirror/data/snapshots/2026-01-30/SPY.json') [1m [31m../.pyenv/versions/3.12.12/lib/python3.12/pathlib.py [0m:1013: in open [0m [94mreturn [39;49;00m io.open( [96mself [39;49;00m, mode, buffering, encoding, errors, newline) [90m [39;49;00m ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [90m [39;49;00m [1m [31mE FileNotFoundError: [Errno 2] No such file or directory: '/Users/cao/mnt/silverssd/minio-mirror/data/snapshots/2026-01-30/SPY.json' [0m buffering = -1 encoding = 'locale' errors = None mode = 'r' newline = None self = PosixPath('/Users/cao/mnt/silverssd/minio-mirror/data/snapshots/2026-01-30/SPY.json') [33mDuring handling of the above exception, another exception occurred: [0m [1m [31mtests/cli/test_sector_momentum_filter.py [0m:1088: in test_breakout_exception_disabled_by_setting [0mresult = apply_filter( [90m [39;49;00m apply_filter = date = mock_breakout = mock_settings = picks = [{'momentum_final_score': 50.0, 'sector': 'Consumer Defensive', 'symbol': 'BG'}] self = [1m [31mrtrader/cli/trader_eod_core/services/log_formatting_service.py [0m:1398: in apply_sector_momentum_filter [0m_spy_status, _spy_text = read_text_with_status(_spy_path) [90m [39;49;00m ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [90m [39;49;00m 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 = OK_WORSENING_FILTER_ENABLED = True OPTIONS_BEARISH_THRESHOLD = 1.0 OPTIONS_BULLISH_THRESHOLD = 1.0 OPTIONS_SENTIMENT_ENABLED = True OVERHEATED_SECTOR_FILTER_ENABLED = False SECTOR_BREAKOUT_EXCEPTION_ENABLED = False SECTOR_BREAKOUT_LOOKBACK_DAYS = 90 SECTOR_BREAKOUT_MIN_BREAKOUT_CONF = 0.6 SECTOR_BREAKOUT_MIN_CORRELATION = 0.3 SECTOR_BREAKOUT_MIN_MEMBERSHIP_CONF = 0.4 SYMBOL_CROSS_CHECK_THRESHOLD = 1.0 TREND_STATE_FILTER_ENABLED = False _capitulation = False _find_spy_snap = _json_spy = _load_sector_channel = ._load_sector_channel at 0x127afb060> _market_defensive = False _sector_channel_cache = {} _spy_dvr = 0.0 _spy_path = PosixPath('/Users/cao/mnt/silverssd/minio-mirror/data/snapshots/2026-01-30/SPY.json') _spy_regime = '' _spy_slope = 0.0 _spy_snapshot_row = None _symbol_options_bearish = ._symbol_options_bearish at 0x1279ad8a0> bearish_families = set() cfg = exempt_symbols = None market_stress_level = None picks = [{'momentum_final_score': 50.0, 'sector': 'Consumer Defensive', 'symbol': 'BG'}] read_text_with_status = 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, 30) trend_stats_cache = {} weak_sectors = {'XLP'} [1m [31mrtrader/utils/nfs.py [0m:312: in read_text_with_status [0mminio_text = _read_from_minio(s3key) [90m [39;49;00m ^^^^^^^^^^^^^^^^^^^^^^^ [90m [39;49;00m executor = future = path = PosixPath('/Users/cao/mnt/silverssd/minio-mirror/data/snapshots/2026-01-30/SPY.json') s3key = 'snapshots/2026-01-30/SPY.json' timeout = 2.0 [1m [31mrtrader/utils/nfs.py [0m:239: in _read_from_minio [0mresponse = client.get_object(bucket_name= [33m" [39;49;00m [33mdata [39;49;00m [33m" [39;49;00m, object_name=s3key) [90m [39;49;00m ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [90m [39;49;00m _is_minio_reachable = client = minio_client = s3key = 'snapshots/2026-01-30/SPY.json' [1m [31m../.pyenv/versions/3.12.12/lib/python3.12/site-packages/minio/api.py [0m:1257: in get_object [0m [94mreturn [39;49;00m [96mself [39;49;00m._execute( [90m [39;49;00m bucket_name = 'data' extra_query_params = None headers = {} length = 0 object_name = 'snapshots/2026-01-30/SPY.json' offset = 0 request_headers = None self = ssec = None version_id = None [1m [31m../.pyenv/versions/3.12.12/lib/python3.12/site-packages/minio/api.py [0m:444: in _execute [0m [94mreturn [39;49;00m [96mself [39;49;00m._url_open( [90m [39;49;00m body = None bucket_name = 'data' headers = {} method = 'GET' no_body_trace = False object_name = 'snapshots/2026-01-30/SPY.json' preload_content = False query_params = None region = 'us-east-1' self = [1m [31m../.pyenv/versions/3.12.12/lib/python3.12/site-packages/minio/api.py [0m:306: in _url_open [0mresponse = [96mself [39;49;00m._http.urlopen( [90m [39;49;00m body = None bucket_name = 'data' creds = Credentials(access_key='minioadmin', secret_key='minioadmin', session_token=None, expiration=None) date = datetime.datetime(2026, 7, 5, 11, 5, 53, 717508, tzinfo=datetime.timezone.utc) headers = {'Authorization': 'AWS4-HMAC-SHA256 Credential=minioadmin/20260705/us-east-1/s3/aws4_request, SignedHeaders=host;x-amz...m64) minio-py/7.2.20', 'x-amz-content-sha256': 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', ...} http_headers = HTTPHeaderDict({'Host': '100.85.98.88:9000', 'User-Agent': 'MinIO (Darwin; arm64) minio-py/7.2.20', 'x-amz-content-sha...ers=host;x-amz-content-sha256;x-amz-date, Signature=c94898149a373887f29016fa6cc59a510cf6af189991a7a0e3a8364701573d68'}) key = 'Authorization' method = 'GET' no_body_trace = False object_name = 'snapshots/2026-01-30/SPY.json' preload_content = False query_params = None region = 'us-east-1' self = url = SplitResult(scheme='http', netloc='100.85.98.88:9000', path='/data/snapshots/2026-01-30/SPY.json', query='', fragment='') value = 'AWS4-HMAC-SHA256 Credential=minioadmin/20260705/us-east-1/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=c94898149a373887f29016fa6cc59a510cf6af189991a7a0e3a8364701573d68' [1m [31m../.pyenv/versions/3.12.12/lib/python3.12/site-packages/urllib3/poolmanager.py [0m:376: in urlopen [0mresponse = conn.urlopen(method, u.request_uri, **kw) [90m [39;49;00m ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [90m [39;49;00m conn = kw = {'assert_same_host': False, 'body': None, 'headers': HTTPHeaderDict({'Host': '100.85.98.88:9000', 'User-Agent': 'MinIO...amz-date, Signature=c94898149a373887f29016fa6cc59a510cf6af189991a7a0e3a8364701573d68'}), 'preload_content': False, ...} method = 'GET' redirect = True self = u = Url(scheme='http', auth=None, host='100.85.98.88', port=9000, path='/data/snapshots/2026-01-30/SPY.json', query=None, fragment=None) url = 'http://100.85.98.88:9000/data/snapshots/2026-01-30/SPY.json' [1m [31m../.pyenv/versions/3.12.12/lib/python3.12/site-packages/urllib3/connectionpool.py [0m:895: in urlopen [0mretries.sleep(response) [90m [39;49;00m assert_same_host = False body = None body_pos = None chunked = False clean_exit = True conn = destination_scheme = None err = None has_retry_after = True headers = HTTPHeaderDict({'Host': '100.85.98.88:9000', 'User-Agent': 'MinIO (Darwin; arm64) minio-py/7.2.20', 'x-amz-content-sha...ers=host;x-amz-content-sha256;x-amz-date, Signature=c94898149a373887f29016fa6cc59a510cf6af189991a7a0e3a8364701573d68'}) http_tunnel_required = False httplib_response = is_new_proxy_conn = False method = 'GET' parsed_url = Url(scheme=None, auth=None, host=None, port=None, path='/data/snapshots/2026-01-30/SPY.json', query=None, fragment=None) pool_timeout = None redirect = False redirect_location = False release_conn = False release_this_conn = False response = response_conn = response_kw = {'preload_content': False, 'request_method': 'GET'} retries = Retry(total=9, connect=None, read=None, redirect=0, status=None) self = timeout = timeout_obj = Timeout(connect=10.0, read=60.0, total=120.0) url = '/data/snapshots/2026-01-30/SPY.json' [1m [31m../.pyenv/versions/3.12.12/lib/python3.12/site-packages/urllib3/util/retry.py [0m:430: in sleep [0mslept = [96mself [39;49;00m.sleep_for_retry(response) [90m [39;49;00m ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [90m [39;49;00m response = self = Retry(total=9, connect=None, read=None, redirect=0, status=None) [1m [31m../.pyenv/versions/3.12.12/lib/python3.12/site-packages/urllib3/util/retry.py [0m:409: in sleep_for_retry [0mtime.sleep(retry_after) [90m [39;49;00m [1m [31mE Failed: Timeout (>60.0s) from pytest-timeout. [0m response = retry_after = 60 self = Retry(total=9, connect=None, read=None, redirect=0, status=None)