Comments (3)
I'd do the PR myself, but I wonder to see if that's something maintainers agree with me or not.
from graphene.
Graphql has a weird relationship with nullable field.
The nuance of "a required nullable field" is not achievable as far as I know in the schema definition... indeed the "no value" is null
and is valid for optional fields too.
Meaning that
type Mutation {
doNothing(input: DoNothingInput!): DoNothingPayload
}
type DoNothingPayload {
nullableInt: Int
}
input DoNothingInput {
nullableInt: Int
}
that can be obtained with:
nullable_int = graphene.Int(required=False)
serves both purposes of being nullable and being optional.
Indeed you can do the following 3 behavior:
- you provide an actual integer input:
mutation {
doNothing(input: { nullableInt: 1 }) {
nullableInt
}
}
and in your resolver "nullable_int" in input
is True
(and input.nullable_int
is 1
and input["nullable_int"]
is 1
)
- you can provide
null
input:
mutation {
doNothing(input: { nullableInt: null }) {
nullableInt
}
}
and in your resolver "nullable_int" in input
is True
(and input.nullable_int
is None
and input["nullable_int"]
is None
)
- you can provide no input at all:
mutation {
doNothing(input: { }) {
nullableInt
}
}
and in your resolver "nullable_int" in input
is False
(and input.nullable_int
is None
and input["nullable_int"]
actually fails)
So if you want to have a required nullable input, your only way to do it is to make the type required=False
and add an assertion in your mutation
assert "nullable_int" in input
There is no way as far as I know to enforce that at schema level...
from graphene.
Note that this issue is an open conversation in the grapqh specs: graphql/graphql-spec#476
from graphene.
Related Issues (20)
- @include and @skip directives lead to irrelevant errors HOT 2
- Provide a way to configure default timezone of DateTimes HOT 3
- Enum conversion to Graphene Enum fails if Enum name is "type" HOT 1
- Enum equality comparison is inconsistent
- http://www.graphene-python.org Has EXPIRED HOT 3
- Upload file HOT 2
- Unexpected argument in Pycharm 2023.2.1 HOT 1
- Default_value option in Arguments inside Mutation is not working as expected HOT 2
- Exception: NonNull could not have a mounted String() as inner type. Try with NonNull(String).
- Returning non fatal errors alongside data HOT 1
- Conversion to snake_case fails on nested inputs
- Depth limit validator key error if fragment undefined
- Tests in `graphene/relay/tests/test_custom_global_id.py` fail due incompatibility with pytest 8.x HOT 2
- Enum.from_enum() fails with Django IntegerChoices
- Do you support GQL over websocket? HOT 1
- More documentation for DisableIntrospection?
- Subclass built-in scalars without creating new GraphQL type
- In 3.1.0, `resolve_type` method on Interfaces and Unions no longer supports returning the GraphQL Type as a string HOT 1
- release 3.4.0 HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from graphene.