mbrochh / django-graphql-apollo-react-demo

Code for a workshop about my Django, GraphQL, ReactJS, Apollo-stack
332 stars 78 forks source link

Mutation in graphene 2.0 #16

Open sgaseretto opened 6 years ago

sgaseretto commented 6 years ago

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?

tycomo commented 6 years ago

You can get the context from info.

context = info.context
if not context.user.is_authenticated:
nerdoc commented 5 years ago

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...