import graphene from graphene import relay 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) successful = graphene.Boolean() 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.document = assignment_data.get('document', '') final = assignment_data.get('final') if final is not None: submission.final = final submission.save() return cls(successful=True, updated_assignment=assignment, errors=None) class AssignmentMutations(object): update_assignment = UpdateAssignment.Field()