Graphene-directives

Latest version: v0.4.6

Safety actively analyzes 624811 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 1 of 3

0.4.6

feat: schema also validates the correct locations of directives now, in addition to run time checking by the directive decorator

**Full Changelog**: https://github.com/strollby/graphene-directives/compare/v0.4.5...v0.4.6

0.4.5

- `build_schema(...)` accepts a new argument `include_graphql_spec_directives` (defaults to true) . It will add graphql spec directives `include, skip, deprecated, specifiedBy`

**Full Changelog**: https://github.com/strollby/graphene-directives/compare/v0.4.4...v0.4.5

0.4.4

**Full Changelog**: https://github.com/strollby/graphene-directives/compare/v0.4.3...v0.4.4

0.4.3

- auto camel cased fields skipped directive decorators

**Full Changelog**: https://github.com/strollby/graphene-directives/compare/v0.4.2...v0.4.3

0.4.2

What's Changed
* feat: add support for input transformation by mak626 in https://github.com/strollby/graphene-directives/pull/9


**Full Changelog**: https://github.com/strollby/graphene-directives/compare/v0.4.1...v0.4.2

0.4.1

What's Changed
* feat: pass schema to validators by mak626 in https://github.com/strollby/graphene-directives/pull/8

Custom Input Validation

python
from typing import Any

import graphene
from graphql import (
GraphQLArgument,
GraphQLInt,
GraphQLNonNull,
GraphQLString,
)

from graphene_directives import CustomDirective, DirectiveLocation, Schema, build_schema, directive_decorator


def validate_non_field_input(_type: Any, inputs: dict, _schema: Schema) -> bool:
"""
def validator (type_: graphene type, inputs: Any, schema: Schema) -> bool,
if validator returns False, library raises DirectiveCustomValidationError
"""
if inputs.get("max_age") > 2500:
return False
return True


def validate_field_input(
_parent_type: Any, _field_type: Any, inputs: dict, _schema: Schema
) -> bool:
"""
def validator (parent_type_: graphene_type, field_type_: graphene type, inputs: Any, schema: Schema) -> bool,
if validator returns False, library raises DirectiveCustomValidationError
"""
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.",
non_field_validator=validate_non_field_input,
field_validator=validate_field_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]
)



**Full Changelog**: https://github.com/strollby/graphene-directives/compare/v0.4.0...v0.4.1

Page 1 of 3

© 2024 Safety CLI Cybersecurity Inc. All Rights Reserved.