Message ID | 20240502183516.1216885-1-JPEWhacker@gmail.com |
---|---|
State | New |
Headers | show |
Series | [bitbake-devel] asyncrpc: Check websockets version | expand |
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 --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)
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(+)