| [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 = <concurrent.futures.thread.ThreadPoolExecutor object at 0x127a3be00>
|
| future = <Future at 0x1279495e0 state=finished raised FileNotFoundError>
|
| 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 = <function apply_sector_momentum_filter at 0x121816480>
|
| date = <class 'datetime.date'>
|
| mock_breakout = <MagicMock name='check_soft_sector_breakout' id='4958957984'>
|
| mock_settings = <MagicMock id='4958325360'>
|
| picks = [{'momentum_final_score': 50.0, 'sector': 'Consumer Defensive', 'symbol': 'BG'}]
|
| self = <test_sector_momentum_filter.TestSectorBreakoutException object at 0x1210d3560>
|
| [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 = <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 = 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 = <function find_snapshot_json at 0x121e01f80>
|
| _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 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 = <function apply_sector_momentum_filter.<locals>._symbol_options_bearish at 0x1279ad8a0>
|
| bearish_families = set()
|
| cfg = <MagicMock id='4958325360'>
|
| exempt_symbols = None
|
| market_stress_level = None
|
| picks = [{'momentum_final_score': 50.0, 'sector': 'Consumer Defensive', 'symbol': 'BG'}]
|
| read_text_with_status = <function read_text_with_status at 0x121e01760>
|
| 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 = <concurrent.futures.thread.ThreadPoolExecutor object at 0x127a3be00>
|
| future = <Future at 0x1279495e0 state=finished raised FileNotFoundError>
|
| 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 = <function _is_minio_reachable at 0x121482480>
|
| client = <minio.api.Minio object at 0x127a3be90>
|
| minio_client = <function minio_client at 0x121482840>
|
| 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 = <minio.api.Minio object at 0x127a3be90>
|
| 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 = <minio.api.Minio object at 0x127a3be90>
|
| [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 = <minio.api.Minio object at 0x127a3be90>
|
| 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 = <urllib3.connectionpool.HTTPConnectionPool object at 0x127a40110>
|
| 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 = <urllib3.poolmanager.PoolManager object at 0x127a3bc20>
|
| 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 = <urllib3.connection.HTTPConnection object at 0x127a40590>
|
| 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 = <http.client.HTTPResponse object at 0x1279fa230>
|
| 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 = <urllib3.response.HTTPResponse object at 0x1279fb100>
|
| response_conn = <urllib3.connection.HTTPConnection object at 0x127a40590>
|
| response_kw = {'preload_content': False, 'request_method': 'GET'}
|
| retries = Retry(total=9, connect=None, read=None, redirect=0, status=None)
|
| self = <urllib3.connectionpool.HTTPConnectionPool object at 0x127a40110>
|
| timeout = <object object at 0x104c41dc0>
|
| 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 = <urllib3.response.HTTPResponse object at 0x1279fb100>
|
| 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 = <urllib3.response.HTTPResponse object at 0x1279fb100>
|
| retry_after = 60
|
| self = Retry(total=9, connect=None, read=None, redirect=0, status=None)
|