Esempio n. 1
0
    def get(self, request, pk):
        """Retrieve the classroom specified by the instructor."""
        verify_user_type(request, "instructor")

        classroom = self.get_object(request, pk)
        serializer = ClassroomSerializer(classroom)
        return Response(serializer.data)
Esempio n. 2
0
    def get(self, request, classroom_pk, pk):
        """Get an assignment for this classroom."""
        verify_user_type(request, 'student')

        assignment = self.get_object(request, classroom_pk, pk)
        serializer = AssignmentSerializer(assignment)

        return Response(serializer.data)
Esempio n. 3
0
    def get(self, request, classroom_pk, pk):
        """View a specific assignment."""
        verify_user_type(request, 'instructor')

        assignment = self.get_object(request, classroom_pk, pk)
        serializer = AssignmentSerializer(assignment)

        return Response(serializer.data)
Esempio n. 4
0
    def get(self, request, classroom_pk, assignment_pk, pk):
        """Retrieve a submission for the instructor"""
        verify_user_type(request, 'instructor')

        submission = self.get_object(request, classroom_pk, assignment_pk, pk)
        serializer = SubmissionSerializer(submission)

        return Response(serializer.data)
Esempio n. 5
0
    def get(request, classroom_pk):
        """View a list of the assignments in this class."""
        verify_user_type(request, 'student')

        # TODO: (Bug) This isn't checking whether the student is within the class.
        assignments = Assignment.objects.filter(classroom=classroom_pk)
        serializer = AssignmentSerializer(assignments, many=True)

        return Response(serializer.data)
Esempio n. 6
0
    def put(self, request, pk):
        """Update the classroom specified by the instructor."""
        verify_user_type(request, "instructor")

        classroom = self.get_object(request, pk)
        request.data['instructor'] = Instructor.objects.get(
            user=request.user).id
        serializer = put_serialize(request, classroom, ClassroomSerializer)
        serializer.save()
        return Response(serializer.data)
Esempio n. 7
0
    def get(request):
        """Return a list of all classrooms for the instructor who made this request."""
        verify_user_type(request, "instructor")

        instructor = Instructor.objects.get(user=request.user)
        classrooms = Classroom.objects.filter(instructor=instructor)

        serializer = ClassroomSerializer(classrooms, many=True)

        return Response(serializer.data)
Esempio n. 8
0
    def delete(self, request, classroom_pk, pk):
        """Delete an assignment."""
        verify_user_type(request, 'instructor')

        assignment = self.get_object(request, classroom_pk, pk)
        serializer = AssignmentSerializer(assignment)
        data = serializer.data

        assignment.delete()

        return Response(data, status=status.HTTP_204_NO_CONTENT)
Esempio n. 9
0
    def delete(self, request, pk):
        """Delete the classroom specified by the instructor."""
        verify_user_type(request, "instructor")

        classroom = self.get_object(request, pk)
        serializer = ClassroomSerializer(classroom)
        # Getting the serializer data before the classroom has been deleted allows id to be included.
        data = serializer.data

        classroom.delete()
        return Response(data, status=status.HTTP_204_NO_CONTENT)
Esempio n. 10
0
    def get(request, classroom_pk, assignment_pk):
        """View previous submissions."""
        verify_user_type(request, 'student')

        # TODO: (Bug) Error check path
        student = Student.objects.get(user=request.user)
        submissions = Submission.objects.filter(student=student,
                                                assignment=assignment_pk)

        serializer = SubmissionSerializer(submissions, many=True)

        return Response(serializer.data)
Esempio n. 11
0
    def put(self, request, classroom_pk, pk):
        """Update an assignment."""
        verify_user_type(request, 'instructor')

        assignment = self.get_object(request, classroom_pk, pk)
        request.data['classroom'] = classroom_pk
        request.data['due_date'] = AssignmentsView.date_decode(
            request.data['due_date'])
        serializer = put_serialize(request, assignment, AssignmentSerializer)
        serializer.save()

        return Response(serializer.data)
Esempio n. 12
0
    def delete(self, request, classroom_pk, pk):
        """Remove a student from this class as an instructor."""
        classroom = ClassroomStudentsView.get_object(classroom_pk)

        ClassroomStudentsView.validate_user(classroom, request)
        verify_user_type(request, 'instructor')

        student = self.get_object(classroom, pk)
        serializer = ClassroomStudentSerializer(student)
        data = serializer.data

        classroom.students.remove(student)
        return Response(data=data, status=status.HTTP_204_NO_CONTENT)
Esempio n. 13
0
    def get(request, classroom_pk):
        """View all the assignments within this classroom."""
        verify_user_type(request, 'instructor')

        # TODO: (Refactoring) See if query sets can allow this to be done by only querying assignments.
        # TODO: (Bug) Return 400 level errors when instructors/classrooms are not found.
        instructor = Instructor.objects.get(user=request.user)
        classroom = Classroom.objects.get(instructor=instructor,
                                          id=classroom_pk)
        assignments = Assignment.objects.filter(classroom=classroom)
        serializer = AssignmentSerializer(assignments, many=True)

        return Response(serializer.data)
