import graphene from graphene import relay from graphene_django import DjangoObjectType from graphene_django.filter import DjangoFilterConnectionField from assignments.models import StudentSubmission from assignments.schema.types import StudentSubmissionNode from basicknowledge.models import BasicKnowledge from basicknowledge.queries import InstrumentNode from books.models import Module from books.schema.queries import ModuleNode from users.models import User, SchoolClass class SchoolClassNode(DjangoObjectType): pk = graphene.Int() class Meta: model = SchoolClass filter_fields = ['name'] interfaces = (relay.Node,) def resolve_pk(self, *args, **kwargs): return self.id class UserNode(DjangoObjectType): pk = graphene.Int() permissions = graphene.List(graphene.String) selected_class = graphene.Field(SchoolClassNode) class Meta: model = User filter_fields = ['username', 'email'] only_fields = ['username', 'email', 'first_name', 'last_name', 'school_classes', 'last_module', 'avatar_url', 'selected_class'] interfaces = (relay.Node,) def resolve_pk(self, info, **kwargs): return self.id def resolve_permissions(self, info): return self.get_all_permissions() def resolve_selected_class(self, info): return self.selected_class() class UsersQuery(object): me = graphene.Field(UserNode) all_users = DjangoFilterConnectionField(UserNode) my_activity = DjangoFilterConnectionField(ModuleNode) my_instrument_activity = DjangoFilterConnectionField(InstrumentNode) def resolve_me(self, info, **kwargs): return info.context.user def resolve_all_users(self, info, **kwargs): if not info.context.user.is_superuser: return User.objects.none() else: return User.objects.all() def resolve_my_activity(self, info, **kwargs): return Module.objects.all() def resolve_my_instrument_activity(self, info, **kwargs): return BasicKnowledge.objects.all() class AllUsersQuery(object): me = graphene.Field(UserNode) all_users = DjangoFilterConnectionField(UserNode) def resolve_all_users(self, info, **kwargs): if not info.context.user.is_superuser: return User.objects.none() else: return User.objects.all()