Skip to content

Commit 3e878f5

Browse files
committed
Python: Model django response subclass relationship
1 parent abe6f16 commit 3e878f5

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

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

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,8 @@ class DjangoHttpResponseRedirect extends FindSubclassesSpec {
131131
override API::Node getAlreadyModeledClass() {
132132
result = PrivateDjango::DjangoImpl::DjangoHttp::Response::HttpResponseRedirect::classRef()
133133
}
134+
135+
override DjangoHttpResponse getSuperClass() { any() }
134136
}
135137

136138
class DjangoHttpResponsePermanentRedirect extends FindSubclassesSpec {
@@ -142,6 +144,8 @@ class DjangoHttpResponsePermanentRedirect extends FindSubclassesSpec {
142144
result =
143145
PrivateDjango::DjangoImpl::DjangoHttp::Response::HttpResponsePermanentRedirect::classRef()
144146
}
147+
148+
override DjangoHttpResponse getSuperClass() { any() }
145149
}
146150

147151
class DjangoHttpResponseNotModified extends FindSubclassesSpec {
@@ -150,6 +154,8 @@ class DjangoHttpResponseNotModified extends FindSubclassesSpec {
150154
override API::Node getAlreadyModeledClass() {
151155
result = PrivateDjango::DjangoImpl::DjangoHttp::Response::HttpResponseNotModified::classRef()
152156
}
157+
158+
override DjangoHttpResponse getSuperClass() { any() }
153159
}
154160

155161
class DjangoHttpResponseBadRequest extends FindSubclassesSpec {
@@ -158,6 +164,8 @@ class DjangoHttpResponseBadRequest extends FindSubclassesSpec {
158164
override API::Node getAlreadyModeledClass() {
159165
result = PrivateDjango::DjangoImpl::DjangoHttp::Response::HttpResponseBadRequest::classRef()
160166
}
167+
168+
override DjangoHttpResponse getSuperClass() { any() }
161169
}
162170

163171
class DjangoHttpResponseNotFound extends FindSubclassesSpec {
@@ -166,6 +174,8 @@ class DjangoHttpResponseNotFound extends FindSubclassesSpec {
166174
override API::Node getAlreadyModeledClass() {
167175
result = PrivateDjango::DjangoImpl::DjangoHttp::Response::HttpResponseNotFound::classRef()
168176
}
177+
178+
override DjangoHttpResponse getSuperClass() { any() }
169179
}
170180

171181
class DjangoHttpResponseForbidden extends FindSubclassesSpec {
@@ -174,6 +184,8 @@ class DjangoHttpResponseForbidden extends FindSubclassesSpec {
174184
override API::Node getAlreadyModeledClass() {
175185
result = PrivateDjango::DjangoImpl::DjangoHttp::Response::HttpResponseForbidden::classRef()
176186
}
187+
188+
override DjangoHttpResponse getSuperClass() { any() }
177189
}
178190

179191
class DjangoHttpResponseNotAllowed extends FindSubclassesSpec {
@@ -182,6 +194,8 @@ class DjangoHttpResponseNotAllowed extends FindSubclassesSpec {
182194
override API::Node getAlreadyModeledClass() {
183195
result = PrivateDjango::DjangoImpl::DjangoHttp::Response::HttpResponseNotAllowed::classRef()
184196
}
197+
198+
override DjangoHttpResponse getSuperClass() { any() }
185199
}
186200

187201
class DjangoHttpResponseGone extends FindSubclassesSpec {
@@ -190,6 +204,8 @@ class DjangoHttpResponseGone extends FindSubclassesSpec {
190204
override API::Node getAlreadyModeledClass() {
191205
result = PrivateDjango::DjangoImpl::DjangoHttp::Response::HttpResponseGone::classRef()
192206
}
207+
208+
override DjangoHttpResponse getSuperClass() { any() }
193209
}
194210

195211
class DjangoHttpResponseServerError extends FindSubclassesSpec {
@@ -198,6 +214,8 @@ class DjangoHttpResponseServerError extends FindSubclassesSpec {
198214
override API::Node getAlreadyModeledClass() {
199215
result = PrivateDjango::DjangoImpl::DjangoHttp::Response::HttpResponseServerError::classRef()
200216
}
217+
218+
override DjangoHttpResponse getSuperClass() { any() }
201219
}
202220

203221
class DjangoHttpResponseJsonResponse extends FindSubclassesSpec {
@@ -206,6 +224,8 @@ class DjangoHttpResponseJsonResponse extends FindSubclassesSpec {
206224
override API::Node getAlreadyModeledClass() {
207225
result = PrivateDjango::DjangoImpl::DjangoHttp::Response::JsonResponse::classRef()
208226
}
227+
228+
override DjangoHttpResponse getSuperClass() { any() }
209229
}
210230

211231
class DjangoHttpResponseStreamingResponse extends FindSubclassesSpec {
@@ -224,6 +244,8 @@ class DjangoHttpResponseFileResponse extends FindSubclassesSpec {
224244
override API::Node getAlreadyModeledClass() {
225245
result = PrivateDjango::DjangoImpl::DjangoHttp::Response::FileResponse::classRef()
226246
}
247+
248+
override DjangoHttpResponseStreamingResponse getSuperClass() { any() }
227249
}
228250

229251
class FlaskResponse extends FindSubclassesSpec {
@@ -348,6 +370,8 @@ class RestFrameworkResponse extends FindSubclassesSpec {
348370
RestFrameworkResponse() { this = "rest_framework.response.Response~Subclass" }
349371

350372
override API::Node getAlreadyModeledClass() { result = RestFramework::Response::classRef() }
373+
374+
override DjangoHttpResponse getSuperClass() { any() }
351375
}
352376

353377
class SqlAlchemyEngine extends FindSubclassesSpec {

python/ql/test/experimental/library-tests/FindSubclass/Find.expected

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
| Django.Views.View~Subclass | find_subclass_test | Member[clash2] |
22
| Django.Views.View~Subclass | find_subclass_test | Member[clash3] |
33
| Django.Views.View~Subclass | find_subclass_test | Member[clash] |
4-
| django.http.response.HttpResponse~Subclass | find_subclass_test | Member[MyRestResponse] |
54
| flask.MethodView~Subclass | find_subclass_test | Member[C] |
65
| flask.View~Subclass | find_subclass_test | Member[A] |
76
| flask.View~Subclass | find_subclass_test | Member[B] |

0 commit comments

Comments
 (0)