@@ -91,54 +91,56 @@ def model(self):
9191
9292
9393class NdbKeyStringField (String ):
94- def __init__ (self , name , * args , ** kwargs ):
94+ def __init__ (self , name , kind , * args , ** kwargs ):
9595 self .name = name
96+ self .kind = kind
9697
9798 if 'resolver' not in kwargs :
9899 kwargs ['resolver' ] = self .default_resolver
99100
100101 super (NdbKeyStringField , self ).__init__ (* args , ** kwargs )
101102
102- def default_resolver (self , node , args , info ):
103- entity = node .instance
104- key = getattr (entity , self .name )
105- if not key :
106- return None
107-
108- if isinstance (key , list ):
109- t = self .__get_key_internal_type (key [0 ], info .schema .graphene_schema )
110- return [to_global_id (t .name , k .urlsafe ()) for k in key ]
111-
112- t = self .__get_key_internal_type (key , info .schema .graphene_schema )
113- return to_global_id (t .name , key .urlsafe ()) if key else None
114-
115- def __get_key_internal_type (self , key , schema ):
116- _type = self .__find_key_object_type (key , schema )
103+ def internal_type (self , schema ):
104+ _type = self .get_object_type (schema )
117105 if not _type and self .parent ._meta .only_fields :
118106 raise Exception (
119107 "Model %r is not accessible by the schema. "
120108 "You can either register the type manually "
121109 "using @schema.register. "
122110 "Or disable the field in %s" % (
123- key .kind () ,
111+ self .kind ,
124112 self .parent ,
125113 )
126114 )
127115
128116 if not _type :
129117 raise SkipField ()
130118
131- return schema .T (_type )
119+ from graphql import GraphQLString
120+ return GraphQLString
132121
133- def __find_key_object_type (self , key , schema ):
122+ def get_object_type (self , schema ):
134123 for _type in schema .types .values ():
135124 type_model = hasattr (_type , '_meta' ) and getattr (_type ._meta , 'model' , None )
136125 if not type_model :
137126 continue
138127
139- if key .kind () == type_model or key .kind () == type_model .__name__ :
128+ if self .kind == type_model or self .kind == type_model .__name__ :
140129 return _type
141130
131+ def default_resolver (self , node , args , info ):
132+ entity = node .instance
133+ key = getattr (entity , self .name )
134+ if not key :
135+ return None
136+
137+ if isinstance (key , list ):
138+ t = self .get_object_type (info .schema .graphene_schema )._meta .type_name
139+ return [to_global_id (t , k .urlsafe ()) for k in key ]
140+
141+ t = self .get_object_type (info .schema .graphene_schema )._meta .type_name
142+ return to_global_id (t , key .urlsafe ()) if key else None
143+
142144
143145class NdbKeyField (FieldType ):
144146 def __init__ (self , name , kind , * args , ** kwargs ):
0 commit comments