예제 #1
0
 def staff_upload_annotated(self, request, suffix=''):
     # pylint: disable=unused-argument
     """
     Save annotated assignment from staff.
     """
     require(self.is_course_staff())
     upload = request.params['annotated']
     sha1 = get_sha1(upload.file)
     if self.file_size_over_limit(upload.file):
         raise JsonHandlerError(
             413, 'Unable to upload file. Max size limit is {size}'.format(
                 size=self.student_upload_max_size()))
     module = self.get_student_module(request.params['module_id'])
     state = json.loads(module.state)
     state['annotated_sha1'] = sha1
     state['annotated_filename'] = filename = upload.file.name
     state['annotated_mimetype'] = mimetypes.guess_type(upload.file.name)[0]
     state['annotated_timestamp'] = utcnow().strftime(
         DateTime.DATETIME_FORMAT)
     path = self.file_storage_path(sha1, filename)
     if not default_storage.exists(path):
         default_storage.save(path, File(upload.file))
     module.state = json.dumps(state)
     module.save()
     log.info("staff_upload_annotated for course:%s module:%s student:%s ",
              module.course_id, module.module_state_key,
              module.student.username)
     return Response(json_body=self.staff_grading_data())
예제 #2
0
 def upload_assignment(self, request, suffix=''):
     # pylint: disable=unused-argument
     """
     Save a students submission file.
     """
     require(self.upload_allowed())
     user = self.get_real_user()
     require(user)
     upload = request.params['assignment']
     sha1 = get_sha1(upload.file)
     if self.file_size_over_limit(upload.file):
         raise JsonHandlerError(
             413, 'Unable to upload file. Max size limit is {size}'.format(
                 size=self.student_upload_max_size()))
     # Uploading an assignment represents a change of state with this user in this block,
     # so we need to ensure that the user has a StudentModule record, which represents that state.
     self.get_or_create_student_module(user)
     answer = {
         "sha1": sha1,
         "filename": upload.file.name,
         "mimetype": mimetypes.guess_type(upload.file.name)[0],
         "finalized": False
     }
     student_item_dict = self.get_student_item_dict()
     submissions_api.create_submission(student_item_dict, answer)
     path = self.file_storage_path(sha1, upload.file.name)
     log.info("Saving file: %s at path: %s for user: %s", upload.file.name,
              path, user.username)
     if default_storage.exists(path):
         # save latest submission
         default_storage.delete(path)
     default_storage.save(path, File(upload.file))
     return Response(json_body=self.student_state())
예제 #3
0
파일: sga.py 프로젝트: mitodl/edx-sga
 def staff_upload_annotated(self, request, suffix=''):
     # pylint: disable=unused-argument
     """
     Save annotated assignment from staff.
     """
     require(self.is_course_staff())
     upload = request.params['annotated']
     sha1 = get_sha1(upload.file)
     if self.file_size_over_limit(upload.file):
         raise JsonHandlerError(
             413, 'Unable to upload file. Max size limit is {size}'.format(
                 size=self.student_upload_max_size()
             )
         )
     module = self.get_student_module(request.params['module_id'])
     state = json.loads(module.state)
     state['annotated_sha1'] = sha1
     state['annotated_filename'] = filename = upload.file.name
     state['annotated_mimetype'] = mimetypes.guess_type(upload.file.name)[0]
     state['annotated_timestamp'] = utcnow().strftime(
         DateTime.DATETIME_FORMAT
     )
     path = self.file_storage_path(sha1, filename)
     if not default_storage.exists(path):
         default_storage.save(path, File(upload.file))
     module.state = json.dumps(state)
     module.save()
     log.info(
         "staff_upload_annotated for course:%s module:%s student:%s ",
         module.course_id,
         module.module_state_key,
         module.student.username
     )
     return Response(json_body=self.staff_grading_data())
