from graphene import relay import graphene from api.utils import get_object from assignments.models import Assignment from assignments.schema.types import AssignmentNode from .inputs import AssignmentInput class UpdateAssignment(relay.ClientIDMutation): class Input: assignment = graphene.Argument(AssignmentInput) updated_assignment = graphene.Field(AssignmentNode) errors = graphene.List(graphene.String) @classmethod def mutate_and_get_payload(cls, root, info, **kwargs): assignment_data = kwargs.get('assignment') assignment = get_object(Assignment, assignment_data.get('id')) (submission, created) = assignment.submissions.get_or_create(student=info.context.user) submission.text = assignment_data.get('answer') submission.save() return cls(updated_assignment=assignment, errors=None) class AssignmentMutations(object): update_assignment = UpdateAssignment.Field()