summaryrefslogtreecommitdiff
path: root/yaksh/views.py
diff options
context:
space:
mode:
authorPrabhu Ramachandran2017-03-08 15:59:18 +0530
committerGitHub2017-03-08 15:59:18 +0530
commit0a8000387b3edd463cc58b7fb85f76639f10b150 (patch)
tree3aba6618219a203a3bda5d4c85ef0ad1c229ab1d /yaksh/views.py
parentaede1c3736077387d63eacd20c2c39d8875e605d (diff)
parentf57cfacf41f8a1d72a56ea8c875f906e7db2a15e (diff)
downloadonline_test-0a8000387b3edd463cc58b7fb85f76639f10b150.tar.gz
online_test-0a8000387b3edd463cc58b7fb85f76639f10b150.tar.bz2
online_test-0a8000387b3edd463cc58b7fb85f76639f10b150.zip
Merge pull request #229 from ankitjavalkar/reattempt-mcq
Allow to reattempt all types of questions
Diffstat (limited to 'yaksh/views.py')
-rw-r--r--yaksh/views.py27
1 files changed, 12 insertions, 15 deletions
diff --git a/yaksh/views.py b/yaksh/views.py
index 74c409c..1089067 100644
--- a/yaksh/views.py
+++ b/yaksh/views.py
@@ -400,7 +400,7 @@ def start(request, questionpaper_id=None, attempt_num=None):
@login_required
-def show_question(request, question, paper, error_message=None):
+def show_question(request, question, paper, error_message=None, notification=None):
"""Show a question if possible."""
user = request.user
if not question:
@@ -412,10 +412,14 @@ def show_question(request, question, paper, error_message=None):
if paper.time_left() <= 0:
reason='Your time is up!'
return complete(request, reason, paper.attempt_number, paper.question_paper.id)
+ if question in paper.questions_answered.all():
+ notification = 'You have already attempted this question successfully' \
+ if question.type == "code" else \
+ 'You have already attempted this question'
test_cases = question.get_test_cases()
files = FileUpload.objects.filter(question_id=question.id, hide=False)
context = {'question': question, 'paper': paper, 'error_message': error_message,
- 'test_cases': test_cases, 'files': files,
+ 'test_cases': test_cases, 'files': files, 'notification': notification,
'last_attempt': question.snippet.encode('unicode-escape')}
answers = paper.get_previous_answers(question)
if answers:
@@ -432,9 +436,6 @@ def skip(request, q_id, next_q=None, attempt_num=None, questionpaper_id=None):
paper = get_object_or_404(AnswerPaper, user=request.user, attempt_number=attempt_num,
question_paper=questionpaper_id)
question = get_object_or_404(Question, pk=q_id)
- if question in paper.questions_answered.all():
- next_q = paper.next_question(q_id)
- return show_question(request, next_q, paper)
if request.method == 'POST' and question.type == 'code':
user_code = request.POST.get('answer')
@@ -445,8 +446,6 @@ def skip(request, q_id, next_q=None, attempt_num=None, questionpaper_id=None):
paper.answers.add(new_answer)
if next_q is not None:
next_q = get_object_or_404(Question, pk=next_q)
- if next_q not in paper.questions_unanswered.all():
- return show_question(request, question, paper)
else:
next_q = paper.next_question(q_id)
return show_question(request, next_q, paper)
@@ -459,9 +458,6 @@ def check(request, q_id, attempt_num=None, questionpaper_id=None):
paper = get_object_or_404(AnswerPaper, user=request.user, attempt_number=attempt_num,
question_paper=questionpaper_id)
current_question = get_object_or_404(Question, pk=q_id)
- if current_question in paper.questions_answered.all():
- next_q = paper.next_question(q_id)
- return show_question(request, next_q, paper)
if request.method == 'POST':
snippet_code = request.POST.get('snippet')
@@ -480,14 +476,14 @@ def check(request, q_id, attempt_num=None, questionpaper_id=None):
assign.assignmentFile = request.FILES['assignment']
assign.save()
user_answer = 'ASSIGNMENT UPLOADED'
- next_q = paper.completed_question(current_question.id)
+ next_q = paper.add_completed_question(current_question.id)
return show_question(request, next_q, paper)
else:
user_code = request.POST.get('answer')
user_answer = snippet_code + "\n" + user_code if snippet_code else user_code
if not user_answer:
msg = ["Please submit a valid option or code"]
- return show_question(request, current_question, paper, msg)
+ return show_question(request, current_question, paper, notification=msg)
new_answer = Answer(question=current_question, answer=user_answer,
correct=False, error=json.dumps([]))
new_answer.save()
@@ -505,15 +501,16 @@ def check(request, q_id, attempt_num=None, questionpaper_id=None):
new_answer.correct = result.get('success')
error_message = None
new_answer.error = json.dumps(result.get('error'))
- next_question = paper.completed_question(current_question.id)
+ next_question = paper.add_completed_question(current_question.id)
else:
new_answer.marks = (current_question.points * result['weight'] /
current_question.get_maximum_test_case_weight()) \
if current_question.partial_grading and current_question.type == 'code' else 0
- error_message = result.get('error')
+ error_message = result.get('error') if current_question.type == 'code' \
+ else None
new_answer.error = json.dumps(result.get('error'))
next_question = current_question if current_question.type == 'code' \
- else paper.completed_question(current_question.id)
+ else paper.add_completed_question(current_question.id)
new_answer.save()
paper.update_marks('inprogress')
paper.set_end_time(timezone.now())