This repository has been archived by the owner on Jun 24, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
schema.py
139 lines (100 loc) · 3.59 KB
/
schema.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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
"""GraphQl schema. """
import django_filters
import graphene
from django.contrib.auth.models import Group, User
from graphene import relay
from graphene_django import DjangoObjectType
import graphene_django_tools as gdtools
from graphene_django_tools import auth
class UserFilterSet(django_filters.FilterSet):
order_by = django_filters.OrderingFilter(
fields=['username', 'email', 'id'])
class Meta:
model = User
fields = {
'username': ['icontains', 'istartswith', 'iendswith'],
'email': ['icontains', 'istartswith', 'iendswith'], }
class UserNode(gdtools.ModelNode):
class Meta:
model = User
interfaces = (relay.Node,)
filterset_class = UserFilterSet
class GroupNode(DjangoObjectType):
class Meta:
model = Group
filter_fields = []
interfaces = (relay.Node,)
this = gdtools.ModelField(Group)
this_list = gdtools.ModelListField(Group)
class CreateGroup(gdtools.ModelCreationMutation):
class Meta:
model = Group
fields = gdtools.get_all_fields
required = ['users']
class UpdateGroup(gdtools.ModelUpdateMutation):
class Meta:
model = Group
fields = gdtools.get_all_fields
class IDInInput(graphene.InputObjectType):
node_id = graphene.ID()
node_id_list = graphene.List(graphene.ID)
class NodeEcho(gdtools.NodeUpdateMutation):
"""Example non-model mutation. """
class Arguments:
extra_nodes = graphene.List(graphene.ID)
input = IDInInput().Field()
message = graphene.String(required=True)
extra_nodes = graphene.List(graphene.Node)
input_node = graphene.Field(graphene.Node)
input_nodes = graphene.List(graphene.Node)
@classmethod
def mutate(cls, context: gdtools.NodeUpdateMutation):
input_ = context.arguments.get('input', {})
return cls(message=repr(context.node),
extra_nodes=context.arguments.get('extra_nodes'),
input_node=input_.get('node_id'),
input_nodes=input_.get('node_id_list'))
class BulkCreateGroup(gdtools.ModelBulkCreationMutation):
class Meta:
model = Group
fields = gdtools.get_all_fields
required = ['users']
class BulkUpdateGroup(gdtools.ModelBulkUpdateMutation):
class Meta:
model = Group
fields = gdtools.get_all_fields
class DeleteNode(gdtools.NodeDeleteMutation):
class Meta:
allowed_cls = (Group,)
class Mutation(graphene.ObjectType):
"""Mutation """
create_user = auth.CreateUser.Field()
update_user = auth.UpdateUser.Field()
login = auth.Login.Field()
logout = auth.Logout.Field()
node_echo = NodeEcho.Field()
delete_node = DeleteNode.Field()
create_group = CreateGroup.Field()
update_group = UpdateGroup.Field()
bulk_create_group = BulkCreateGroup.Field()
bulk_update_group = BulkUpdateGroup.Field()
class Query(graphene.ObjectType):
"""Query"""
viewer = gdtools.ModelField(auth.User, description='Current user.')
def resolve_viewer(self, info: gdtools.ResolveInfo):
user = info.context.user
if user.is_anonymous:
return None
return user
users = gdtools.ModelFilterConnectionField(auth.User)
groups = gdtools.ModelFilterConnectionField(Group)
recursive_group = gdtools.ModelField(Group)
def resolve_recursive_group(self, info: gdtools.ResolveInfo):
ret = Group.objects.first()
ret.this = ret
ret.this_list = [ret]
return ret
SCHEMA = graphene.Schema(
query=Query,
mutation=Mutation,
auto_camelcase=False)