Организация мутаций GraphQL с графеном - PullRequest
0 голосов
/ 16 июня 2019

Я пытаюсь организовать свои мутации так, чтобы они не все были на верхнем уровне. Вот коллекция мутаций, которые я хочу поместить в секцию «сессии»:

import graphene
from django.contrib.auth import authenticate
from rest_framework.authtoken.models import Token


class Login(graphene.Mutation):
    token = graphene.String()
    username = graphene.String()
    user_id = graphene.Int()

    class Arguments:
        username = graphene.String(required=True)
        password = graphene.String(required=True)

    def mutate(self, info, **kwargs):
        username = kwargs.get('username', '').strip()
        password = kwargs.get('password', '').strip()
        if username and password:
            # Test username/password combination
            user = authenticate(username=username, password=password)
            # Found a match
            if user is not None and user.is_active:
                token = Token.objects.get_or_create(user=user)[0]
                # return HttpResponse(token.key, content_type='text/plain')
                return Login(token=token.key, username=user.username, user_id=user.id)
        # credential check failed
        return Login()


class Logout(graphene.Mutation):
    success = graphene.Boolean()

    def mutate(self, info):
        if info.context.user is not None:
            info.context.user.token.delete()
        return Logout(success=True)


class SessionsMutations(graphene.ObjectType):
    login = Login.Field()
    logout = Logout.Field()

Когда я непосредственно добавляю объект SessionsMutations, мутации появляются на верхнем уровне и работают правильно.

class Query():
    pass

class Mutation(SessionsMutations):
    pass

schema = graphene.Schema(query=Query, mutation=Mutation)

Когда я пытаюсь определить SessionsMutations как поле, я могу успешно отправить запрос к login, но сессии всегда возвращаются с нулевым значением, и код мутации никогда не запускается.

class Query():
    pass

class Mutation():
    session = graphene.Field(SessionsMutations)

schema = graphene.Schema(query=Query, mutation=Mutation)

Что мне нужно установить, чтобы я мог подчиняться организованным мутациям?

...