예제 #4
0
파일: sga.py 프로젝트: mitodl/edx-sga
 def upload_assignment(self, request, suffix=''):
     # pylint: disable=unused-argument, protected-access
     """
     Save a students submission file.
     """
     require(self.upload_allowed())
     user = self.get_real_user()
     require(user)
     upload = request.params['assignment']
     sha1 = get_sha1(upload.file)
     if self.file_size_over_limit(upload.file):
         raise JsonHandlerError(
             413, 'Unable to upload file. Max size limit is {size}'.format(
                 size=self.student_upload_max_size()
             )
         )
     # Uploading an assignment represents a change of state with this user in this block,
     # so we need to ensure that the user has a StudentModule record, which represents that state.
     self.get_or_create_student_module(user)
     answer = {
         "sha1": sha1,
         "filename": upload.file.name,
         "mimetype": mimetypes.guess_type(upload.file.name)[0],
         "finalized": False
     }
     student_item_dict = self.get_student_item_dict()
     submissions_api.create_submission(student_item_dict, answer)
     path = self.file_storage_path(sha1, upload.file.name)
     log.info("Saving file: %s at path: %s for user: %s", upload.file.name, path, user.username)
     if default_storage.exists(path):
         # save latest submission
         default_storage.delete(path)
     default_storage.save(path, File(upload.file))
     return Response(json_body=self.student_state())
예제 #5
0
파일: sga.py 프로젝트: jswope00/edx-sga
    def upload_assignment(self, request, suffix=''):
        # pylint: disable=unused-argument
        """
        Save a students submission file.
        """
        require(self.upload_allowed())
        user = self.get_real_user()
        require(user)
        # Uploading an assignment represents a change of state with this user in this block,
        # so we need to ensure that the user has a StudentModule record, which represents that state.
        self.get_or_create_student_module(user)
        upload = request.params['assignment']
        sha1 = get_sha1(upload.file)
        answer = {
            "sha1": sha1,
            "filename": upload.file.name,
            "mimetype": mimetypes.guess_type(upload.file.name)[0],
            "finalized": False
        }
        student_item_dict = self.get_student_item_dict()
        submissions_api.create_submission(student_item_dict, answer)
        path = self.file_storage_path(sha1, upload.file.name)
        if not default_storage.exists(path):
            default_storage.save(path, File(upload.file))
	if self.confirmation_email:
	    submission = self.get_submission()
	    if submission:
	        self.generate_receipt_submission()
        return Response(json_body=self.student_state())
예제 #6
0
    def upload_assignment(self, request, suffix=''):
        # pylint: disable=unused-argument, protected-access
        """
        Save a students submission file.
        """
        require(self.upload_allowed())
        user = self.get_real_user()
        require(user)
        upload = request.params['assignment']
        sha1 = get_sha1(upload.file)
        if self.file_size_over_limit(upload.file):
            raise JsonHandlerError(
                413, 'Unable to upload file. Max size limit is {size}'.format(
                    size=self.student_upload_max_size()))
        # Uploading an assignment represents a change of state with this user in this block,
        # so we need to ensure that the user has a StudentModule record, which represents that state.
        module = self.get_or_create_student_module(user)
        answer = {
            "sha1": sha1,
            "filename": upload.file.name,
            "mimetype": mimetypes.guess_type(upload.file.name)[0],
            "finalized": False,
            "date_fin": None
        }
        student_item_dict = self.get_student_item_dict()
        submission = submissions_api.create_submission(student_item_dict,
                                                       answer)
        path = self.file_storage_path(sha1, upload.file.name)
        log.info("Saving file: %s at path: %s for user: %s", upload.file.name,
                 path, user.username)
        if default_storage.exists(path):
            # save latest submission
            default_storage.delete(path)
        default_storage.save(path, File(upload.file))
        freshen_answer(module, True)
        self.fresh = True

        from eventtracking import tracker
        data = {
            'username': user.username,
            'course_id': self.block_course_id,
            'type': answer['mimetype'],
            'filename': answer['filename'],
            'sha2': get_sha2(upload.file),
            'size': size_of_file(upload.file),
        }
        tracker.emit('edx.attachment', data)

        return Response(json_body=self.student_state())