[gw4] darwin -- Python 3.12.12 /Users/cao/.pyenv/versions/3.12.12/bin/python3.12 tests/test_earnings_lookup.py:154: in test_get_earnings_normalizes_symbol_to_uppercase get_earnings("aapl", limit=4) get_earnings = mock_collection = mock_db = mock_db_with_earnings = (, ) self = rtrader/utils/earnings.py:71: in get_earnings return _lookup_earnings( force_fmp = False limit = 4 symbol = 'aapl' rtrader/utils/earnings.py:127: in _lookup_earnings _trigger_earnings_background_refresh(symbol) check_stale = True force_fmp = False is_symbol_etf_safe = limit = 4 local_records = [{'date': '2026-04-26', 'eps': None, 'epsEstimated': 2.65, 'eps_estimated': 2.65, ...}, {'date': '2026-01-29', 'eps': ....63, 'eps_estimated': 1.63, ...}, {'date': '2025-01-30', 'eps': 2.4, 'epsEstimated': 2.36, 'eps_estimated': 2.36, ...}] needs_sync = True symbol = 'AAPL' sync_to_db = True rtrader/utils/earnings.py:320: in _trigger_earnings_background_refresh if redis.set(lock_key, "1", nx=True, ex=300): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ lock_key = 'earnings_refresh:pending:AAPL' redis = )>)> redis_testbox001 = symbol = 'AAPL' ../.pyenv/versions/3.12.12/lib/python3.12/site-packages/redis/utils.py:417: in wrapper return func(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^ arg = 'ifdne' arg_names = ('self', 'name', 'value', 'ex', 'px', 'nx', ...) args = ()>)>, 'earnings_refresh:pending:AAPL', '1') args_to_warn = ['ifeq', 'ifne', 'ifdeq', 'ifdne'] func = kwargs = {'ex': 300, 'nx': True} provided_args = {'ex': 300, 'name': 'earnings_refresh:pending:AAPL', 'nx': True, 'value': '1'} ../.pyenv/versions/3.12.12/lib/python3.12/site-packages/redis/commands/core.py:2518: in set return self.execute_command("SET", *pieces, **options) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ex = 300 exat = None get = False ifdeq = None ifdne = None ifeq = None ifne = None keepttl = False name = 'earnings_refresh:pending:AAPL' nx = True options = {} pieces = ['earnings_refresh:pending:AAPL', '1', 'NX', 'EX', 300] px = None pxat = None self = )>)> value = '1' xx = False ../.pyenv/versions/3.12.12/lib/python3.12/site-packages/redis/client.py:657: in execute_command return self._execute_command(*args, **options) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ args = ('SET', 'earnings_refresh:pending:AAPL', '1', 'NX', 'EX', 300) options = {} self = )>)> ../.pyenv/versions/3.12.12/lib/python3.12/site-packages/redis/client.py:663: in _execute_command conn = self.connection or pool.get_connection() ^^^^^^^^^^^^^^^^^^^^^ args = ('SET', 'earnings_refresh:pending:AAPL', '1', 'NX', 'EX', 300) command_name = 'SET' options = {} pool = )> self = )>)> ../.pyenv/versions/3.12.12/lib/python3.12/site-packages/redis/utils.py:196: in wrapper return func(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^ allowed_args = [] arg = '*' arg_names = ('self', 'command_name') args = ()>,) args_to_warn = ['*'] func = kwargs = {} provided_args = {} reason = 'Use get_connection() without args instead' version = '5.3.0' ../.pyenv/versions/3.12.12/lib/python3.12/site-packages/redis/connection.py:2603: in get_connection connection.connect() command_name = None connection = keys = () options = {} self = )> ../.pyenv/versions/3.12.12/lib/python3.12/site-packages/redis/connection.py:846: in connect self.connect_check_health(check_health=True) self = ../.pyenv/versions/3.12.12/lib/python3.12/site-packages/redis/connection.py:869: in connect_check_health self.on_connect_check_health(check_health=check_health) check_health = True retry_socket_connect = True self = sock = ../.pyenv/versions/3.12.12/lib/python3.12/site-packages/redis/connection.py:941: in on_connect_check_health auth_response = self.read_response() ^^^^^^^^^^^^^^^^^^^^ auth_args = ('YE3BNISCW7',) check_health = True cred_provider = parser = self = ../.pyenv/versions/3.12.12/lib/python3.12/site-packages/redis/connection.py:1133: in read_response response = self._parser.read_response(disable_decoding=disable_decoding) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ disable_decoding = False disconnect_on_error = True host_error = 'testbox001:6379' push_request = False self = ../.pyenv/versions/3.12.12/lib/python3.12/site-packages/redis/_parsers/resp2.py:15: in read_response result = self._read_response(disable_decoding=disable_decoding) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ disable_decoding = False pos = 0 self = ../.pyenv/versions/3.12.12/lib/python3.12/site-packages/redis/_parsers/resp2.py:25: in _read_response raw = self._buffer.readline() ^^^^^^^^^^^^^^^^^^^^^^^ disable_decoding = False self = ../.pyenv/versions/3.12.12/lib/python3.12/site-packages/redis/_parsers/socket.py:115: in readline self._read_from_socket() buf = <_io.BytesIO object at 0x12b82f150> data = b'' self = ../.pyenv/versions/3.12.12/lib/python3.12/site-packages/redis/_parsers/socket.py:65: in _read_from_socket data = self._sock.recv(socket_read_size) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E Failed: Timeout (>60.0s) from pytest-timeout. buf = <_io.BytesIO object at 0x12b82f150> current_pos = 0 custom_timeout = False length = None marker = 0 raise_on_timeout = True self = sock = socket_read_size = 65536 timeout =