From 90a395a069b40742d4a3c8f796d1216e09f96d80 Mon Sep 17 00:00:00 2001 From: Tyler Goodlet Date: Thu, 29 Sep 2022 16:12:54 -0400 Subject: [PATCH] Support no-disconnect on `open_aio_clients()` exit Allows for easier restarts of certain `trio` side tasks without killing the `asyncio`-side clients; support via flag. Also fix a bug in `Client.bars()`: we need to return the duration on the empty bars case.. --- piker/brokers/ib/api.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/piker/brokers/ib/api.py b/piker/brokers/ib/api.py index 05fd47f4..5aba229d 100644 --- a/piker/brokers/ib/api.py +++ b/piker/brokers/ib/api.py @@ -412,7 +412,7 @@ class Client: # ``end_dt`` which exceeds the ``duration``, # - a timeout occurred in which case insync internals return # an empty list thing with bars.clear()... - return [], np.empty(0) + return [], np.empty(0), dt_duration # TODO: we could maybe raise ``NoData`` instead if we # rewrite the method in the first case? right now there's no # way to detect a timeout. @@ -1086,6 +1086,7 @@ async def load_aio_clients( # retry a few times to get the client going.. connect_retries: int = 3, connect_timeout: float = 0.5, + disconnect_on_exit: bool = True, ) -> dict[str, Client]: ''' @@ -1227,10 +1228,11 @@ async def load_aio_clients( finally: # TODO: for re-scans we'll want to not teardown clients which # are up and stable right? - for acct, client in _accounts2clients.items(): - log.info(f'Disconnecting {acct}@{client}') - client.ib.disconnect() - _client_cache.pop((host, port), None) + if disconnect_on_exit: + for acct, client in _accounts2clients.items(): + log.info(f'Disconnecting {acct}@{client}') + client.ib.disconnect() + _client_cache.pop((host, port), None) async def load_clients_for_trio(