From f5bed2d955d1fff088375377e264ad68f8b1af32 Mon Sep 17 00:00:00 2001 From: Taus Date: Tue, 10 Oct 2023 14:01:24 +0000 Subject: [PATCH] Python: Add `clickhouse_driver` model --- .../ql/lib/semmle/python/frameworks/ClickhouseDriver.qll | 4 ++++ python/ql/src/meta/ClassHierarchy/Find.ql | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/python/ql/lib/semmle/python/frameworks/ClickhouseDriver.qll b/python/ql/lib/semmle/python/frameworks/ClickhouseDriver.qll index 035b30620bc..75622c9cf4d 100644 --- a/python/ql/lib/semmle/python/frameworks/ClickhouseDriver.qll +++ b/python/ql/lib/semmle/python/frameworks/ClickhouseDriver.qll @@ -9,6 +9,7 @@ private import python private import semmle.python.Concepts private import semmle.python.ApiGraphs private import semmle.python.frameworks.PEP249 +private import semmle.python.frameworks.data.ModelsAsData /** * INTERNAL: Do not use. @@ -37,6 +38,9 @@ module ClickhouseDriver { or // commonly used alias classRef = API::moduleImport("clickhouse_driver").getMember("Client") + or + // Models-as-Data subclass + classRef = ModelOutput::getATypeNode("clickhouse_driver.client.Client~Subclass") | result = classRef.getASubclass*() ) diff --git a/python/ql/src/meta/ClassHierarchy/Find.ql b/python/ql/src/meta/ClassHierarchy/Find.ql index 45b6e44b57b..76baf5402fa 100644 --- a/python/ql/src/meta/ClassHierarchy/Find.ql +++ b/python/ql/src/meta/ClassHierarchy/Find.ql @@ -15,6 +15,7 @@ private import semmle.python.frameworks.Tornado private import semmle.python.frameworks.Stdlib private import semmle.python.frameworks.Requests private import semmle.python.frameworks.Starlette +private import semmle.python.frameworks.ClickhouseDriver import semmle.python.frameworks.data.internal.ApiGraphModelsExtensions as Extensions class FlaskViewClasses extends FindSubclassesSpec { @@ -234,6 +235,12 @@ class StarletteWebsocket extends FindSubclassesSpec { override API::Node getAlreadyModeledClass() { result = Starlette::WebSocket::classRef() } } +class ClickhouseClient extends FindSubclassesSpec { + ClickhouseClient() { this = "clickhouse_driver.client.Client~Subclass" } + + override API::Node getAlreadyModeledClass() { result = ClickhouseDriver::Client::subclassRef() } +} + bindingset[fullyQualified] predicate fullyQualifiedToYamlFormat(string fullyQualified, string type2, string path) { exists(int firstDot | firstDot = fullyQualified.indexOf(".", 0, 0) |