@@ -16,6 +16,38 @@ private import semmle.python.ApiGraphs
1616 * See https://flask.palletsprojects.com/en/1.1.x/.
1717 */
1818private module FlaskModel {
19+ /** Provides models for flask view classes (defined in the `flask.views` module) */
20+ module Views {
21+ /**
22+ * Provides models for the `flask.views.View` class and subclasses.
23+ *
24+ * See https://flask.palletsprojects.com/en/1.1.x/views/#basic-principle.
25+ */
26+ module View {
27+ /** Gets a reference to the `flask.views.View` class or any subclass. */
28+ API:: Node subclassRef ( ) {
29+ result =
30+ API:: moduleImport ( "flask" )
31+ .getMember ( "views" )
32+ .getMember ( [ "View" , "MethodView" ] )
33+ .getASubclass * ( )
34+ }
35+ }
36+
37+ /**
38+ * Provides models for the `flask.views.MethodView` class and subclasses.
39+ *
40+ * See https://flask.palletsprojects.com/en/1.1.x/views/#method-based-dispatching.
41+ */
42+ module MethodView {
43+ /** Gets a reference to the `flask.views.MethodView` class or any subclass. */
44+ API:: Node subclassRef ( ) {
45+ result =
46+ API:: moduleImport ( "flask" ) .getMember ( "views" ) .getMember ( "MethodView" ) .getASubclass * ( )
47+ }
48+ }
49+ }
50+
1951 // ---------------------------------------------------------------------------
2052 // flask
2153 // ---------------------------------------------------------------------------
@@ -95,37 +127,6 @@ private module FlaskModel {
95127 /** Gets a reference to the `add_url_rule` method on an instance of `flask.Blueprint`. */
96128 API:: Node add_url_rule ( ) { result = instance_attr ( "add_url_rule" ) }
97129 }
98-
99- // -------------------------------------------------------------------------
100- // flask.views
101- // -------------------------------------------------------------------------
102- /** Gets a reference to the `flask.views` module. */
103- API:: Node views ( ) { result = flask_attr ( "views" ) }
104-
105- /** Provides models for the `flask.views` module */
106- module views {
107- /**
108- * Provides models for the `flask.views.View` class and subclasses.
109- *
110- * See https://flask.palletsprojects.com/en/1.1.x/views/#basic-principle.
111- */
112- module View {
113- /** Gets a reference to the `flask.views.View` class or any subclass. */
114- API:: Node subclassRef ( ) {
115- result = views ( ) .getMember ( [ "View" , "MethodView" ] ) .getASubclass * ( )
116- }
117- }
118-
119- /**
120- * Provides models for the `flask.views.MethodView` class and subclasses.
121- *
122- * See https://flask.palletsprojects.com/en/1.1.x/views/#method-based-dispatching.
123- */
124- module MethodView {
125- /** Gets a reference to the `flask.views.MethodView` class or any subclass. */
126- API:: Node subclassRef ( ) { result = views ( ) .getMember ( "MethodView" ) .getASubclass * ( ) }
127- }
128- }
129130 }
130131
131132 /**
@@ -187,7 +188,7 @@ private module FlaskModel {
187188 API:: Node api_node ;
188189
189190 FlaskViewClassDef ( ) {
190- this .getABase ( ) = flask :: views :: View:: subclassRef ( ) .getAUse ( ) .asExpr ( ) and
191+ this .getABase ( ) = Views :: View:: subclassRef ( ) .getAUse ( ) .asExpr ( ) and
191192 api_node .getAnImmediateUse ( ) .asExpr ( ) .( ClassExpr ) = this .getParent ( )
192193 }
193194
@@ -205,7 +206,7 @@ private module FlaskModel {
205206
206207 class FlaskMethodViewClassDef extends FlaskViewClassDef {
207208 FlaskMethodViewClassDef ( ) {
208- this .getABase ( ) = flask :: views :: MethodView:: subclassRef ( ) .getAUse ( ) .asExpr ( ) and
209+ this .getABase ( ) = Views :: MethodView:: subclassRef ( ) .getAUse ( ) .asExpr ( ) and
209210 api_node .getAnImmediateUse ( ) .asExpr ( ) .( ClassExpr ) = this .getParent ( )
210211 }
211212
0 commit comments