diff --git a/python/ql/lib/semmle/python/frameworks/Urllib3.qll b/python/ql/lib/semmle/python/frameworks/Urllib3.qll index 0214dadfc10..23332afc7aa 100644 --- a/python/ql/lib/semmle/python/frameworks/Urllib3.qll +++ b/python/ql/lib/semmle/python/frameworks/Urllib3.qll @@ -9,15 +9,18 @@ private import python private import semmle.python.Concepts private import semmle.python.ApiGraphs +private import semmle.python.frameworks.data.ModelsAsData /** + * INTERNAL: Do not use. + * * Provides models for the `urllib3` PyPI package. * * See * - https://pypi.org/project/urllib3/ * - https://urllib3.readthedocs.io/en/stable/reference/ */ -private module Urllib3 { +module Urllib3 { /** * Provides models for the `urllib3.request.RequestMethods` class and subclasses, such * as the `urllib3.PoolManager` class @@ -30,7 +33,7 @@ private module Urllib3 { */ module PoolManager { /** Gets a reference to the `urllib3.PoolManager` class. */ - private API::Node classRef() { + API::Node classRef() { result = API::moduleImport("urllib3") .getMember(["PoolManager", "ProxyManager", "HTTPConnectionPool", "HTTPSConnectionPool"]) @@ -40,6 +43,8 @@ private module Urllib3 { .getMember("request") .getMember("RequestMethods") .getASubclass+() + or + result = ModelOutput::getATypeNode("urllib3.PoolManager~Subclass").getASubclass*() } /** diff --git a/python/ql/src/meta/ClassHierarchy/Find.ql b/python/ql/src/meta/ClassHierarchy/Find.ql index d6eace97b05..18d75440032 100644 --- a/python/ql/src/meta/ClassHierarchy/Find.ql +++ b/python/ql/src/meta/ClassHierarchy/Find.ql @@ -26,6 +26,7 @@ private import semmle.python.frameworks.Pycurl private import semmle.python.frameworks.RestFramework private import semmle.python.frameworks.SqlAlchemy private import semmle.python.frameworks.Tornado +private import semmle.python.frameworks.Urllib3 import semmle.python.frameworks.data.internal.ApiGraphModelsExtensions as Extensions class FlaskViewClasses extends FindSubclassesSpec { @@ -397,6 +398,12 @@ class TornadoRequest extends FindSubclassesSpec { } } +class Urllib3PoolManager extends FindSubclassesSpec { + Urllib3PoolManager() { this = "urllib3.PoolManager~Subclass" } + + override API::Node getAlreadyModeledClass() { result = Urllib3::PoolManager::classRef() } +} + bindingset[fullyQualified] predicate fullyQualifiedToYamlFormat(string fullyQualified, string type2, string path) { exists(int firstDot | firstDot = fullyQualified.indexOf(".", 0, 0) |