Open
Description
Hey @oeway I observed that - in case of lacking internet connection - the login function will timeout and block the application in sync mode. I have not found a way to get around this other than putting the entire connection into a background thread - which I would like to avoid. Is there any way to assign a callback or implement a timeout?
The following code produces the error below. It runs inside an asyncio-thread
def start_service(self, service_id, server_url="https://chat.bioimage.io", workspace=None, token=None):
'''
This logs into the Hypha Server and starts the service.
It also registers the extensions that will hook up the microsocpe to the chatbot
service_id: str - the ID of the service that will be replied by the server when you log in
server_url: str - the URL of the server
workspace: str - the workspace of the server
token: str - the token to log in to the server and will be replied by the server when you log in
'''
self.__logger.debug(f"Starting service...")
client_id = service_id + "-client"
def autoLogin(message):
# automatically open default browser and return the login token
webbrowser.open(message['login_url']) # TODO: pass login token to qtwebview
print(f"Please open your browser and login at: {message['login_url']}")
try:
token = login({"server_url": server_url,
"login_callback": autoLogin,
"timeout": 10})
except Exception as e:
# probably timeout error - not connected to the Internet?
self.__logger.error(e)
return "probably timeout error - not connected to the Internet?"
server = connect_to_server(
{
"server_url": server_url,
"token": token}
)
# initialize datastorer for image saving and data handling outside the chat prompts, resides on the hypha server
self.datastore.setup(server, service_id="data-store")
svc = server.register_service(self.getMicroscopeControlExtensionDefinition())
self.hyphaURL = f"https://bioimage.io/chat?server={server_url}&extension={svc.id}"
try:
# open the chat window in the browser to interact with the herin created connection
webbrowser.open(self.hyphaURL)
self._widget.setChatURL(url=f"https://bioimage.io/chat?token={token}&assistant=Skyler&server={server_url}&extension={svc.id}")
self._isConnected = True
except:
pass
print(f"Extension service registered with id: {svc.id}, you can visit the chatbot at {self.hyphaURL}, and the service at: {server_url}/{server.config.workspace}/services/{svc.id.split(':')[1]}")
2024-06-16 15:50:08 DEBUG [HyphaController] Starting service...
DEBUG:imswitch:[HyphaController] Starting service...
ERROR:websocket-client:Failed to connect to wss://chat.bioimage.io/ws, retrying 1/10000
Traceback (most recent call last):
File "/Users/bene/mambaforge/envs/imswitch/lib/python3.9/site-packages/websockets/legacy/client.py", line 647, in __await_impl_timeout__
return await self.__await_impl__()
File "/Users/bene/mambaforge/envs/imswitch/lib/python3.9/site-packages/websockets/legacy/client.py", line 651, in __await_impl__
_transport, _protocol = await self._create_connection()
File "uvloop/loop.pyx", line 1975, in create_connection
File "/Users/bene/mambaforge/envs/imswitch/lib/python3.9/asyncio/tasks.py", line 413, in wait
return await _wait(fs, timeout, return_when, loop)
File "/Users/bene/mambaforge/envs/imswitch/lib/python3.9/asyncio/tasks.py", line 525, in _wait
await waiter
asyncio.exceptions.CancelledError
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/bene/mambaforge/envs/imswitch/lib/python3.9/site-packages/imjoy_rpc/hypha/websocket_client.py", line 81, in open
self._websocket = await asyncio.wait_for(
File "/Users/bene/mambaforge/envs/imswitch/lib/python3.9/asyncio/tasks.py", line 479, in wait_for
return fut.result()
File "/Users/bene/mambaforge/envs/imswitch/lib/python3.9/asyncio/tasks.py", line 688, in _wrap_awaitable
return (yield from awaitable.__await__())
File "/Users/bene/mambaforge/envs/imswitch/lib/python3.9/site-packages/websockets/legacy/client.py", line 647, in __await_impl_timeout__
return await self.__await_impl__()
File "/Users/bene/mambaforge/envs/imswitch/lib/python3.9/site-packages/websockets/legacy/async_timeout.py", line 169, in __aexit__
self._do_exit(exc_type)
File "/Users/bene/mambaforge/envs/imswitch/lib/python3.9/site-packages/websockets/legacy/async_timeout.py", line 252, in _do_exit
raise asyncio.TimeoutError
asyncio.exceptions.TimeoutError
Metadata
Metadata
Assignees
Labels
No labels