Esempio n. 14
0
    def get(request, classroom_pk, assignment_pk, submission_pk):
        """Retrieve contrast report."""
        verify_user_type(request, 'instructor')

        classroom = Classroom.objects.get(id=classroom_pk)
        assignment = Assignment.objects.get(classroom=classroom,
                                            id=assignment_pk)
        submission = Submission.objects.get(assignment=assignment,
                                            id=submission_pk)

        response = Response(submission.contrast_report())

        return response
Esempio n. 15
0
    def post(request):
        """Create a new classroom for the user who made this request."""
        verify_user_type(request, 'instructor')

        request.data['instructor'] = Instructor.objects.get(
            user=request.user).id
        serializer = post_serialize(request, ClassroomSerializer)
        classroom = serializer.save()

        response = Response(serializer.data, status=status.HTTP_201_CREATED)
        response['Location'] = location(
            request, f'/instructor/classrooms/{classroom.id}')

        return response
Esempio n. 16
0
    def get(request, classroom_pk, assignment_pk):
        """View all submissions for this assignment."""
        verify_user_type(request, 'instructor')

        instructor = Instructor.objects.get(user=request.user)
        classroom = Classroom.objects.get(instructor=instructor,
                                          id=classroom_pk)
        assignment = Assignment.objects.get(classroom=classroom,
                                            id=assignment_pk)

        submissions = Submission.objects.filter(assignment=assignment)

        serializer = SubmissionSerializer(submissions, many=True)

        return Response(serializer.data)
Esempio n. 17
0
    def post(self, request, classroom_pk):
        """Add an assignment to this classroom."""
        verify_user_type(request, 'instructor')

        request.data['classroom'] = classroom_pk
        request.data['due_date'] = self.date_decode(request.data['due_date'])

        serializer = post_serialize(request, AssignmentSerializer)
        assignment = serializer.save()

        response = Response(serializer.data, status=status.HTTP_201_CREATED)
        response['Location'] = location(
            request,
            f'/instructor/classrooms/{classroom_pk}/assignments/{assignment.id}'
        )

        return response
Esempio n. 18
0
    def post(request, classroom_pk):
        """Join this classroom as a student."""
        verify_user_type(request, 'student')

        classroom = Classroom.objects.get(id=classroom_pk)
        student = Student.objects.get(user=request.user)

        classroom.students.add(student)
        classroom.save()

        serializer = ClassroomStudentSerializer(student)

        response = Response(serializer.data, status=status.HTTP_201_CREATED)
        response['Location'] = location(request,
                                        f'/student/classrooms/{classroom.id}')

        return response
Esempio n. 19
0
    def post(request, classroom_pk, assignment_pk):
        """Accept a submission as an instructor."""
        verify_user_type(request, 'instructor')

        submission_pk = request.data['id']

        classroom = Classroom.objects.get(id=classroom_pk)
        assignment = Assignment.objects.get(classroom=classroom,
                                            id=assignment_pk)
        submission = Submission.objects.get(assignment=assignment,
                                            id=submission_pk)

        essay = Essay.objects.create(student=submission.student,
                                     file=submission.file)

        response = Response({'id': essay.id}, status=status.HTTP_201_CREATED)
        response['Location'] = location(request, f'/student/essays/{essay.id}')

        return response
Esempio n. 20
0
    def post(request, classroom_pk, assignment_pk):
        """Post a submission for this assignment."""
        verify_user_type(request, 'student')

        # TODO: (Bug) Check that assignment and student are valid.
        student = Student.objects.get(user=request.user)
        request.data['assignment'] = assignment_pk
        request.data['student'] = student.id
        request.data['date'] = datetime.now(tz=pytz.UTC)

        serializer = post_serialize(request, SubmissionSerializer)
        submission = serializer.save()

        response = Response({
            'date': submission.date,
            'id': submission.id
        },
                            status=status.HTTP_201_CREATED)
        resource_path = f'/student/classrooms/{classroom_pk}/assignments/{assignment_pk}/submissions/{submission.id}'
        response['Location'] = location(request, resource_path)

        return response
Esempio n. 21
0
    def get(request, classroom_pk, assignment_pk, submission_pk):
        verify_user_type(request, 'instructor')

        classroom = Classroom.objects.get(id=classroom_pk)
        assignment = Assignment.objects.get(classroom=classroom,
                                            id=assignment_pk)
        submission = Submission.objects.get(assignment=assignment,
                                            id=submission_pk)

        # wf = open('dummy-detailed-report.docx', 'rb')
        # response = Response({'file': wf}, content_type='Multipart/Form-data')
        # response = FileResponse(wf, content_type='docx')
        # response['Content-Length'] = len(wf.read())
        # response['Content-Length'] = os.fstat(wf.fileno()).st_size
        # response['Content-Disposition'] = f'attachment; filename="dummy-detailed-report.docx"'
        # file_path = os.path.join(settings.MEDIA_ROOT, path)
        # if os.path.exists(file_path):
        with open('dummy-detailed-report.docx', 'rb') as fh:
            response = HttpResponse(fh.read(), content_type="application/docx")
            response[
                'Content-Disposition'] = 'inline; filename=' + "dummy-detailed-report.docx"
            return response
Esempio n. 22
0
 def validate_user(classroom, request):
     if verify_user_type(request, 'student', no_except=True):
         ClassroomStudentsView.assert_valid_student(request, classroom)
     else:
         ClassroomStudentsView.assert_correct_instructor(request, classroom)