| self = <tests.test_earnings_lookup.TestGetEarnings object at 0x122283dd0>
|
| mock_db_with_earnings = (<MagicMock name='DBAccounting().__enter__()' id='4883178288'>, <MagicMock name='DBAccounting().__enter__().collection()' id='4883184384'>)
|
|
|
| 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>
|
| 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 = <redis._parsers.socket.SocketBuffer object at 0x12310b740>, length = None
|
| timeout = <object object at 0x110c00e20>, 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
|