@@ -36,7 +36,7 @@ that documentation and the corresponding tests in this library together.
36
36
Install Relay Library for GraphQL Python
37
37
38
38
``` sh
39
- pip install " graphql-core>=2,<3 " # use version 2.x of graphql-core
39
+ pip install graphql-core --pre # Last version of graphql-core
40
40
pip install graphql-relay
41
41
```
42
42
@@ -54,13 +54,13 @@ returning those types.
54
54
they return a connection type.
55
55
- ` connection_definitions ` returns a ` connection_type ` and its associated
56
56
` edgeType ` , given a name and a node type.
57
- - ` connection_from_list ` is a helper method that takes a list and the
57
+ - ` connection_from_list ` is a helper method that takes an array and the
58
58
arguments from ` connection_args ` , does pagination and filtering, and returns
59
59
an object in the shape expected by a ` connection_type ` 's ` resolver ` function.
60
60
- ` connection_from_promised_list ` is similar to ` connection_from_list ` , but
61
61
it takes a promise that resolves to an array, and returns a promise that
62
62
resolves to the expected shape by ` connection_type ` .
63
- - ` cursor_for_object_in_connection ` is a helper method that takes a list and a
63
+ - ` cursor_for_object_in_connection ` is a helper method that takes an array and a
64
64
member object, and returns a cursor for use in the mutation payload.
65
65
66
66
An example usage of these methods from the [ test schema] ( tests/starwars/schema.py ) :
@@ -69,31 +69,32 @@ An example usage of these methods from the [test schema](tests/starwars/schema.p
69
69
ship_edge, ship_connection = connection_definitions(' Ship' , shipType)
70
70
71
71
factionType = GraphQLObjectType(
72
- name = ' Faction' ,
73
- description = ' A faction in the Star Wars saga' ,
72
+ name = ' Faction' ,
73
+ description = ' A faction in the Star Wars saga' ,
74
74
fields = lambda : {
75
75
' id' : global_id_field(' Faction' ),
76
76
' name' : GraphQLField(
77
77
GraphQLString,
78
78
description = ' The name of the faction.' ,
79
79
),
80
80
' ships' : GraphQLField(
81
- ship_connection,
82
- description = ' The ships used by the faction.' ,
83
- args = connection_args,
84
- resolver = lambda faction , _info , ** args : connection_from_list(
85
- [getShip(ship) for ship in faction.ships], args
81
+ shipConnection,
82
+ description = ' The ships used by the faction.' ,
83
+ args = connection_args,
84
+ resolver = lambda faction , args , * _ : connection_from_list(
85
+ map (getShip, faction.ships),
86
+ args
86
87
),
87
88
)
88
89
},
89
- interfaces = [node_interface]
90
+ interfaces = [node_interface]
90
91
)
91
92
```
92
93
93
94
This shows adding a ` ships ` field to the ` Faction ` object that is a connection.
94
95
It uses ` connection_definitions({name: 'Ship', nodeType: shipType}) ` to create
95
96
the connection type, adds ` connection_args ` as arguments on this function, and
96
- then implements the resolver function by passing the list of ships and the
97
+ then implements the resolver function by passing the array of ships and the
97
98
arguments to ` connection_from_list ` .
98
99
99
100
### Object Identification
@@ -107,7 +108,7 @@ this, it takes a function to resolve an ID to an object, and to determine
107
108
the type of a given object.
108
109
- ` to_global_id ` takes a type name and an ID specific to that type name,
109
110
and returns a "global ID" that is unique among all types.
110
- - ` from_global_id ` takes the "global ID" created by ` to_global_id ` , and returns
111
+ - ` from_global_id ` takes the "global ID" created by ` toGlobalID ` , and retuns
111
112
the type name and ID used to create it.
112
113
- ` global_id_field ` creates the configuration for an ` id ` field on a node.
113
114
- ` plural_identifying_root_field ` creates a field that accepts a list of
@@ -117,16 +118,17 @@ objects.
117
118
An example usage of these methods from the [ test schema] ( tests/starwars/schema.py ) :
118
119
119
120
``` python
120
- def get_node (global_id , _info ):
121
- type_, id_ = from_global_id(global_id)
122
- if type_ == ' Faction' :
123
- return getFaction(id_)
124
- elif type_ == ' Ship' :
125
- return getShip(id_)
121
+ def get_node (global_id , context , info ):
122
+ resolvedGlobalId = from_global_id(global_id)
123
+ _type, _id = resolvedGlobalId.type, resolvedGlobalId.id
124
+ if _type == ' Faction' :
125
+ return getFaction(_id)
126
+ elif _type == ' Ship' :
127
+ return getShip(_id)
126
128
else :
127
129
return None
128
130
129
- def get_node_type (obj , _info ):
131
+ def get_node_type (obj , context , info ):
130
132
if isinstance (obj, Faction):
131
133
return factionType
132
134
else :
@@ -175,9 +177,11 @@ class IntroduceShipMutation(object):
175
177
def __init__ (self , shipId , factionId , clientMutationId = None ):
176
178
self .shipId = shipId
177
179
self .factionId = factionId
178
- self .clientMutationId = clientMutationId
180
+ self .clientMutationId = None
179
181
180
- def mutate_and_get_payload (_info , shipName , factionId , ** _input ):
182
+ def mutate_and_get_payload (data , * _ ):
183
+ shipName = data.get(' shipName' )
184
+ factionId = data.get(' factionId' )
181
185
newShip = createShip(shipName, factionId)
182
186
return IntroduceShipMutation(
183
187
shipId = newShip.id,
@@ -197,19 +201,19 @@ shipMutation = mutation_with_client_mutation_id(
197
201
output_fields = {
198
202
' ship' : GraphQLField(
199
203
shipType,
200
- resolver = lambda payload , _info : getShip(payload.shipId)
204
+ resolver = lambda payload , * _ : getShip(payload.shipId)
201
205
),
202
206
' faction' : GraphQLField(
203
207
factionType,
204
- resolver = lambda payload , _info : getFaction(payload.factionId)
208
+ resolver = lambda payload , * _ : getFaction(payload.factionId)
205
209
)
206
210
},
207
211
mutate_and_get_payload = mutate_and_get_payload
208
212
)
209
213
210
214
mutationType = GraphQLObjectType(
211
215
' Mutation' ,
212
- fields = lambda : {
216
+ fields = lambda : {
213
217
' introduceShip' : shipMutation
214
218
}
215
219
)
0 commit comments