diff options
Diffstat (limited to 'yaksh/python_code_evaluator.py')
-rw-r--r-- | yaksh/python_code_evaluator.py | 74 |
1 files changed, 49 insertions, 25 deletions
diff --git a/yaksh/python_code_evaluator.py b/yaksh/python_code_evaluator.py index 3835b44..5722b2d 100644 --- a/yaksh/python_code_evaluator.py +++ b/yaksh/python_code_evaluator.py @@ -12,13 +12,13 @@ from code_evaluator import CodeEvaluator, TimeoutException class PythonCodeEvaluator(CodeEvaluator): """Tests the Python code obtained from Code Server""" - def check_code(self): + def check_code(self, test, user_answer, ref_code_path): success = False try: tb = None - test_code = self._create_test_case() - submitted = compile(self.user_answer, '<string>', mode='exec') + test_code = test + submitted = compile(user_answer, '<string>', mode='exec') g = {} exec submitted in g _tests = compile(test_code, '<string>', mode='exec') @@ -40,26 +40,50 @@ class PythonCodeEvaluator(CodeEvaluator): del tb return success, err - def _create_test_case(self): - """ - Create assert based test cases in python - """ - test_code = "" - if self.test: - return self.test - elif self.test_case_data: - for test_case in self.test_case_data: - pos_args = ", ".join(str(i) for i in test_case.get('pos_args')) \ - if test_case.get('pos_args') else "" - kw_args = ", ".join(str(k+"="+a) for k, a - in test_case.get('kw_args').iteritems()) \ - if test_case.get('kw_args') else "" - args = pos_args + ", " + kw_args if pos_args and kw_args \ - else pos_args or kw_args - function_name = test_case.get('func_name') - expected_answer = test_case.get('expected_answer') + # def check_code(self): + # success = False - tcode = "assert {0}({1}) == {2}".format(function_name, args, - expected_answer) - test_code += tcode + "\n" - return test_code + # try: + # tb = None + # test_code = self._create_test_case() + # submitted = compile(self.user_answer, '<string>', mode='exec') + # g = {} + # exec submitted in g + # _tests = compile(test_code, '<string>', mode='exec') + # exec _tests in g + # except AssertionError: + # type, value, tb = sys.exc_info() + # info = traceback.extract_tb(tb) + # fname, lineno, func, text = info[-1] + # text = str(test_code).splitlines()[lineno-1] + # err = "{0} {1} in: {2}".format(type.__name__, str(value), text) + # else: + # success = True + # err = 'Correct answer' + + # del tb + # return success, err + + # def _create_test_case(self): + # """ + # Create assert based test cases in python + # """ + # test_code = "" + # if self.test: + # return self.test + # elif self.test_case_data: + # for test_case in self.test_case_data: + # pos_args = ", ".join(str(i) for i in test_case.get('pos_args')) \ + # if test_case.get('pos_args') else "" + # kw_args = ", ".join(str(k+"="+a) for k, a + # in test_case.get('kw_args').iteritems()) \ + # if test_case.get('kw_args') else "" + # args = pos_args + ", " + kw_args if pos_args and kw_args \ + # else pos_args or kw_args + # function_name = test_case.get('func_name') + # expected_answer = test_case.get('expected_answer') + + # tcode = "assert {0}({1}) == {2}".format(function_name, args, + # expected_answer) + # test_code += tcode + "\n" + # return test_code |