@@ -203,11 +203,12 @@ def get_query_fields(info):
203203 return query
204204
205205
206- def get_queried_union_types (info ):
206+ def get_queried_union_types (info , valid_gql_types ):
207207 """A convenience function to get queried union types with its fields
208208
209209 Args:
210210 info (ResolveInfo)
211+ valid_gql_types (dict_keys)
211212
212213 Returns:
213214 dict[union_type_name, queried_fields(dict)]
@@ -227,9 +228,16 @@ def get_queried_union_types(info):
227228 for leaf in selection_set .selections :
228229 if leaf .kind == "fragment_spread" :
229230 fragment_name = fragments [leaf .name .value ].type_condition .name .value
230- fragments_queries [ fragment_name ] = collect_query_fields (
231+ sub_query_fields = collect_query_fields (
231232 fragments [leaf .name .value ], fragments , variables
232233 )
234+ if fragment_name not in valid_gql_types :
235+ # This is done to avoid UnionFragments coming in fragments_queries as
236+ # we actually need its children types and not the UnionFragments itself
237+ fragments_queries .update (sub_query_fields )
238+ fragments_queries .pop ('__typename' , None ) # cannot resolve __typename for a union type
239+ else :
240+ fragments_queries [fragment_name ] = sub_query_fields
233241 elif leaf .kind == "inline_fragment" :
234242 fragment_name = leaf .type_condition .name .value
235243 fragments_queries [fragment_name ] = collect_query_fields (leaf , fragments , variables )
0 commit comments