graphene
graphene copied to clipboard
[Documentation] Fix TypeError and make the examples in ObjectType > Resolver Parameters > Parent Value Object section self contained
Note: for support questions, please use stackoverflow. This repository's issues are reserved for feature requests and bug reports.
- What is the current behavior? You can't actually execute the example under the Parent Value Object section. There are mainly two issues. Let's have a look at the code snippet:
from graphene import ObjectType, String, Field
class Person(ObjectType):
full_name = String()
def resolve_full_name(parent, info):
return f"{parent.first_name} {parent.last_name}"
class Query(ObjectType):
me = Field(Person)
def resolve_me(parent, info):
# returns an object that represents a Person
return get_human(name="Luke Skywalker")
- From a beginner's perspective, it's unclear how the
resolve_full_name
method has access tofirst_name
andlast_name
when they aren't defined in thePerson
class. - Seems like this
get_human
function(or method?) came out of nowhere.
Then it gets executed like this:
schema = Schema(query=Query)
query_string = "{ me { fullName } }"
result = schema.execute(query_string)
assert result["data"]["me"] == {"fullName": "Luke Skywalker")
-
The last line of the above snippet has a misplaced parenthesis
-
Even if you fix that one, it raises
TypeError
sayingTypeError: 'ExecutionResult' object is not subscriptable
.result
object has ato_dict
method, maybe we should use that here. -
If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem via a Github repo, https://repl.it or similar.
-
What is the expected behavior? At this stage of the documentation, the example should be self-contained, even if it gets a bit verbose.
-
What is the motivation / use case for changing the behavior?
Maybe this is the expected behavior?
from graphene import ObjectType, String, Field, Schema
class Person(ObjectType):
first_name = String()
last_name = String()
full_name = String()
def resolve_full_name(parent, info):
return f"{parent.first_name} {parent.last_name}"
def get_human(name):
first_name, last_name = name.split()
return Person(first_name=first_name, last_name=last_name)
class Query(ObjectType):
me = Field(Person)
def resolve_me(parent, info):
# returns an object that represents a Person
return get_human(name="Luke Skywalker")
schema = Schema(query=Query)
query_string = "{ me { fullName } }"
result = schema.execute(query_string)
assert result.to_dict()["data"]["me"] == {"fullName": "Luke Skywalker"}
-
Please tell us about your environment:
- Version: graphql-core==2.3.2, graphql-relay==2.0.1
- Platform: Ubuntu 20.04
-
Other information (e.g. detailed explanation, stacktraces, related issues, suggestions how to fix, links for us to have context, eg. stackoverflow)
I totally agree that this example brings a lot of troubles. We will appreciate a clearer example :pray: