From abff3d75a39bc8f2d1fdb48aafa1866cf47dfff6 Mon Sep 17 00:00:00 2001 From: Minh Tu Le Date: Fri, 12 Apr 2019 16:29:53 -0700 Subject: [PATCH] Allow the connection node to be wrapped in a `NonNull` type (#934) --- graphene/relay/connection.py | 2 +- graphene/relay/tests/test_connection.py | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/graphene/relay/connection.py b/graphene/relay/connection.py index 927dfcc4..047f2b4d 100644 --- a/graphene/relay/connection.py +++ b/graphene/relay/connection.py @@ -53,7 +53,7 @@ class Connection(ObjectType): def __init_subclass_with_meta__(cls, node=None, name=None, **options): _meta = ConnectionOptions(cls) assert node, "You have to provide a node in {}.Meta".format(cls.__name__) - assert issubclass( + assert isinstance(node, NonNull) or issubclass( node, (Scalar, Enum, ObjectType, Interface, Union, NonNull) ), ('Received incompatible node "{}" for Connection {}.').format( node, cls.__name__ diff --git a/graphene/relay/tests/test_connection.py b/graphene/relay/tests/test_connection.py index ca43f397..6686f964 100644 --- a/graphene/relay/tests/test_connection.py +++ b/graphene/relay/tests/test_connection.py @@ -108,6 +108,17 @@ def test_edge_with_bases(): assert edge_fields["other"].type == String +def test_edge_with_nonnull_node(): + class MyObjectConnection(Connection): + class Meta: + node = NonNull(MyObject) + + edge_fields = MyObjectConnection.Edge._meta.fields + assert isinstance(edge_fields["node"], Field) + assert isinstance(edge_fields["node"].type, NonNull) + assert edge_fields["node"].type.of_type == MyObject + + def test_pageinfo(): assert PageInfo._meta.name == "PageInfo" fields = PageInfo._meta.fields