Collection of utilities, middleware, decorators for graphql-core>=3.0
Project description
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
ExtendedExecutionContext
class that is capable of performing:- query cost analysis: define the cost of your queries using the
@cost()
directive provided,graphql-utilities
provides 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-core
is 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.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file graphql-utilities-0.4.0.tar.gz
.
File metadata
- Download URL: graphql-utilities-0.4.0.tar.gz
- Upload date:
- Size: 11.5 kB
- Tags: Source
- Uploaded using 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
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8d1e5f43ec45c8da2b254cb53f4253df14fa7edeb494bae604aec21fe8d5d2e6 |
|
MD5 | 9d3b7a5c58c9245cd5a1bfe68084b2f4 |
|
BLAKE2b-256 | 5024cf4a8dac6c526ef2479a2afadc3c2b2d559878b336ceb762f7301458a986 |
File details
Details for the file graphql_utilities-0.4.0-py3-none-any.whl
.
File metadata
- Download URL: graphql_utilities-0.4.0-py3-none-any.whl
- Upload date:
- Size: 14.1 kB
- Tags: Python 3
- Uploaded using 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
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9c13af3fc4d5648df8e91385542aa155c51feb7009127e89350839763f871df3 |
|
MD5 | 7c3a2088c3d054be29bcd0fdf4fc3637 |
|
BLAKE2b-256 | 277e2e9469fd4763e8557e59f5662f4caba6e37670bc03ec78f3304abf4807d1 |