Do not catch CancelledError.
authorBenjamin Braatz <bb@bbraatz.eu>
Wed, 15 Sep 2021 02:14:34 +0000 (04:14 +0200)
committerBenjamin Braatz <bb@bbraatz.eu>
Wed, 15 Sep 2021 02:14:34 +0000 (04:14 +0200)
controlpi_plugins/wsserver.py

index b72cb3ec124887c26ca1a8b83e6a35b0b7e3ad9e..4c369c8c2e16a45b0b62e0fa734b09eeb91e0c0d 100644 (file)
@@ -134,10 +134,7 @@ class WSServer(BasePlugin):
     async def _handler(self, websocket: WebSocketServerProtocol,
                        path: str) -> None:
         connection = Connection(self.bus, websocket)
-        try:
-            await connection.run()
-        except asyncio.CancelledError:
-            pass
+        await connection.run()
 
     async def _process_request(self, path: str,
                                request_headers: Headers) -> Response:
@@ -222,14 +219,14 @@ class WSServer(BasePlugin):
 
     async def run(self) -> None:
         """Set up websocket server."""
-        serving = False
-        while not serving:
+        while True:
             try:
-                await serve(self._handler,
-                            host=self._host,
-                            port=self._port,
-                            process_request=self._process_request)
-                serving = True
+                async with serve(self._handler,
+                                 host=self._host,
+                                 port=self._port,
+                                 process_request=self._process_request):
+                    print(f"WSServer '{self.name}'"
+                          f" serving on port {self._port}.")
+                    await asyncio.Future()
             except OSError:
                 await asyncio.sleep(1)
-        print(f"WSServer '{self.name}' serving on port {self._port}.")