From 175b5482e7570680dd8afc04f108c376bece7133 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 2 Jun 2026 03:04:19 +0000 Subject: [PATCH 1/2] Initial plan From 3174ece65bdadf57fba0e524dc0a095e801510b2 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 2 Jun 2026 03:08:07 +0000 Subject: [PATCH 2/2] Avoid deprecated Tornado IOLoop APIs in WebApp --- cortex/tests/test_webgl_serve.py | 31 +++++++++++++++++++++++++++++++ cortex/webgl/serve.py | 6 +----- 2 files changed, 32 insertions(+), 5 deletions(-) create mode 100644 cortex/tests/test_webgl_serve.py diff --git a/cortex/tests/test_webgl_serve.py b/cortex/tests/test_webgl_serve.py new file mode 100644 index 000000000..440e8d467 --- /dev/null +++ b/cortex/tests/test_webgl_serve.py @@ -0,0 +1,31 @@ +import cortex.webgl.serve as serve + + +def test_webapp_run_uses_current_ioloop(monkeypatch): + class FakeIOLoop: + def __init__(self): + self.started = False + + def start(self): + self.started = True + + class FakeHTTPServer: + def __init__(self, application, io_loop=None): + self.application = application + self.io_loop = io_loop + self.listen_port = None + + def listen(self, port): + self.listen_port = port + + fake_ioloop = FakeIOLoop() + + monkeypatch.setattr(serve.tornado.ioloop.IOLoop, "current", lambda: fake_ioloop) + monkeypatch.setattr(serve.tornado.httpserver, "HTTPServer", FakeHTTPServer) + + app = serve.WebApp([], 0) + app.run() + + assert app.ioloop is fake_ioloop + assert fake_ioloop.started + assert app.server.listen_port == 0 diff --git a/cortex/webgl/serve.py b/cortex/webgl/serve.py index 354c665d0..3bfb08222 100644 --- a/cortex/webgl/serve.py +++ b/cortex/webgl/serve.py @@ -321,11 +321,7 @@ def n_clients(self) -> int: return num def run(self): - ioloop: tornado.ioloop.IOLoop = ( - tornado.ioloop.IOLoop() - ) # why is annotation necessary? - ioloop.clear_current() - ioloop.make_current() + ioloop: tornado.ioloop.IOLoop = tornado.ioloop.IOLoop.current() self.ioloop = ioloop application = tornado.web.Application(self.handlers, gzip=True) # If tornado version is 5.0 or greater, io_loop arg does not exist