From 1270400e95dc928a68928f141924872cac5efdcb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mose=20M=C3=BCller?= Date: Thu, 26 Sep 2024 21:48:23 +0200 Subject: [PATCH] updates pydase.Client to handle services behind PathPrefix proxy --- src/pydase/client/client.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/pydase/client/client.py b/src/pydase/client/client.py index 29f0d68..0fa860c 100644 --- a/src/pydase/client/client.py +++ b/src/pydase/client/client.py @@ -2,6 +2,7 @@ import asyncio import logging import sys import threading +import urllib.parse from typing import TYPE_CHECKING, Any, TypedDict, cast import socketio # type: ignore @@ -83,6 +84,16 @@ class Client: block_until_connected: bool = True, sio_client_kwargs: dict[str, Any] = {}, ): + # Parse the URL to separate base URL and path prefix + parsed_url = urllib.parse.urlparse(url) + + # Construct the base URL without the path + self._base_url = urllib.parse.urlunparse( + (parsed_url.scheme, parsed_url.netloc, "", "", "", "") + ) + + # Store the path prefix (e.g., "/service" in "ws://localhost:8081/service") + self._path_prefix = parsed_url.path.rstrip("/") # Remove trailing slash if any self._url = url self._sio = socketio.AsyncClient(**sio_client_kwargs) self._loop = asyncio.new_event_loop() @@ -121,8 +132,8 @@ class Client: logger.debug("Connecting to server '%s' ...", self._url) await self._setup_events() await self._sio.connect( - self._url, - socketio_path="/ws/socket.io", + self._base_url, + socketio_path=f"{self._path_prefix}/ws/socket.io", transports=["websocket"], retry=True, )