From 1dbdb42deecaf01a6a8be43c3e351bf339c2aac9 Mon Sep 17 00:00:00 2001 From: Kristian Uzhca Date: Fri, 30 Sep 2022 15:52:45 -0400 Subject: [PATCH 1/2] Add copy function for GrapheneGraphQLType Fixes https://github.com/graphql-python/graphene/issues/1333 First found when using with a Django project. Django's tries to create a copy of a GrapheneGraphQLType and raises this KeyError --- graphene/types/definitions.py | 5 +++++ graphene/types/tests/test_definition.py | 15 +++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/graphene/types/definitions.py b/graphene/types/definitions.py index e5505fd3a..ac574bed5 100644 --- a/graphene/types/definitions.py +++ b/graphene/types/definitions.py @@ -20,6 +20,11 @@ def __init__(self, *args, **kwargs): self.graphene_type = kwargs.pop("graphene_type") super(GrapheneGraphQLType, self).__init__(*args, **kwargs) + def __copy__(self): + result = GrapheneGraphQLType(graphene_type=self.graphene_type) + result.__dict__.update(self.__dict__) + return result + class GrapheneInterfaceType(GrapheneGraphQLType, GraphQLInterfaceType): pass diff --git a/graphene/types/tests/test_definition.py b/graphene/types/tests/test_definition.py index 0d8a95dfa..83f6792de 100644 --- a/graphene/types/tests/test_definition.py +++ b/graphene/types/tests/test_definition.py @@ -1,4 +1,7 @@ +import copy + from ..argument import Argument +from ..definitions import GrapheneGraphQLType from ..enum import Enum from ..field import Field from ..inputfield import InputField @@ -312,3 +315,15 @@ class TestInputObject2(CommonFields, InputObjectType): pass assert TestInputObject1._meta.fields == TestInputObject2._meta.fields + +def test_graphene_graphql_type_can_be_copied(): + class Query(ObjectType): + field = String() + + def resolve_field(self, info): + return '' + + schema = Schema(query=Query) + query_type_copy = copy.copy(schema.graphql_schema.query_type) + assert query_type_copy.__dict__ == schema.graphql_schema.query_type.__dict__ + assert isinstance(schema.graphql_schema.query_type, GrapheneGraphQLType) From f98da8f28b8c536e55c108272d62cb351bdd3633 Mon Sep 17 00:00:00 2001 From: Kristian Uzhca Date: Mon, 24 Oct 2022 10:18:49 -0400 Subject: [PATCH 2/2] lint --- graphene/types/tests/test_definition.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/graphene/types/tests/test_definition.py b/graphene/types/tests/test_definition.py index 83f6792de..898fac71b 100644 --- a/graphene/types/tests/test_definition.py +++ b/graphene/types/tests/test_definition.py @@ -316,12 +316,13 @@ class TestInputObject2(CommonFields, InputObjectType): assert TestInputObject1._meta.fields == TestInputObject2._meta.fields + def test_graphene_graphql_type_can_be_copied(): class Query(ObjectType): field = String() def resolve_field(self, info): - return '' + return "" schema = Schema(query=Query) query_type_copy = copy.copy(schema.graphql_schema.query_type)