Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit eb97a79

Browse files
committed
Python: Automodel for tornado
1 parent d6fec9e commit eb97a79

2 files changed

Lines changed: 15 additions & 1 deletion

File tree

python/ql/lib/semmle/python/frameworks/Tornado.qll

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ private import semmle.python.ApiGraphs
1212
private import semmle.python.regex
1313
private import semmle.python.frameworks.Stdlib
1414
private import semmle.python.frameworks.internal.InstanceTaintStepsHelper
15+
private import semmle.python.frameworks.data.ModelsAsData
1516

1617
/**
1718
* INTERNAL: Do not use.
@@ -87,7 +88,11 @@ module Tornado {
8788
*/
8889
module RequestHandler {
8990
/** Gets a reference to the `tornado.web.RequestHandler` class or any subclass. */
90-
API::Node subclassRef() { result = web().getMember("RequestHandler").getASubclass*() }
91+
API::Node subclassRef() {
92+
result = web().getMember("RequestHandler").getASubclass*()
93+
or
94+
result = ModelOutput::getATypeNode("tornado.web.RequestHandler~Subclass").getASubclass*()
95+
}
9196

9297
/** A RequestHandler class (most likely in project code). */
9398
class RequestHandlerClass extends Class {

python/ql/src/meta/ClassHierarchy/Find.ql

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import semmle.python.frameworks.internal.SubclassFinder::NotExposed
1111
private import semmle.python.frameworks.Flask
1212
private import semmle.python.frameworks.FastApi
1313
private import semmle.python.frameworks.Django
14+
private import semmle.python.frameworks.Tornado
1415
import semmle.python.frameworks.data.internal.ApiGraphModelsExtensions as Extensions
1516

1617
class FlaskViewClasses extends FindSubclassesSpec {
@@ -57,6 +58,14 @@ class DjangoField extends FindSubclassesSpec {
5758
}
5859
}
5960

61+
class TornadoRequestHandler extends FindSubclassesSpec {
62+
TornadoRequestHandler() { this = "tornado.web.RequestHandler~Subclass" }
63+
64+
override API::Node getAlreadyModeledClass() {
65+
result = Tornado::TornadoModule::Web::RequestHandler::subclassRef()
66+
}
67+
}
68+
6069
bindingset[fullyQualified]
6170
predicate fullyQualifiedToYamlFormat(string fullyQualified, string type2, string path) {
6271
exists(int firstDot | firstDot = fullyQualified.indexOf(".", 0, 0) |

0 commit comments

Comments
 (0)