From 48247d35c7e542fc2adf81c66371112439d1a124 Mon Sep 17 00:00:00 2001 From: GitHub Copilot Date: Sat, 24 Jan 2026 10:24:23 +0000 Subject: [PATCH] refactor: use AsyncExitStack for aiohttp runner cleanup Replace try/finally with contextlib.AsyncExitStack for cleaner structured cleanup of the aiohttp runner. This ensures proper resource cleanup even in complex shutdown scenarios. Addresses REFACTORING.md item about TaskGroup/cleanup context. --- src/textual_webterm/local_server.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/textual_webterm/local_server.py b/src/textual_webterm/local_server.py index b81710b..f580eca 100644 --- a/src/textual_webterm/local_server.py +++ b/src/textual_webterm/local_server.py @@ -298,8 +298,10 @@ class LocalServer: app.add_routes(self._build_routes()) runner = web.AppRunner(app) - try: + async with contextlib.AsyncExitStack() as stack: await runner.setup() + stack.push_async_callback(runner.cleanup) + site = web.TCPSite(runner, self.host, self.port) await site.start() @@ -307,8 +309,6 @@ class LocalServer: log.info("Available apps: %s", ", ".join(app.name for app in self.session_manager.apps)) await self.exit_event.wait() - finally: - await runner.cleanup() async def _dispatch_ws_message( self,