self = mock_db_with_earnings = (, ) def test_get_earnings_normalizes_symbol_to_uppercase(self, mock_db_with_earnings): """Test that get_earnings normalizes symbol to uppercase""" from rtrader.utils.earnings import get_earnings mock_db, mock_collection = mock_db_with_earnings # Act > get_earnings("aapl", limit=4) tests/test_earnings_lookup.py:154: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ rtrader/utils/earnings.py:71: in get_earnings return _lookup_earnings( rtrader/utils/earnings.py:127: in _lookup_earnings _trigger_earnings_background_refresh(symbol) rtrader/utils/earnings.py:320: in _trigger_earnings_background_refresh if redis.set(lock_key, "1", nx=True, ex=300): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.pyenv/versions/3.12.12/lib/python3.12/site-packages/redis/utils.py:417: in wrapper return func(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^ ../.pyenv/versions/3.12.12/lib/python3.12/site-packages/redis/commands/core.py:2518: in set return self.execute_command("SET", *pieces, **options) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.pyenv/versions/3.12.12/lib/python3.12/site-packages/redis/client.py:657: in execute_command return self._execute_command(*args, **options) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.pyenv/versions/3.12.12/lib/python3.12/site-packages/redis/client.py:668: in _execute_command return conn.retry.call_with_retry( ../.pyenv/versions/3.12.12/lib/python3.12/site-packages/redis/retry.py:116: in call_with_retry return do() ^^^^ ../.pyenv/versions/3.12.12/lib/python3.12/site-packages/redis/client.py:669: in lambda: self._send_command_parse_response( ../.pyenv/versions/3.12.12/lib/python3.12/site-packages/redis/client.py:640: in _send_command_parse_response return self.parse_response(conn, command_name, **options) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.pyenv/versions/3.12.12/lib/python3.12/site-packages/redis/client.py:691: in parse_response response = connection.read_response() ^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.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) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.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) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.pyenv/versions/3.12.12/lib/python3.12/site-packages/redis/_parsers/resp2.py:25: in _read_response raw = self._buffer.readline() ^^^^^^^^^^^^^^^^^^^^^^^ ../.pyenv/versions/3.12.12/lib/python3.12/site-packages/redis/_parsers/socket.py:115: in readline self._read_from_socket() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , length = None timeout = , raise_on_timeout = True def _read_from_socket( self, length: Optional[int] = None, timeout: Union[float, object] = SENTINEL, raise_on_timeout: Optional[bool] = True, ) -> bool: sock = self._sock socket_read_size = self.socket_read_size marker = 0 custom_timeout = timeout is not SENTINEL buf = self._buffer current_pos = buf.tell() buf.seek(0, SEEK_END) if custom_timeout: sock.settimeout(timeout) try: while True: > data = self._sock.recv(socket_read_size) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E Failed: Timeout (>30.0s) from pytest-timeout. ../.pyenv/versions/3.12.12/lib/python3.12/site-packages/redis/_parsers/socket.py:65: Failed