Handle `str`-errors in `.ib.broker` trade events
Add `isinstance()` dispatch for the `'error'` event case in `deliver_trade_events()` to handle `ib_async` sometimes emitting plain `str` error items instead of the previously expected `dict`. Deats, - add `isinstance(err, dict)` branch for the standard case with `error_code`, `reason`, and `reqid` fields. - add `isinstance(err, str)` branch to parse error strings of the form `'[code 104] connection failed'` into `code` and `reason`. - set `reqid: str = '<unknown>'` for string-form errors since there's no request ID available. - update `err` type annot to `dict|str`. (this commit msg was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-codeib_async_CONT
parent
3b0e413e96
commit
103967870e
|
|
@ -1291,14 +1291,24 @@ async def deliver_trade_events(
|
|||
case 'error':
|
||||
# NOTE: see impl deats in
|
||||
# `Client.inline_errors()::push_err()`
|
||||
err: dict = item
|
||||
err: dict|str = item
|
||||
|
||||
# never relay errors for non-broker related issues
|
||||
# std case, never relay errors for non-order-control
|
||||
# related issues.
|
||||
# https://interactivebrokers.github.io/tws-api/message_codes.html
|
||||
if isinstance(err, dict):
|
||||
code: int = err['error_code']
|
||||
reason: str = err['reason']
|
||||
reqid: str = str(err['reqid'])
|
||||
|
||||
# XXX, sometimes you'll get just a `str` of the form,
|
||||
# '[code 104] connection failed' or something..
|
||||
elif isinstance(err, str):
|
||||
code_part, _, reason = err.rpartition(']')
|
||||
if code_part:
|
||||
_, _, code = code_part.partition('[code')
|
||||
reqid: str = '<unknown>'
|
||||
|
||||
# "Warning:" msg codes,
|
||||
# https://interactivebrokers.github.io/tws-api/message_codes.html#warning_codes
|
||||
# - 2109: 'Outside Regular Trading Hours'
|
||||
|
|
|
|||
Loading…
Reference in New Issue