graphql-utilities
graphql-utilities tries to secure your GraphQL API from malicious queries and provides utilities to make using graphql-core easier.
-
It comes with a custom configurable
ExtendedExecutionContextclass that is capable of performing:- query cost analysis: define the cost of your queries using the
@cost()directive provided,graphql-utilitiesprovides helper functions and custom execution context to protect you from overly complex queries. - depth limiting: limit the maximum depth of queries, it's especially useful with object types with recursive relationship
- query cost analysis: define the cost of your queries using the
-
It also ships decorators for:
- resource-level/one-shot middleware: middleware in
graphql-coreis run at field-level, it is handly when you need your middleware to run only once, especially auth-related middleware.
- resource-level/one-shot middleware: middleware in
Installation
pip install graphql-utilities
Alternatively, if you use pipenv:
pipenv install graphql-utilities
Examples
Operation-level middleware (One-shot middleware)
from graphql_utilities.decorators import run_only_once
class AuthMiddleware:
@run_only_once
def resolve(self, next_, root, info, *args, **kwargs):
# middleware logic
return next_(root, info, *args, **kwargs)
Limiting Query Depth
# import your schema
from graphql import execute, parse # Requires `graphql-core>=3.0`
from graphql_utilities.execution import ExtendedExecutionContext
query = '{ field_1_str field_2_int field_3_obj { field_3_obj_sub_1 { xxx } } }'
graphql_sync(schema=schema, source=query,
context_value={"depth_analysis": {
"max_depth": 2 # Maximum depth allowed
}},
execution_context_class=ExtendedExecutionContext # Use the `ExtendedExecutionContext` provided in `graphql-utilities`
)
Query Cost Analysis
See the documentation at https://graphql-utilities.readthedocs.io/en/latest/
Motivation
In recent projects, I ran into some problems with graphene and graphql-core including missing operation-level middleware (See issue here), etc.
graphql-utilities is a compilation of utilities and custom execution context for depth analysis, etc targeting graphql-core>=3.0.
Contributing
Any form of contribution, feature requests, bug reports, pull requests are largely welcome.
Licenses
MIT Licensed. GraphQL logo is licensed under Facebook BSD.
Metadata
Release files for graphql-utilities 0.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| graphql-utilities-0.4.0.tar.gz | 11.5 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| graphql_utilities-0.4.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 25.7 kB
Release files / graphql-utilities-0.4.0.tar.gz
| Download URL | graphql-utilities-0.4.0.tar.gz |
|---|---|
| Size | 11.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8d1e5f43ec45c8da2b254cb53f4253df14fa7edeb494bae604aec21fe8d5d2e6
|
|
BLAKE2b-256 checksum How to use checksums |
5024cf4a8dac6c526ef2479a2afadc3c2b2d559878b336ceb762f7301458a986
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/45.1.0 requests-toolbelt/0.9.1 tqdm/4.43.0 CPython/3.7.6
|
Release files / graphql_utilities-0.4.0-py3-none-any.whl
| Download URL | graphql_utilities-0.4.0-py3-none-any.whl |
|---|---|
| Size | 14.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9c13af3fc4d5648df8e91385542aa155c51feb7009127e89350839763f871df3
|
|
BLAKE2b-256 checksum How to use checksums |
277e2e9469fd4763e8557e59f5662f4caba6e37670bc03ec78f3304abf4807d1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/45.1.0 requests-toolbelt/0.9.1 tqdm/4.43.0 CPython/3.7.6
|
Security for graphql-utilities 0.4.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.