Python: Add httpx model

This commit is contained in:
Taus
2023-10-10 14:14:58 +00:00
committed by Rasmus Wriedt Larsen
parent 6128c89518
commit 699b6b8bef
2 changed files with 14 additions and 2 deletions

View File

@@ -9,15 +9,18 @@
private import python private import python
private import semmle.python.Concepts private import semmle.python.Concepts
private import semmle.python.ApiGraphs private import semmle.python.ApiGraphs
private import semmle.python.frameworks.data.ModelsAsData
/** /**
* INTERNAL: Do not use.
*
* Provides models for the `httpx` PyPI package. * Provides models for the `httpx` PyPI package.
* *
* See * See
* - https://pypi.org/project/httpx/ * - https://pypi.org/project/httpx/
* - https://www.python-httpx.org/ * - https://www.python-httpx.org/
*/ */
private module HttpxModel { module HttpxModel {
/** /**
* An outgoing HTTP request, from the `httpx` library. * An outgoing HTTP request, from the `httpx` library.
* *
@@ -59,8 +62,10 @@ private module HttpxModel {
*/ */
module Client { module Client {
/** Get a reference to the `httpx.Client` or `httpx.AsyncClient` class. */ /** Get a reference to the `httpx.Client` or `httpx.AsyncClient` class. */
private API::Node classRef() { API::Node classRef() {
result = API::moduleImport("httpx").getMember(["Client", "AsyncClient"]) result = API::moduleImport("httpx").getMember(["Client", "AsyncClient"])
or
result = ModelOutput::getATypeNode("httpx.Client~Subclass").getASubclass*()
} }
/** A method call on a Client that sends off a request */ /** A method call on a Client that sends off a request */

View File

@@ -18,6 +18,7 @@ private import semmle.python.frameworks.Starlette
private import semmle.python.frameworks.ClickhouseDriver private import semmle.python.frameworks.ClickhouseDriver
private import semmle.python.frameworks.Aiohttp private import semmle.python.frameworks.Aiohttp
private import semmle.python.frameworks.Fabric private import semmle.python.frameworks.Fabric
private import semmle.python.frameworks.Httpx
import semmle.python.frameworks.data.internal.ApiGraphModelsExtensions as Extensions import semmle.python.frameworks.data.internal.ApiGraphModelsExtensions as Extensions
class FlaskViewClasses extends FindSubclassesSpec { class FlaskViewClasses extends FindSubclassesSpec {
@@ -287,6 +288,12 @@ class FlaskBlueprint extends FindSubclassesSpec {
override API::Node getAlreadyModeledClass() { result = Flask::Blueprint::classRef() } override API::Node getAlreadyModeledClass() { result = Flask::Blueprint::classRef() }
} }
class HttpxClient extends FindSubclassesSpec {
HttpxClient() { this = "httpx.Client~Subclass" }
override API::Node getAlreadyModeledClass() { result = HttpxModel::Client::classRef() }
}
bindingset[fullyQualified] bindingset[fullyQualified]
predicate fullyQualifiedToYamlFormat(string fullyQualified, string type2, string path) { predicate fullyQualifiedToYamlFormat(string fullyQualified, string type2, string path) {
exists(int firstDot | firstDot = fullyQualified.indexOf(".", 0, 0) | exists(int firstDot | firstDot = fullyQualified.indexOf(".", 0, 0) |