From 42ed7c142e2c4ff4dccdaec2365e22d30bc276dd Mon Sep 17 00:00:00 2001
From: ankitjavalkar
Date: Thu, 22 Dec 2016 15:55:54 +0530
Subject: Refactor check method for cleaner code and fixing multiple issues -
Question should skip to new question with new error rendering - Fix test
cases
Fix change_dir context manager in grader
---
yaksh/c_cpp_files/main2.c | 2 +-
yaksh/cpp_code_evaluator.py | 3 +-
yaksh/grader.py | 6 ++--
yaksh/java_code_evaluator.py | 1 +
yaksh/models.py | 6 ++--
yaksh/templates/yaksh/grade_user.html | 1 -
yaksh/test_models.py | 2 +-
yaksh/views.py | 53 ++++++++++++++++++-----------------
8 files changed, 37 insertions(+), 37 deletions(-)
(limited to 'yaksh')
diff --git a/yaksh/c_cpp_files/main2.c b/yaksh/c_cpp_files/main2.c
index ccd1768..a62195f 100755
--- a/yaksh/c_cpp_files/main2.c
+++ b/yaksh/c_cpp_files/main2.c
@@ -13,7 +13,7 @@ void check(T expect,T result)
else
{
printf("\nIncorrect:\n Expected %d got %d \n",expect,result);
- exit (0);
+ exit (1);
}
}
diff --git a/yaksh/cpp_code_evaluator.py b/yaksh/cpp_code_evaluator.py
index 418c655..91ba703 100644
--- a/yaksh/cpp_code_evaluator.py
+++ b/yaksh/cpp_code_evaluator.py
@@ -15,7 +15,7 @@ class CppCodeEvaluator(BaseEvaluator):
"""Tests the C code obtained from Code Server"""
def __init__(self, metadata, test_case_data):
self.files = []
- self.submit_code_path = self.create_submit_code_file('submit.c')
+ self.submit_code_path = ''
self.compiled_user_answer = None
self.compiled_test_code = None
self.user_output_path = ""
@@ -62,6 +62,7 @@ class CppCodeEvaluator(BaseEvaluator):
ref_code_path = self.test_case
clean_ref_code_path, clean_test_case_path = \
self._set_test_code_file_path(ref_code_path)
+ self.submit_code_path = self.create_submit_code_file('submit.c')
if self.file_paths:
self.files = copy_files(self.file_paths)
if not isfile(clean_ref_code_path):
diff --git a/yaksh/grader.py b/yaksh/grader.py
index 41b3ac1..0c057c2 100644
--- a/yaksh/grader.py
+++ b/yaksh/grader.py
@@ -24,7 +24,6 @@ from .language_registry import create_evaluator_instance
MY_DIR = abspath(dirname(__file__))
-
registry = None
# Raised when the code times-out.
@@ -34,7 +33,7 @@ class TimeoutException(Exception):
@contextlib.contextmanager
def change_dir(path):
- cur_dir = os.getcwd()
+ cur_dir = abspath(dirname(MY_DIR))
os.chdir(path)
try:
yield
@@ -77,7 +76,7 @@ class Grader(object):
self.in_dir = in_dir if in_dir else MY_DIR
- def evaluate(self, kwargs): #language, test_case_type,
+ def evaluate(self, kwargs):
"""Evaluates given code with the test cases based on
given arguments in test_case_data.
@@ -98,7 +97,6 @@ class Grader(object):
A tuple: (success, error, weight).
"""
-
self.setup()
test_case_instances = self.get_evaluator_objects(kwargs)
with change_dir(self.in_dir):
diff --git a/yaksh/java_code_evaluator.py b/yaksh/java_code_evaluator.py
index ab8160c..91e5840 100644
--- a/yaksh/java_code_evaluator.py
+++ b/yaksh/java_code_evaluator.py
@@ -18,6 +18,7 @@ class JavaCodeEvaluator(BaseEvaluator):
self.files = []
self.compiled_user_answer = None
self.compiled_test_code = None
+ self.submit_code_path = ""
self.user_output_path = ""
self.ref_output_path = ""
diff --git a/yaksh/models.py b/yaksh/models.py
index 378d7a1..08feab6 100644
--- a/yaksh/models.py
+++ b/yaksh/models.py
@@ -1064,20 +1064,20 @@ class AnswerPaper(models.Model):
For code questions success is True only if the answer is correct.
"""
- result = {'success': True, 'error': 'Incorrect answer', 'weight': 0.0}
+ result = {'success': True, 'error': ['Incorrect answer'], 'weight': 0.0}
correct = False
if user_answer is not None:
if question.type == 'mcq':
expected_answer = question.get_test_case(correct=True).options
if user_answer.strip() == expected_answer.strip():
correct = True
- result['error'] = 'Correct answer'
+ result['error'] = ['Correct answer']
elif question.type == 'mcc':
expected_answers = []
for opt in question.get_test_cases(correct=True):
expected_answers.append(opt.options)
if set(user_answer) == set(expected_answers):
- result['error'] = 'Correct answer'
+ result['error'] = ['Correct answer']
correct = True
elif question.type == 'code':
user_dir = self.user.profile.get_user_dir()
diff --git a/yaksh/templates/yaksh/grade_user.html b/yaksh/templates/yaksh/grade_user.html
index 4fc5026..516a6d0 100644
--- a/yaksh/templates/yaksh/grade_user.html
+++ b/yaksh/templates/yaksh/grade_user.html
@@ -156,7 +156,6 @@ Status : Passed
{% else %}