import graphene from graphene import relay from api.utils import get_errors, get_object from books.models import Module class UpdateSolutionVisibility(relay.ClientIDMutation): class Input: id = graphene.ID() enabled = graphene.Boolean() success = graphene.Boolean() solutions_enabled = graphene.Boolean() errors = graphene.List(graphene.String) @classmethod def mutate_and_get_payload(cls, root, info, **args): try: id = args.get('id') enabled = args.get('enabled') user = info.context.user if 'users.can_manage_school_class_content' not in user.get_role_permissions(): raise PermissionError() module = get_object(Module, id) if enabled: module.solutions_enabled_by.add(user) else: module.solutions_enabled_by.remove(user) module.save() return cls(success=True, solutions_enabled=enabled) except PermissionError: errors = ["You don't have the permission to do that."] except Exception as e: errors = ['Error: {}'.format(e)] return cls(success=False, solutions_enabled=None, errors=errors)