42 lines
1.1 KiB
Python
42 lines
1.1 KiB
Python
from typing import Any, Callable, List, Optional
|
|
|
|
from graphql import (
|
|
GraphQLArgument,
|
|
GraphQLField,
|
|
GraphQLInputType,
|
|
GraphQLOutputType,
|
|
GraphQLList,
|
|
GraphQLNonNull,
|
|
GraphQLResolveInfo,
|
|
get_nullable_type,
|
|
)
|
|
|
|
__all__ = ["plural_identifying_root_field"]
|
|
|
|
|
|
def plural_identifying_root_field(
|
|
arg_name: str,
|
|
input_type: GraphQLInputType,
|
|
output_type: GraphQLOutputType,
|
|
resolve_single_input: Callable[[GraphQLResolveInfo, str], Any],
|
|
description: Optional[str] = None,
|
|
) -> GraphQLField:
|
|
def resolve(_obj: Any, info: GraphQLResolveInfo, **args: Any) -> List:
|
|
inputs = args[arg_name]
|
|
return [resolve_single_input(info, input_) for input_ in inputs]
|
|
|
|
return GraphQLField(
|
|
GraphQLList(output_type),
|
|
description=description,
|
|
args={
|
|
arg_name: GraphQLArgument(
|
|
GraphQLNonNull(
|
|
GraphQLList(
|
|
GraphQLNonNull(get_nullable_type(input_type)) # type: ignore
|
|
)
|
|
)
|
|
)
|
|
},
|
|
resolve=resolve,
|
|
)
|