diff mbox series

[bitbake-devel] asyncrpc: Check websockets version

Message ID 20240502183516.1216885-1-JPEWhacker@gmail.com
State New
Headers show
Series [bitbake-devel] asyncrpc: Check websockets version | expand

Commit Message

Joshua Watt May 2, 2024, 6:35 p.m. UTC
Checks that the minimum version of the websockets module is present, and
if not raises an ImportError. This allows the user to get earlier
feedback if using websockets is going to succeed

Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
---
 bitbake/lib/bb/asyncrpc/client.py | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

Comments

Richard Purdie May 8, 2024, 1:33 p.m. UTC | #1
On Thu, 2024-05-02 at 12:35 -0600, Joshua Watt via lists.openembedded.org wrote:
> Checks that the minimum version of the websockets module is present, and
> if not raises an ImportError. This allows the user to get earlier
> feedback if using websockets is going to succeed
> 
> Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
> ---
>  bitbake/lib/bb/asyncrpc/client.py | 22 ++++++++++++++++++++++
>  1 file changed, 22 insertions(+)
> 
> diff --git a/bitbake/lib/bb/asyncrpc/client.py b/bitbake/lib/bb/asyncrpc/client.py
> index a350b4fb126..65f3f8964da 100644
> --- a/bitbake/lib/bb/asyncrpc/client.py
> +++ b/bitbake/lib/bb/asyncrpc/client.py
> @@ -24,6 +24,9 @@ ADDR_TYPE_UNIX = 0
>  ADDR_TYPE_TCP = 1
>  ADDR_TYPE_WS = 2
>  
> +WEBSOCKETS_MIN_VERSION = (9, 1)
> +
> +
>  

I think 9.1 breaks with some versions of python so we need something
later in some cases (like ubuntu 22.04).

Cheers,

Richard
diff mbox series

Patch

diff --git a/bitbake/lib/bb/asyncrpc/client.py b/bitbake/lib/bb/asyncrpc/client.py
index a350b4fb126..65f3f8964da 100644
--- a/bitbake/lib/bb/asyncrpc/client.py
+++ b/bitbake/lib/bb/asyncrpc/client.py
@@ -24,6 +24,9 @@  ADDR_TYPE_UNIX = 0
 ADDR_TYPE_TCP = 1
 ADDR_TYPE_WS = 2
 
+WEBSOCKETS_MIN_VERSION = (9, 1)
+
+
 def parse_address(addr):
     if addr.startswith(UNIX_PREFIX):
         return (ADDR_TYPE_UNIX, (addr[len(UNIX_PREFIX) :],))
@@ -39,6 +42,7 @@  def parse_address(addr):
 
         return (ADDR_TYPE_TCP, (host, int(port)))
 
+
 class AsyncClient(object):
     def __init__(
         self,
@@ -86,6 +90,24 @@  class AsyncClient(object):
     async def connect_websocket(self, uri):
         import websockets
 
+        try:
+            version = tuple(
+                int(v)
+                for v in websockets.__version__.split(".")[
+                    0 : len(WEBSOCKETS_MIN_VERSION)
+                ]
+            )
+        except ValueError:
+            raise ImportError(
+                f"Unable to parse websockets version '{websockets.__version__}'"
+            )
+
+        if version < WEBSOCKETS_MIN_VERSION:
+            min_ver_str = ".".join(str(v) for v in WEBSOCKETS_MIN_VERSION)
+            raise ImportError(
+                f"Websockets version {websockets.__version__} is less than minimum required version {min_ver_str}"
+            )
+
         async def connect_sock():
             websocket = await websockets.connect(uri, ping_interval=None)
             return WebsocketConnection(websocket, self.timeout)