django-graphql-apollo-react-demo icon indicating copy to clipboard operation
django-graphql-apollo-react-demo copied to clipboard

Mutation in graphene 2.0

Open sgaseretto opened this issue 6 years ago • 2 comments

The current mutation seems to not be working with graphene 2.0

    @staticmethod
    def mutate(root, args, context, info):
        if not context.user.is_authenticated():
            return CreateMessageMutation(status=403)
        message = args.get('message', '').strip()
        # Here we would usually use Django forms to validate the input
        if not message:
            return CreateMessageMutation(
                status=400,
                formErrors=json.dumps(
                    {'message': ['Please enter a message.']}))
        obj = models.Message.objects.create(
            user=context.user, message=message
        )
        return CreateMessageMutation(status=200, message=obj)

Since the version 2.0 now only receives as arguments for mutate(root, info, **args) where can we get now the context info so that context.user.is_authenticated() could work?

sgaseretto avatar Mar 09 '18 11:03 sgaseretto

You can get the context from info.

context = info.context
if not context.user.is_authenticated:

tycomo avatar Mar 11 '18 16:03 tycomo

A working mutation is:

    def mutate(self, info, **kwargs):
        if not info.context.user.is_authenticated:
            return CreateMessage(status=403)
        message = kwargs.get('message', '').strip()
        # Here we would usually use Django forms to validate the input
        if not message:
            return CreateMessage(
                status=400,
                formErrors=json.dumps(
                    {'message': ['Please enter a message.']}))
        obj = models.Message.objects.create(
            user=info.context.user, message=message
        )
        return CreateMessage(status=200, message=obj)

You have to change the tests then too...

nerdoc avatar Oct 20 '18 20:10 nerdoc