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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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
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
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)
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
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
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
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
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
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)