graphql-python / graphql-python/graphql-core-legacy

Enum default_value serialization issue

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

説明

Originally reported in [graphene issue #691](https://github.com/graphql-python/graphene/issues/691)

Argument default_value serializes enum value instead of name. graphql spec does not support enum values and graphql-js serializes enums to the name not value. graphql-python is not consistent with graphql-js. I attempted to find a workaround by setting the enum value to a string of the name but teh result is a string that includes escaped quotes.

Using the name of the enum doesn't work:

```python
class MyEnum(graphene.Enum):
FOO=0
BAR=1

foobar = graphene.List(FooBar, my_enum=graphene.Argument(MyEnum, default_value=MyEnum.FOO.name))
```

This results in the defaultValue being ```"\"FOO\""```. This does not follow the graphql spec for enums and breaks with third party introspection. Specifically i'm trying to stitch a graphene remote schema and the invalid defaultValue results in a null returned in the merged schema (using graphql-tools).

Using a string value doesn't work either:

```python
class MyEnum(graphene.Enum):
FOO="FOO"
BAR="BAR"
```
This also doesn't work with using MyEnum.FOO.value for default_value nor setting it specifically to the static string "FOO".

I tried looking for how default_value gets resolved for enums but haven't been able to track it down. I think if we can just get the string value for default_value to not include the escaped string quotes then my schema stitching will work. I haven't been able to figure out how to define an enum so that this will happen.

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

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

評価

この issue はまだ評価されていません。

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

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