tests/test_ranking_worker_local.py:548: in test_full_round_trip
    result = process_single_job_locally(timeout=300.0)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tests/test_ranking_worker_local.py:300: in process_single_job_locally
    result = process_ga_job(ga_job)
             ^^^^^^^^^^^^^^^^^^^^^^
rtrader/services/ga_distributed.py:4518: in process_ga_job
    result = evaluate_with_reranking(
rtrader/services/ranking_network.py:3085: in evaluate_with_reranking
    result = ranking_service.calculate_ranking(
rtrader/services/ranking_service.py:4220: in calculate_ranking
    _track_rule(
rtrader/services/ranking_service.py:3392: in _track_rule
    result = fn(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^
rtrader/services/ranking_service.py:7654: in _calculate_soft_sector_penalty
    sector_momentum, prev_sector_momentum = self._get_sector_momentum_cached(row, ctx)
                                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
rtrader/services/ranking_service.py:7584: in _get_sector_momentum_cached
    prev_sector_momentum, _, _ = load_sector_momentum_data(prev_trading_day)
                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
rtrader/cli/trader_eod_core/services/log_formatting_service.py:444: in load_sector_momentum_data
    etf_json_file = find_snapshot_json(etf_symbol, trading_day_str)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
rtrader/utils/nfs.py:701: in find_snapshot_json
    nfs_file = get_json_file_direct(trading_day, symbol_upper)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
rtrader/utils/nfs.py:573: in get_json_file_direct
    if _path_exists_with_timeout(json_file):
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
rtrader/utils/nfs.py:442: in _path_exists_with_timeout
    minio_result = _minio_check()
                   ^^^^^^^^^^^^^^
rtrader/utils/nfs.py:437: in _minio_check
    return _minio_object_exists(s3key)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
rtrader/utils/nfs.py:372: in _minio_object_exists
    client.stat_object(bucket_name="data", object_name=s3key)
../.pyenv/versions/3.12.12/lib/python3.12/site-packages/minio/api.py:2260: in stat_object
    response = self._execute(
../.pyenv/versions/3.12.12/lib/python3.12/site-packages/minio/api.py:444: in _execute
    return self._url_open(
../.pyenv/versions/3.12.12/lib/python3.12/site-packages/minio/api.py:306: in _url_open
    response = self._http.urlopen(
../.pyenv/versions/3.12.12/lib/python3.12/site-packages/urllib3/poolmanager.py:376: in urlopen
    response = conn.urlopen(method, u.request_uri, **kw)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
../.pyenv/versions/3.12.12/lib/python3.12/site-packages/urllib3/connectionpool.py:716: in urlopen
    httplib_response = self._make_request(
../.pyenv/versions/3.12.12/lib/python3.12/site-packages/urllib3/connectionpool.py:468: in _make_request
    six.raise_from(e, None)
<string>:3: in raise_from
    ???
../.pyenv/versions/3.12.12/lib/python3.12/site-packages/urllib3/connectionpool.py:463: in _make_request
    httplib_response = conn.getresponse()
                       ^^^^^^^^^^^^^^^^^^
../.pyenv/versions/3.12.12/lib/python3.12/http/client.py:1430: in getresponse
    response.begin()
../.pyenv/versions/3.12.12/lib/python3.12/http/client.py:331: in begin
    version, status, reason = self._read_status()
                              ^^^^^^^^^^^^^^^^^^^
../.pyenv/versions/3.12.12/lib/python3.12/http/client.py:292: in _read_status
    line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
../.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.
