def create_from_post(self, exercise, submitters, request): submission_data_list = [ (key, value) for (key, value) in query_dict_to_list_of_tuples(request.POST) if key != '__aplus__' ] try: meta_data_dict = json.loads(request.POST.get('__aplus__', '{}')) except json.JSONDecodeError: raise ValueError("The content of the field __aplus__ is not valid json") if 'lang' not in meta_data_dict: meta_data_dict['lang'] = get_language() try: new_submission = Submission.objects.create( exercise=exercise, submission_data=submission_data_list, meta_data=meta_data_dict, ) new_submission.submitters.set(submitters) except DatabaseError as error: logger.exception("Failed to create submission: %s %s", request.user.username, exercise); raise DatabaseError from error try: new_submission.add_files(request.FILES) except DatabaseError as error: logger.exception("Failed to save submitted files: %s %s", request.user.username, exercise); new_submission.delete() raise DatabaseError from error return new_submission
def _handle_submission(request, exercise, students, form, submissions): """ This method takes care of saving a new_submission locally and sending it to an exercise service for assessment. @param request: HttpRequest from Django @param exercise: an instance of an exercise class this submission is for @param students: a QuerySet of UserProfile objects that are submitting the exercise @param form: an instance of a Form class or None if there are no questions for the exercise @param submissions: previous submissions for the submitting user to the same exercise """ new_submission = Submission.objects.create(exercise=exercise) new_submission.submitters = students # Save the POST parameters from the new_submission in # a list of tuples [(key1, value1), (key2, value2)]. # By using tuples inside lists we allow two parameters # with the same name, which is not possible with dicts. new_submission.submission_data = helpers.query_dict_to_list_of_tuples(request.POST) # Add all submitted files to the new submission as SubmittedFile objects new_submission.add_files( request.FILES ) try: # Try submitting the submission to the exercise service. The submission # is done with a multipart POST request that contains all the files and # POST parameters sent by the user. response_page = new_submission.submit_to_service() except Exception, e: #raise e # TODO: Retrieving the grading failed. An error report should be sent # to administrators messages.error(request, _('Connecting to the assessment server failed! (%s)') % str(e) ) response_page = ExercisePage(exercise)
def post(self, request: HttpRequest, *args: Any, **kwargs: Any) -> HttpResponse: """ Updates the request user's existing draft or creates a new draft. """ submission_data_list = query_dict_to_list_of_tuples(request.POST) self.exercise.set_submission_draft(self.profile, submission_data_list) # Simple OK response return HttpResponse()
def create_from_post(self, exercise, submitters, request): new_submission = Submission.objects.create( exercise=exercise, submission_data=query_dict_to_list_of_tuples(request.POST)) new_submission.submitters = submitters try: new_submission.add_files(request.FILES) except DatabaseError: logger.exception("Failed to save submitted files: %s %s", request.user.username, exercise) new_submission.delete() return None return new_submission
def create_from_post(self, exercise, submitters, request): new_submission = Submission.objects.create( exercise=exercise, submission_data=query_dict_to_list_of_tuples(request.POST) ) new_submission.submitters = submitters try: new_submission.add_files(request.FILES) except DatabaseError: logger.exception("Failed to save submitted files: %s %s", request.user.username, exercise); new_submission.delete() return None return new_submission
def _handle_submission(request, exercise, students, form, submissions): """ This method takes care of saving a new_submission locally and sending it to an exercise service for assessment. @param request: HttpRequest from Django @param exercise: an instance of an exercise class this submission is for @param students: a QuerySet of UserProfile objects that are submitting the exercise @param form: an instance of a Form class or None if there are no questions for the exercise @param submissions: previous submissions for the submitting user to the same exercise """ new_submission = Submission.objects.create(exercise=exercise) new_submission.submitters = students # Save the POST parameters from the new_submission in # a list of tuples [(key1, value1), (key2, value2)]. # By using tuples inside lists we allow two parameters # with the same name, which is not possible with dicts. new_submission.submission_data = helpers.query_dict_to_list_of_tuples( request.POST) # Add all submitted files to the new submission as SubmittedFile objects new_submission.add_files(request.FILES) try: # Try submitting the submission to the exercise service. The submission # is done with a multipart POST request that contains all the files and # POST parameters sent by the user. response_page = new_submission.submit_to_service() except Exception, e: #raise e # TODO: Retrieving the grading failed. An error report should be sent # to administrators messages.error( request, _('Connecting to the assessment server failed! (%s)') % str(e)) response_page = ExercisePage(exercise)