Tighten logging and annotations in `_web_bs`
Split multi-value log msgs onto separate f-str lines, add `!r` to URL and error format refs, and fix `response_type` annotation from bare `type` to `Type[Struct]`. Also, - Use `X|Y` union style (no spaces). - Add `-> None` return hint to `proxy_msgs()`. - Single backticks in `fixture` docstring ref. - Expand `Callable` return type across lines. (this commit msg was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-codepy_codestyling
parent
c5fa262474
commit
12b015cec4
|
|
@ -168,7 +168,7 @@ async def _reconnect_forever(
|
||||||
nobsws: NoBsWs,
|
nobsws: NoBsWs,
|
||||||
reset_after: int, # msg recv timeout before reset attempt
|
reset_after: int, # msg recv timeout before reset attempt
|
||||||
|
|
||||||
fixture: AsyncContextManager | None = None,
|
fixture: AsyncContextManager|None = None,
|
||||||
task_status: TaskStatus = trio.TASK_STATUS_IGNORED,
|
task_status: TaskStatus = trio.TASK_STATUS_IGNORED,
|
||||||
|
|
||||||
) -> None:
|
) -> None:
|
||||||
|
|
@ -185,7 +185,7 @@ async def _reconnect_forever(
|
||||||
async def proxy_msgs(
|
async def proxy_msgs(
|
||||||
ws: WebSocketConnection,
|
ws: WebSocketConnection,
|
||||||
rent_cs: trio.CancelScope, # parent cancel scope
|
rent_cs: trio.CancelScope, # parent cancel scope
|
||||||
):
|
) -> None:
|
||||||
'''
|
'''
|
||||||
Receive (under `timeout` deadline) all msgs from from underlying
|
Receive (under `timeout` deadline) all msgs from from underlying
|
||||||
websocket and relay them to (calling) parent task via ``trio``
|
websocket and relay them to (calling) parent task via ``trio``
|
||||||
|
|
@ -206,7 +206,7 @@ async def _reconnect_forever(
|
||||||
except nobsws.recon_errors:
|
except nobsws.recon_errors:
|
||||||
log.exception(
|
log.exception(
|
||||||
f'{src_mod}\n'
|
f'{src_mod}\n'
|
||||||
f'{url} connection bail with:'
|
f'{url!r} connection failed\n'
|
||||||
)
|
)
|
||||||
with trio.CancelScope(shield=True):
|
with trio.CancelScope(shield=True):
|
||||||
await trio.sleep(0.5)
|
await trio.sleep(0.5)
|
||||||
|
|
@ -269,7 +269,7 @@ async def _reconnect_forever(
|
||||||
nobsws._ws = ws
|
nobsws._ws = ws
|
||||||
log.info(
|
log.info(
|
||||||
f'{src_mod}\n'
|
f'{src_mod}\n'
|
||||||
f'Connection success: {url}'
|
f'Connection success: {url!r}'
|
||||||
)
|
)
|
||||||
|
|
||||||
# begin relay loop to forward msgs
|
# begin relay loop to forward msgs
|
||||||
|
|
@ -341,7 +341,7 @@ async def _reconnect_forever(
|
||||||
async def open_autorecon_ws(
|
async def open_autorecon_ws(
|
||||||
url: str,
|
url: str,
|
||||||
|
|
||||||
fixture: AsyncContextManager | None = None,
|
fixture: AsyncContextManager|None = None,
|
||||||
|
|
||||||
# time in sec between msgs received before
|
# time in sec between msgs received before
|
||||||
# we presume connection might need a reset.
|
# we presume connection might need a reset.
|
||||||
|
|
@ -361,7 +361,7 @@ async def open_autorecon_ws(
|
||||||
and restarts the full http(s) handshake on catches of certain
|
and restarts the full http(s) handshake on catches of certain
|
||||||
connetivity errors, or some user defined recv timeout.
|
connetivity errors, or some user defined recv timeout.
|
||||||
|
|
||||||
You can provide a ``fixture`` async-context-manager which will be
|
You can provide a `fixture` async-context-manager which will be
|
||||||
entered/exitted around each connection reset; eg. for
|
entered/exitted around each connection reset; eg. for
|
||||||
(re)requesting subscriptions without requiring streaming setup
|
(re)requesting subscriptions without requiring streaming setup
|
||||||
code to rerun.
|
code to rerun.
|
||||||
|
|
@ -402,7 +402,8 @@ async def open_autorecon_ws(
|
||||||
except NoBsWs.recon_errors as con_err:
|
except NoBsWs.recon_errors as con_err:
|
||||||
log.warning(
|
log.warning(
|
||||||
f'Entire ws-channel disconnect due to,\n'
|
f'Entire ws-channel disconnect due to,\n'
|
||||||
f'con_err: {con_err!r}\n'
|
f'\n'
|
||||||
|
f'{con_err!r}\n'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -424,7 +425,7 @@ class JSONRPCResult(Struct):
|
||||||
async def open_jsonrpc_session(
|
async def open_jsonrpc_session(
|
||||||
url: str,
|
url: str,
|
||||||
start_id: int = 0,
|
start_id: int = 0,
|
||||||
response_type: type = JSONRPCResult,
|
response_type: Type[Struct] = JSONRPCResult,
|
||||||
msg_recv_timeout: float = float('inf'),
|
msg_recv_timeout: float = float('inf'),
|
||||||
# ^NOTE, since only `deribit` is using this jsonrpc stuff atm
|
# ^NOTE, since only `deribit` is using this jsonrpc stuff atm
|
||||||
# and options mkts are generally "slow moving"..
|
# and options mkts are generally "slow moving"..
|
||||||
|
|
@ -435,7 +436,10 @@ async def open_jsonrpc_session(
|
||||||
# broken and never restored with wtv init sequence is required to
|
# broken and never restored with wtv init sequence is required to
|
||||||
# re-establish a working req-resp session.
|
# re-establish a working req-resp session.
|
||||||
|
|
||||||
) -> Callable[[str, dict], dict]:
|
) -> Callable[
|
||||||
|
[str, dict],
|
||||||
|
dict,
|
||||||
|
]:
|
||||||
'''
|
'''
|
||||||
Init a json-RPC-over-websocket connection to the provided `url`.
|
Init a json-RPC-over-websocket connection to the provided `url`.
|
||||||
|
|
||||||
|
|
@ -531,14 +535,18 @@ async def open_jsonrpc_session(
|
||||||
'id': mid,
|
'id': mid,
|
||||||
} if not rpc_results.get(mid):
|
} if not rpc_results.get(mid):
|
||||||
log.warning(
|
log.warning(
|
||||||
f'Unexpected ws msg: {json.dumps(msg, indent=4)}'
|
f'Unexpected ws msg?\n'
|
||||||
|
f'{json.dumps(msg, indent=4)}'
|
||||||
)
|
)
|
||||||
|
|
||||||
case {
|
case {
|
||||||
'method': _,
|
'method': _,
|
||||||
'params': _,
|
'params': _,
|
||||||
}:
|
}:
|
||||||
log.debug(f'Recieved\n{msg}')
|
log.debug(
|
||||||
|
f'Recieved\n'
|
||||||
|
f'{msg!r}'
|
||||||
|
)
|
||||||
|
|
||||||
case {
|
case {
|
||||||
'error': error
|
'error': error
|
||||||
|
|
@ -554,12 +562,15 @@ async def open_jsonrpc_session(
|
||||||
result['event'].set()
|
result['event'].set()
|
||||||
log.error(
|
log.error(
|
||||||
f'JSONRPC request failed\n'
|
f'JSONRPC request failed\n'
|
||||||
f'req: {req_msg}\n'
|
f'req: {req_msg!r}\n'
|
||||||
f'resp: {error}\n'
|
f'resp: {error!r}\n'
|
||||||
)
|
)
|
||||||
|
|
||||||
case _:
|
case _:
|
||||||
log.warning(f'Unhandled JSON-RPC msg!?\n{msg}')
|
log.warning(
|
||||||
|
f'Unhandled JSON-RPC msg!?\n'
|
||||||
|
f'{msg!r}'
|
||||||
|
)
|
||||||
|
|
||||||
tn.start_soon(recv_task)
|
tn.start_soon(recv_task)
|
||||||
yield json_rpc
|
yield json_rpc
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue