-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathinterface_model.py
31 lines (24 loc) · 1.15 KB
/
interface_model.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
from dataclasses import dataclass
from typing import Dict, cast
from ariadne import InterfaceType
from ariadne.types import Resolver
from graphql import GraphQLField, GraphQLObjectType, GraphQLSchema, GraphQLTypeResolver
from ..base import GraphQLModel
@dataclass(frozen=True)
class GraphQLInterfaceModel(GraphQLModel):
resolvers: Dict[str, Resolver]
resolve_type: GraphQLTypeResolver
out_names: Dict[str, Dict[str, str]]
aliases: Dict[str, str]
def bind_to_schema(self, schema: GraphQLSchema):
bindable = InterfaceType(self.name, self.resolve_type)
for field, resolver in self.resolvers.items():
bindable.set_field(field, resolver)
for alias, target in self.aliases.items():
bindable.set_alias(alias, target)
bindable.bind_to_schema(schema)
graphql_type = cast(GraphQLObjectType, schema.get_type(self.name))
for field_name, field_out_names in self.out_names.items():
graphql_field = cast(GraphQLField, graphql_type.fields[field_name])
for arg_name, out_name in field_out_names.items():
graphql_field.args[arg_name].out_name = out_name