skillbox/server/assignments/schema/mutations.py

35 lines
1.3 KiB
Python

import graphene
from graphene import relay
from api.utils import get_object
from assignments.models import Assignment
from assignments.schema.types import AssignmentNode, StudentSubmissionNode
from .inputs import AssignmentInput
class UpdateAssignment(relay.ClientIDMutation):
class Input:
assignment = graphene.Argument(AssignmentInput)
updated_assignment = graphene.Field(AssignmentNode)
submission = graphene.Field(StudentSubmissionNode)
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, submission=submission, errors=None)
class AssignmentMutations(object):
update_assignment = UpdateAssignment.Field()