Skip to content

Commit d5dd1eb

Browse files
committed
[v0.2a3] Add methods needed for some relay mutation operations.
1 parent f414d54 commit d5dd1eb

File tree

5 files changed

+21
-6
lines changed

5 files changed

+21
-6
lines changed

epoxy/contrib/relay/connections/sorted_collection.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,10 @@ def empty_connection(relay, type_name):
9999
)
100100
)
101101

102+
def get_edge(self, relay, type_name, node):
103+
Connection, Edge = relay.get_connection_and_edge_types(type_name)
104+
return Edge(node=node, cursor=cursor.from_offset(self._key(node)))
105+
102106
def get_connection(self, relay, type_name, args):
103107
Connection, Edge = relay.get_connection_and_edge_types(type_name)
104108
before = args.get('before')

epoxy/contrib/relay/data_source/memory.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,13 @@ def add(self, obj):
1515
self.objects_by_type_and_id[obj.T][text_type(obj.id)] = obj
1616
self.objects_by_type[obj.T].insert(obj)
1717

18+
def remove(self, obj):
19+
del self.objects_by_type_and_id[obj.T][text_type(obj.id)]
20+
self.objects_by_type[obj.T].remove(obj)
21+
22+
def get_edge(self, relay, obj):
23+
return self.objects_by_type[obj.T].get_edge(relay, obj.T.name, obj)
24+
1825
def fetch_node(self, object_type, id, resolve_info):
1926
return self.objects_by_type_and_id[object_type].get(text_type(id))
2027

epoxy/contrib/relay/mixin.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ def register_types(self):
3838
class Node(R.Interface):
3939
id = R.ID.NonNull(description='The id of the object.')
4040

41-
resolve_id = self.resolve_node_id
41+
resolve_id = self._resolve_node_id
4242

4343
class PageInfo(R.ObjectType):
4444
has_next_page = R.Boolean.NonNull(description='When paginating forwards, are there more items?')
@@ -55,9 +55,12 @@ def fetch_node(self, id, info):
5555
assert isinstance(object_type, GraphQLObjectType)
5656
return self.data_source.fetch_node(object_type, object_id, info)
5757

58-
def resolve_node_id(self, obj, args, info):
59-
type = self.R.Node().resolve_type(obj, info)
60-
return base64('%s:%s' % (type, obj.id))
58+
def _resolve_node_id(self, obj, args, info):
59+
return self.node_id_for(obj, info)
60+
61+
def node_id_for(self, obj, info=None):
62+
object_type = self.Node.T.resolve_type(obj, info)
63+
return base64('%s:%s' % (object_type, obj.id))
6164

6265
def connection_definitions(self, name, object_type):
6366
R = self.R

epoxy/metaclasses/mutation.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@ def __new__(mcs, name, bases, attrs):
4040
args={
4141
'input': GraphQLArgument(GraphQLNonNull(R[Input]))
4242
},
43-
resolver=functools.partial(mcs._process_resolver, resolver, Input)
43+
resolver=functools.partial(mcs._process_resolver, resolver, Input),
44+
description=attrs.get('__doc__', None)
4445
)))
4546

4647
@staticmethod

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
setup(
1313
name='graphql-epoxy',
14-
version='0.2a1',
14+
version='0.2a3',
1515
description='GraphQL implementation for Python',
1616
url='https://github.com/graphql-python/graphql-core',
1717
download_url='https://github.com/graphql-python/graphql-core/releases',

0 commit comments

Comments
 (0)