From dada49f402c9d9e1843707e5acf5ed8d1c8a2f89 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Mon, 24 Nov 2025 13:57:43 +0000 Subject: [PATCH] Fix qldoc and tests --- python/ql/lib/semmle/python/frameworks/Tornado.qll | 11 +++++++++-- .../library-tests/frameworks/tornado/routing_test.py | 4 ++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/python/ql/lib/semmle/python/frameworks/Tornado.qll b/python/ql/lib/semmle/python/frameworks/Tornado.qll index a6ed8292dd7..61cf7df316e 100644 --- a/python/ql/lib/semmle/python/frameworks/Tornado.qll +++ b/python/ql/lib/semmle/python/frameworks/Tornado.qll @@ -437,7 +437,13 @@ module Tornado { /** Gets a reference to the `tornado.websocket` module. */ API::Node websocket() { result = Tornado::tornado().getMember("websocket") } + /** Provides models for the `tornado.websocket` module */ module WebSocket { + /** + * Provides models for the `tornado.websocket.WebSocketHandler` class and subclasses. + * + * See https://www.tornadoweb.org/en/stable/websocket.html#tornado.websocket.WebSocketHandler. + */ module WebSocketHandler { /** Gets a reference to the `tornado.websocket.WebSocketHandler` class or any subclass. */ API::Node subclassRef() { @@ -447,6 +453,7 @@ module Tornado { ModelOutput::getATypeNode("tornado.websocket.WebSocketHandler~Subclass").getASubclass*() } + /** A subclass of `tornado.websocket.WebSocketHandler`. */ class WebSocketHandlerClass extends Web::RequestHandler::RequestHandlerClass { WebSocketHandlerClass() { this.getParent() = subclassRef().asSource().asExpr() } @@ -457,7 +464,7 @@ module Tornado { result.getName() = "open" } - /** Gets a function that could handle incoming websocket events, if any. */ + /** Gets a function that could handle incoming WebSocket events, if any. */ Function getAWebSocketEventHandler() { result = this.getAMethod() and result.getName() = @@ -580,7 +587,7 @@ module Tornado { override string getFramework() { result = "Tornado" } } - /** A request handler for WebSocket events */ + /** A request handler for WebSocket events. */ private class TornadoWebSocketEventHandler extends Http::Server::RequestHandler::Range { TornadoWebSocketEventHandler() { exists(TornadoModule::WebSocket::WebSocketHandler::WebSocketHandlerClass cls | diff --git a/python/ql/test/library-tests/frameworks/tornado/routing_test.py b/python/ql/test/library-tests/frameworks/tornado/routing_test.py index 931be7b4bb6..94824e6e862 100644 --- a/python/ql/test/library-tests/frameworks/tornado/routing_test.py +++ b/python/ql/test/library-tests/frameworks/tornado/routing_test.py @@ -1,5 +1,6 @@ import tornado.web import tornado.routing +import tornado.websocket class FooHandler(tornado.web.RequestHandler): @@ -56,7 +57,7 @@ class PossiblyNotRouted(tornado.web.RequestHandler): class WebSocket(tornado.websocket.WebSocketHandler): def open(self, x): # $ requestHandler routedParameter=x - self.write_message("WebSocket open {}".format(x)) + self.write_message("WebSocket open {}".format(x)) def on_message(self, data): # $ requestHandler routedParameter=data self.write_message("WebSocket on_message {}".format(data)) @@ -74,7 +75,6 @@ class WebSocket(tornado.websocket.WebSocketHandler): print("check_origin", origin) return True - def make_app(): # see https://www.tornadoweb.org/en/stable/routing.html for even more examples