graphql-python / graphql-python/graphene

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

オープン
#1,239 コメント 1 件 リアクション 1 件 担当者 0 名 GitHub で見る
🐛 bug
主要言語
Python
スター
8.2k
フォーク
818
PR マージ指標
30日以内にマージされた PR はありません

説明

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

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

調査の方向性

issueで示されているドキュメントセクション ObjectType > Resolver Parameters > Parent Value Object から始めます。参照されているフィールドと関数 get_human を定義して例を自己完結させ、アサーションの構文を修正し、例が正常に実行されるようにドキュメントに記載された ExecutionResult の変換を使用します。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
graphql, python
領域
documentation
issue の種類
ドキュメント
難易度
2/5
見積もり時間
1〜3時間
活発さ
停滞
明瞭さ
明確に書かれている
初心者へのやさしさ
55/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。