graphql-python / graphql-python/graphene

[Documentation] Fix TypeError and make the examples in ObjectType > Resolver Parameters > Parent Value Object section self contained

Open
#1,239 1 comment 1 reaction 0 assignees View on GitHub
🐛 bug
Dominant language
Python
Stars
8.2k
Forks
818
PR merge metrics
No merged PRs in 30d

Description

**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:

```python
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 to `first_name` and `last_name` when they aren't defined in the `Person` class.
* Seems like this `get_human` function(or method?) came out of nowhere.

Then it gets executed like this:

```python

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` saying `TypeError: 'ExecutionResult' object is not subscriptable`. `result` object has a `to_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?

```python
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)

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.