Make resolvers simple again · graphql-python/graphene@9769612 · GitHub
Skip to content

Commit 9769612

Browse files
committed
Make resolvers simple again
1 parent 800fbdf commit 9769612

23 files changed

Lines changed: 93 additions & 99 deletions

README.md

Lines changed: 2 additions & 2 deletions

README.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ Here is one example for you to get started:
6565
class Query(graphene.ObjectType):
6666
hello = graphene.String(description='A typical hello world')
6767
68-
def resolve_hello(self, args, context, info):
68+
def resolve_hello(self):
6969
return 'World'
7070
7171
schema = graphene.Schema(query=Query)

UPGRADE-v2.0.md

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ class Pet(CommonFields, Interface):
4949

5050
### resolve\_only\_args
5151

52-
`resolve_only_args` is now deprecated in favor of type annotations (using the polyfill `@graphene.annotate` in Python 2).
52+
`resolve_only_args` is now deprecated in favor of type annotations (using the polyfill `@graphene.annotate` in Python 2 in case is necessary for accessing `context` or `info`).
5353

5454
Before:
5555

@@ -68,8 +68,7 @@ With 2.0:
6868
class User(ObjectType):
6969
name = String()
7070

71-
# Decorate the resolver with @annotate in Python 2
72-
def resolve_name(self) -> str:
71+
def resolve_name(self):
7372
return self.name
7473
```
7574

@@ -129,7 +128,7 @@ def is_user_id(id):
129128
return id.startswith('userid_')
130129

131130
class Query(ObjectType):
132-
user = graphene.Field(User, id=UserInput())
131+
user = graphene.Field(User, input=UserInput())
133132

134133
@resolve_only_args
135134
def resolve_user(self, input):
@@ -149,10 +148,9 @@ class UserInput(InputObjectType):
149148
return self.id.startswith('userid_')
150149

151150
class Query(ObjectType):
152-
user = graphene.Field(User, id=UserInput())
151+
user = graphene.Field(User, input=UserInput())
153152

154-
# Decorate the resolver with @annotate(input=UserInput) in Python 2
155-
def resolve_user(self, input: UserInput) -> User:
153+
def resolve_user(self, input):
156154
if input.is_user_id:
157155
return get_user(input.id)
158156

examples/context_example.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ class User(graphene.ObjectType):
99
class Query(graphene.ObjectType):
1010
me = graphene.Field(User)
1111

12-
def resolve_me(self, args, context, info):
12+
@graphene.annotate(context=graphene.Context)
13+
def resolve_me(self, context):
1314
return context['user']
1415

1516

examples/simple_example.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ class Query(graphene.ObjectType):
1111

1212
patron = graphene.Field(Patron)
1313

14-
def resolve_patron(self, args, context, info):
14+
def resolve_patron(self):
1515
return Patron(id=1, name='Syrus', age=27)
1616

1717

examples/starwars/schema.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import graphene
2-
from graphene import annotate
32

43
from .data import get_character, get_droid, get_hero, get_human
54

@@ -16,7 +15,7 @@ class Character(graphene.Interface):
1615
friends = graphene.List(lambda: Character)
1716
appears_in = graphene.List(Episode)
1817

19-
def resolve_friends(self, args, *_):
18+
def resolve_friends(self):
2019
# The character friends is a list of strings
2120
return [get_character(f) for f in self.friends]
2221

@@ -46,15 +45,12 @@ class Query(graphene.ObjectType):
4645
id=graphene.String()
4746
)
4847

49-
@annotate(episode=Episode)
5048
def resolve_hero(self, episode=None):
5149
return get_hero(episode)
5250

53-
@annotate(id=str)
5451
def resolve_human(self, id):
5552
return get_human(id)
5653

57-
@annotate(id=str)
5854
def resolve_droid(self, id):
5955
return get_droid(id)
6056

examples/starwars_relay/schema.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ class Meta:
3232
name = graphene.String(description='The name of the faction.')
3333
ships = relay.ConnectionField(ShipConnection, description='The ships used by the faction.')
3434

35-
@annotate
3635
def resolve_ships(self, **args):
3736
# Transform the instance ship_ids into real instances
3837
return [get_ship(ship_id) for ship_id in self.ships]
@@ -65,11 +64,9 @@ class Query(graphene.ObjectType):
6564
empire = graphene.Field(Faction)
6665
node = relay.Node.Field()
6766

68-
@annotate
6967
def resolve_rebels(self):
7068
return get_rebels()
7169

72-
@annotate
7370
def resolve_empire(self):
7471
return get_empire()
7572

graphene/relay/mutation.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@
33

44
from promise import Promise, is_thenable
55

6-
from ..types import Field, InputObjectType, String
6+
from ..types import Field, InputObjectType, String, Context, ResolveInfo
77
from ..types.mutation import Mutation
8+
from ..utils.annotate import annotate
89

910

1011
class ClientIDMutation(Mutation):
@@ -49,9 +50,8 @@ def __init_subclass_with_meta__(cls, output=None, arguments=None, name=None, **o
4950
)
5051

5152
@classmethod
52-
def mutate(cls, root, args, context, info):
53-
input = args.get('input')
54-
53+
@annotate(context=Context, info=ResolveInfo)
54+
def mutate(cls, root, input, context, info):
5555
def on_resolve(payload):
5656
try:
5757
payload.client_mutation_id = input.get('clientMutationId')

graphene/relay/tests/test_connection_query.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,13 @@ class Query(ObjectType):
3131

3232
node = Node.Field()
3333

34-
def resolve_letters(self, args, context, info):
34+
def resolve_letters(self, **args):
3535
return list(letters.values())
3636

37-
def resolve_promise_letters(self, args, context, info):
37+
def resolve_promise_letters(self, **args):
3838
return Promise.resolve(list(letters.values()))
3939

40-
def resolve_connection_letters(self, args, context, info):
40+
def resolve_connection_letters(self, **args):
4141
return LetterConnection(
4242
page_info=PageInfo(
4343
has_next_page=True,

graphene/tests/issues/test_313.py

Lines changed: 0 additions & 1 deletion

0 commit comments

Comments
 (0)