Skip to content

Commit 8802ab3

Browse files
authored
Merge pull request #752 from jlowin/input-meta
Don't overwrite fields on InputObject - closes #720
2 parents 332214b + 00ccc20 commit 8802ab3

File tree

2 files changed

+48
-1
lines changed

2 files changed

+48
-1
lines changed

graphene/tests/issues/test_720.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# https://github.com/graphql-python/graphene/issues/720
2+
# InputObjectTypes overwrite the "fields" attribute of the provided
3+
# _meta object, so even if dynamic fields are provided with a standard
4+
# InputObjectTypeOptions, they are ignored.
5+
6+
import graphene
7+
8+
9+
class MyInputClass(graphene.InputObjectType):
10+
11+
@classmethod
12+
def __init_subclass_with_meta__(
13+
cls, container=None, _meta=None, fields=None, **options):
14+
if _meta is None:
15+
_meta = graphene.types.inputobjecttype.InputObjectTypeOptions(cls)
16+
_meta.fields = fields
17+
super(MyInputClass, cls).__init_subclass_with_meta__(
18+
container=container, _meta=_meta, **options)
19+
20+
21+
class MyInput(MyInputClass):
22+
23+
class Meta:
24+
fields = dict(x=graphene.Field(graphene.Int))
25+
26+
27+
class Query(graphene.ObjectType):
28+
myField = graphene.Field(graphene.String, input=graphene.Argument(MyInput))
29+
30+
def resolve_myField(parent, info, input):
31+
return 'ok'
32+
33+
34+
def test_issue():
35+
query_string = '''
36+
query myQuery {
37+
myField(input: {x: 1})
38+
}
39+
'''
40+
41+
schema = graphene.Schema(query=Query)
42+
result = schema.execute(query_string)
43+
44+
assert not result.errors

graphene/types/inputobjecttype.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,10 @@ def __init_subclass_with_meta__(cls, container=None, _meta=None, **options):
5050
yank_fields_from_attrs(base.__dict__, _as=InputField)
5151
)
5252

53-
_meta.fields = fields
53+
if _meta.fields:
54+
_meta.fields.update(fields)
55+
else:
56+
_meta.fields = fields
5457
if container is None:
5558
container = type(cls.__name__, (InputObjectTypeContainer, cls), {})
5659
_meta.container = container

0 commit comments

Comments
 (0)