summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--yaksh/hook_evaluator.py34
-rw-r--r--yaksh/models.py7
2 files changed, 9 insertions, 32 deletions
diff --git a/yaksh/hook_evaluator.py b/yaksh/hook_evaluator.py
index 5480849..0ccdd5e 100644
--- a/yaksh/hook_evaluator.py
+++ b/yaksh/hook_evaluator.py
@@ -23,7 +23,7 @@ class HookEvaluator(BaseEvaluator):
self.partial_grading = metadata.get('partial_grading')
# Set test case data values
- self.test_case = test_case_data.get('code')
+ self.hook_code = test_case_data.get('hook_code')
self.weight = test_case_data.get('weight')
def teardown(self):
@@ -31,21 +31,9 @@ class HookEvaluator(BaseEvaluator):
if self.files:
delete_files(self.files)
- def compile_code(self):
- if self.file_paths:
- self.files = copy_files(self.file_paths)
- if self.exec_scope:
- return None
- else:
- submitted = compile(self.user_answer, '<string>', mode='exec')
- self.exec_scope = {}
- exec(submitted, self.exec_scope)
- return self.exec_scope
-
def check_code(self):
- """ Function validates user answer by running an assertion based test case
- against it
-
+ """ Function evaluates user answer by running a python based hook code
+ against it.
Returns
--------
Returns a tuple (success, error, test_case_weight)
@@ -67,21 +55,9 @@ class HookEvaluator(BaseEvaluator):
mark_fraction = 0.0
try:
tb = None
- _tests = compile(self.test_case, '<string>', mode='exec')
- exec(_tests, globals())
+ _tests = compile(self.hook_code, '<string>', mode='exec')
+ exec(_tests, locals())
success, err, mark_fraction = check_answer(self.user_answer)
- except AssertionError:
- type, value, tb = sys.exc_info()
- info = traceback.extract_tb(tb)
- fname, lineno, func, text = info[-1]
- text = str(self.test_case)
- err = "Expected Test Case:\n{0}\n" \
- "Error - {1} {2} in: {3}\n".format(
- self.test_case,
- type.__name__,
- str(value),
- text
- )
except TimeoutException:
raise
except Exception:
diff --git a/yaksh/models.py b/yaksh/models.py
index cc65b9c..b859faa 100644
--- a/yaksh/models.py
+++ b/yaksh/models.py
@@ -1183,12 +1183,13 @@ class McqTestCase(TestCase):
class HookTestCase(TestCase):
- code = models.TextField()
+ hook_code = models.TextField()
weight = models.FloatField(default=1.0)
def get_field_value(self):
- return {"test_case_type": "hooktestcase", "code": self.code}
+ return {"test_case_type": "hooktestcase", "hook_code": self.hook_code,
+ "weight": self.weight}
def __str__(self):
- return u'Hook Testcase | Correct: {0}'.format(self.code)
+ return u'Hook Testcase | Correct: {0}'.format(self.hook_code)