graphql-python / graphql-python/graphene

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

Ouverte
#1,239 1 commentaire 1 réaction 0 personnes assignées Voir sur GitHub
🐛 bug
Langage dominant
Python
Étoiles
8.2k
Forks
818
Métriques de merge des PR
Aucune PR mergée en 30 j

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)

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Piste de recherche

Commencez par la section de documentation ObjectType > Resolver Parameters > Parent Value Object indiquée dans l’issue. Rendez l’exemple autonome en définissant les champs référencés et la fonction get_human, corrigez la syntaxe de l’assertion et utilisez la conversion documentée de ExecutionResult afin que l’exemple s’exécute correctement.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
graphql, python
Domaine
documentation
Type d'issue
Documentation
Difficulté
2/5
Temps estimé
1-3 heures
Activité
À l'abandon
Clarté
Clairement spécifiée
Accessibilité débutants
55/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.