Schema Directives implementation for graphene
Project description
Graphene Directives
Schema Directives implementation for graphene
Directive Locations Supported
- DirectiveLocation.SCHEMA
- DirectiveLocation.OBJECT
- DirectiveLocation.ENUM
- DirectiveLocation.INTERFACE
- DirectiveLocation.UNION
- DirectiveLocation.SCALAR
- DirectiveLocation.FIELD_DEFINITION
- DirectiveLocation.INPUT_FIELD_DEFINITION
- DirectiveLocation.INPUT_OBJECT
- DirectiveLocation.ENUM_VALUE
- DirectiveLocation.ARGUMENT_DEFINITION,
Example
Using @directive
import graphene
from graphql import (
GraphQLArgument,
GraphQLInt,
GraphQLNonNull,
GraphQLString,
)
from graphene_directives import CustomDirective, DirectiveLocation, build_schema, directive
CacheDirective = CustomDirective(
name="cache",
locations=[DirectiveLocation.FIELD_DEFINITION, DirectiveLocation.OBJECT],
args={
"max_age": GraphQLArgument(
GraphQLNonNull(GraphQLInt),
description="Specifies the maximum age for cache in seconds.",
),
"swr": GraphQLArgument(
GraphQLInt, description="Stale-while-revalidate value in seconds. Optional."
),
"scope": GraphQLArgument(
GraphQLString, description="Scope of the cache. Optional."
),
},
description="Caching directive to control cache behavior of fields or fragments.",
)
@directive(CacheDirective, max_age=200)
class SomeType(graphene.ObjectType):
field_1 = directive(CacheDirective, field=graphene.String(), max_age=300)
field_2 = directive(CacheDirective, field=graphene.String(), max_age=300, swr=2)
field_3 = graphene.String()
class Query(graphene.ObjectType):
some_query = graphene.Field(SomeType)
schema = build_schema(
query=Query, directives=[CacheDirective]
)
Using directive_decorator
import graphene
from graphql import (
GraphQLArgument,
GraphQLInt,
GraphQLNonNull,
GraphQLString,
)
from graphene_directives import CustomDirective, DirectiveLocation, build_schema, directive_decorator
CacheDirective = CustomDirective(
name="cache",
locations=[DirectiveLocation.FIELD_DEFINITION, DirectiveLocation.OBJECT],
args={
"max_age": GraphQLArgument(
GraphQLNonNull(GraphQLInt),
description="Specifies the maximum age for cache in seconds.",
),
"swr": GraphQLArgument(
GraphQLInt, description="Stale-while-revalidate value in seconds. Optional."
),
"scope": GraphQLArgument(
GraphQLString, description="Scope of the cache. Optional."
),
},
description="Caching directive to control cache behavior of fields or fragments.",
)
# This returns a partial of directive function
cache = directive_decorator(target_directive=CacheDirective)
@cache(max_age=200)
class SomeType(graphene.ObjectType):
field_1 = cache(field=graphene.String(), max_age=300)
field_2 = cache(field=graphene.String(), max_age=300, swr=2)
field_3 = graphene.String()
class Query(graphene.ObjectType):
some_query = graphene.Field(SomeType)
schema = build_schema(
query=Query, directives=[CacheDirective]
)
Custom Input Validation
import graphene
from graphql import (
GraphQLArgument,
GraphQLDirective,
GraphQLInt,
GraphQLNonNull,
GraphQLString,
)
from graphene_directives import CustomDirective, DirectiveLocation, build_schema, directive_decorator
def validate_input(_directive: GraphQLDirective, inputs: dict) -> bool:
if inputs.get("max_age") > 2500:
return False
return True
CacheDirective = CustomDirective(
name="cache",
locations=[DirectiveLocation.FIELD_DEFINITION, DirectiveLocation.OBJECT],
args={
"max_age": GraphQLArgument(
GraphQLNonNull(GraphQLInt),
description="Specifies the maximum age for cache in seconds.",
),
"swr": GraphQLArgument(
GraphQLInt, description="Stale-while-revalidate value in seconds. Optional."
),
"scope": GraphQLArgument(
GraphQLString, description="Scope of the cache. Optional."
),
},
description="Caching directive to control cache behavior of fields or fragments.",
validator=validate_input,
)
# This returns a partial of directive function
cache = directive_decorator(target_directive=CacheDirective)
@cache(max_age=200)
class SomeType(graphene.ObjectType):
field_1 = cache(field=graphene.String(), max_age=300)
field_2 = cache(field=graphene.String(), max_age=300, swr=2)
field_3 = graphene.String()
class Query(graphene.ObjectType):
some_query = graphene.Field(SomeType)
schema = build_schema(
query=Query, directives=[CacheDirective]
)
Complex Use Cases
Refer Code
and Graphql Output
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
graphene_directives-0.3.1.tar.gz
(11.1 kB
view hashes)
Built Distribution
Close
Hashes for graphene_directives-0.3.1.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5e16aa8fa7df4fd090f3df3c2a2e5cc2de45119b47c355bf10930956d32d176a |
|
MD5 | 6d5b793b06723068cedb573633795a7b |
|
BLAKE2b-256 | 0785e2dfcaa38b413a19f299875d2c7e9cb13646dc048d68a2a0159a2582e3dd |
Close
Hashes for graphene_directives-0.3.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 11a77dad70bed76ee997afc35125d7172ba1581e2170a2daea7aab9706620564 |
|
MD5 | 98c44d3ac0178be209f0c5236a98b3d7 |
|
BLAKE2b-256 | c8faa4fbcab0a927dd7dfbea815c131323dd9e62fbfff6b51779c2f332fbb760 |