def _saveForm(request, course, exercise, post_url, form): data, files = form.json_and_files(post_url) sdir = create_submission_dir(course, exercise) write_submission_file(sdir, "data.json", data) for name, uploaded in files.items(): save_submitted_file(sdir, name, uploaded) return _acceptSubmission(request, course, exercise, post_url, sdir)
def _saveForm(request, course, exercise, post_url, form): data,files = form.json_and_files(post_url) sdir = create_submission_dir(course, exercise) write_submission_file(sdir, "data.json", data) for name,uploaded in files.items(): save_submitted_file(sdir, name, uploaded) return _acceptSubmission(request, course, exercise, post_url, sdir)
def acceptGeneralForm(request, course, exercise, post_url): ''' Presents a template and accepts form containing any input types (text, file, etc) for grading queue. ''' if not_modified_since(request, exercise): return not_modified_response(request, exercise) fields = copy.deepcopy(exercise.get("fields", [])) result = None miss = False if request.method == "POST": # Parse submitted values. for entry in fields: entry["value"] = request.POST.get(entry["name"], "").strip() if "required" in entry and entry["required"] and not entry["value"]: entry["missing"] = True miss = True files_submitted = [] if "files" in exercise: # Confirm that all required files were submitted. #files_submitted = [] # exercise["files"] entries for the files that were really submitted for entry in exercise["files"]: # by default, all fields are required required = ("required" not in entry or entry["required"]) if entry["field"] not in request.FILES: if required: result = { "rejected": True, "missing_files": True } break else: files_submitted.append(entry) if miss: result = { "fields": fields, "rejected": True } elif result is None: # Store submitted values. sdir = create_submission_dir(course, exercise) for entry in fields: write_submission_file(sdir, entry["name"], entry["value"]) if "files" in exercise: if "required_number_of_files" in exercise and \ exercise["required_number_of_files"] > len(files_submitted): result = { "rejected": True, "missing_files": True } else: # Store submitted files. for entry in files_submitted: save_submitted_file(sdir, entry["name"], request.FILES[entry["field"]]) return _acceptSubmission(request, course, exercise, post_url, sdir) return cache_headers( render_configured_template( request, course, exercise, post_url, "access/accept_general_default.html", result ), request, exercise )
def acceptAttachedExercise(request, course, exercise, post_url): ''' Accepts attached exercise rules and user files for queue. ''' _requireActions(exercise) if not_modified_since(request, exercise): return not_modified_response(request, exercise) result = None # Receive post. if request.method == "POST": # Search for file contents. if "file[]" in request.FILES: file_list = request.FILES.getlist("file[]") else: file_list = [] i = 0 while "content_%d" % (i) in request.FILES: file_list.append(request.FILES["content_%d" % (i)]) i += 1 # Store submitted files. if not file_list: result = { "error":True, "missing_files":True } else: sdir = create_submission_dir(course, exercise) i = 0 for content in file_list: if i > 0: key = "file_%d" % (i) if not key in request.POST or not request.POST[key]: result = { "error": True, "missing_file_name": True } clean_submission_dir(sdir) break save_submitted_file(sdir, request.POST[key], content) else: save_submitted_file(sdir, "exercise_attachment", content) i += 1 if result is None: return _acceptSubmission(request, course, exercise, post_url, sdir) # Add the attachment as a hint to the default view form. if result is None: import copy exercise = copy.deepcopy(exercise) exercise["files"] = [ { "field": "content_0", "name": "exercise_attachment" } ] return cache_headers( render_configured_template( request, course, exercise, post_url, "access/accept_files_default.html", result ), request, exercise )
def acceptAttachedExercise(request, course, exercise, post_url): ''' Accepts attached exercise rules and user files for queue. ''' _requireActions(exercise) if not_modified_since(request, exercise): return not_modified_response(request, exercise) result = None # Receive post. if request.method == "POST": # Search for file contents. if "file[]" in request.FILES: file_list = request.FILES.getlist("file[]") else: file_list = [] i = 0 while "content_%d" % (i) in request.FILES: file_list.append(request.FILES["content_%d" % (i)]) i += 1 # Store submitted files. if not file_list: result = {"rejected": True, "missing_files": True} else: sdir = create_submission_dir(course, exercise) i = 0 for content in file_list: if i > 0: key = "file_%d" % (i) if not key in request.POST or not request.POST[key]: result = {"error": True, "missing_file_name": True} clean_submission_dir(sdir) break save_submitted_file(sdir, request.POST[key], content) else: save_submitted_file(sdir, "exercise_attachment", content) i += 1 if result is None: return _acceptSubmission(request, course, exercise, post_url, sdir) # Add the attachment as a hint to the default view form. if result is None: import copy exercise = copy.deepcopy(exercise) exercise["files"] = [{ "field": "content_0", "name": "exercise_attachment" }] return cache_headers( render_configured_template(request, course, exercise, post_url, "access/accept_files_default.html", result), request, exercise)
def acceptFiles(request, course, exercise, post_url): ''' Presents a template and accepts files for grading queue. ''' _requireActions(exercise) if not_modified_since(request, exercise): return not_modified_response(request, exercise) result = None # Receive post. if request.method == "POST" and "files" in exercise: # Confirm that all required files were submitted. files_submitted = [] # exercise["files"] entries for the files that were really submitted for entry in exercise["files"]: # by default, all fields are required required = ("required" not in entry or entry["required"]) if entry["field"] not in request.FILES: if required: result = { "error": True, "missing_files": True } break else: files_submitted.append(entry) if result is None: if "required_number_of_files" in exercise and \ exercise["required_number_of_files"] > len(files_submitted): result = { "error": True, "missing_files": True } else: # Store submitted files. sdir = create_submission_dir(course, exercise) for entry in files_submitted: save_submitted_file(sdir, entry["name"], request.FILES[entry["field"]]) return _acceptSubmission(request, course, exercise, post_url, sdir) return cache_headers( render_configured_template( request, course, exercise, post_url, "access/accept_files_default.html", result ), request, exercise )
def acceptFiles(request, course, exercise, post_url): ''' Presents a template and accepts files for grading queue. ''' _requireActions(exercise) if not_modified_since(request, exercise): return not_modified_response(request, exercise) result = None # Receive post. if request.method == "POST" and "files" in exercise: # Confirm that all required files were submitted. files_submitted = [] # exercise["files"] entries for the files that were really submitted for entry in exercise["files"]: # by default, all fields are required required = ("required" not in entry or entry["required"]) if entry["field"] not in request.FILES: if required: result = { "rejected": True, "missing_files": True } break else: files_submitted.append(entry) if result is None: if "required_number_of_files" in exercise and \ exercise["required_number_of_files"] > len(files_submitted): result = { "rejected": True, "missing_files": True } else: # Store submitted files. sdir = create_submission_dir(course, exercise) for entry in files_submitted: save_submitted_file(sdir, entry["name"], request.FILES[entry["field"]]) return _acceptSubmission(request, course, exercise, post_url, sdir) return cache_headers( render_configured_template( request, course, exercise, post_url, "access/accept_files_default.html", result ), request, exercise )
def acceptGeneralForm(request, course, exercise, post_url): ''' Presents a template and accepts form containing any input types (text, file, etc) for grading queue. ''' _requireActions(exercise) if not_modified_since(request, exercise): return not_modified_response(request, exercise) fields = copy.deepcopy(exercise.get("fields", [])) result = None miss = False if request.method == "POST": # Parse submitted values. for entry in fields: entry["value"] = request.POST.get(entry["name"], "").strip() if "required" in entry and entry["required"] and not entry["value"]: entry["missing"] = True miss = True files_submitted = [] if "files" in exercise: # Confirm that all required files were submitted. #files_submitted = [] # exercise["files"] entries for the files that were really submitted for entry in exercise["files"]: # by default, all fields are required required = ("required" not in entry or entry["required"]) if entry["field"] not in request.FILES: if required: result = { "rejected": True, "missing_files": True } break else: files_submitted.append(entry) if miss: result = { "fields": fields, "rejected": True } elif result is None: # Store submitted values. sdir = create_submission_dir(course, exercise) for entry in fields: write_submission_file(sdir, entry["name"], entry["value"]) if "files" in exercise: if "required_number_of_files" in exercise and \ exercise["required_number_of_files"] > len(files_submitted): result = { "rejected": True, "missing_files": True } else: # Store submitted files. for entry in files_submitted: save_submitted_file(sdir, entry["name"], request.FILES[entry["field"]]) return _acceptSubmission(request, course, exercise, post_url, sdir) return cache_headers( render_configured_template( request, course, exercise, post_url, "access/accept_general_default.html", result ), request, exercise )