By default silence `Client.get_quote()` timeout errors unless caller specifies to raise

ib_py311_fixes
Tyler Goodlet 2023-08-18 17:28:28 -04:00
parent 2e6b1330f3
commit 2b8cd031e8
2 changed files with 16 additions and 6 deletions

View File

@ -663,7 +663,7 @@ class Client:
# commodities
elif exch == 'CMDTY': # eg. XAUUSD.CMDTY
con_kwargs, bars_kwargs = _adhoc_symbol_map[symbol]
con_kwargs, bars_kwargs = _adhoc_symbol_map[symbol.upper()]
con = Commodity(**con_kwargs)
con.bars_kwargs = bars_kwargs
@ -780,6 +780,7 @@ class Client:
self,
contract: Contract,
timeout: float = 1,
raise_on_timeout: bool = False,
) -> Ticker:
'''
@ -798,10 +799,16 @@ class Client:
if isnan(ticker.last):
# wait for a first update(Event)
tkr = await asyncio.wait_for(
ready,
timeout=timeout,
)
try:
tkr = await asyncio.wait_for(
ready,
timeout=timeout,
)
except TimeoutError:
if raise_on_timeout:
raise
return tkr
if tkr:
break
else:

View File

@ -843,7 +843,10 @@ async def stream_quotes(
# TODO: we should instead spawn a task that waits on a feed to start
# and let it wait indefinitely..instead of this hard coded stuff.
with trio.move_on_after(1):
first_ticker = await proxy.get_quote(contract=con)
first_ticker = await proxy.get_quote(
contract=con,
raise_on_timeout=True,
)
# it might be outside regular trading hours so see if we can at
# least grab history.