summaryrefslogtreecommitdiff
path: root/yaksh/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'yaksh/models.py')
-rw-r--r--yaksh/models.py35
1 files changed, 11 insertions, 24 deletions
diff --git a/yaksh/models.py b/yaksh/models.py
index 2bf4a85..271ed6d 100644
--- a/yaksh/models.py
+++ b/yaksh/models.py
@@ -81,10 +81,6 @@ def has_profile(user):
def get_upload_dir(instance, filename):
return "question_%s/%s" % (instance.question.id, filename)
-def get_quiz_instructions_info():
- file_path = os.path.join(os.getcwd(), "Quiz_instructions.txt")
- with open(file_path, 'r') as file:
- return file.read()
###############################################################################
class CourseManager(models.Manager):
@@ -234,9 +230,6 @@ class Question(models.Model):
# The type of question.
type = models.CharField(max_length=24, choices=question_types)
- # The type of evaluator
- test_case_type = models.CharField(max_length=24, choices=test_case_types)
-
# Is this question active or not. If it is inactive it will not be used
# when creating a QuestionPaper.
active = models.BooleanField(default=True)
@@ -289,7 +282,6 @@ class Question(models.Model):
'description': question.description,
'points': question.points, 'language': question.language,
'type': question.type, 'active': question.active,
- 'test_case_type': question.test_case_type,
'snippet': question.snippet,
'testcase': [case.get_field_value() for case in test_case],
'files': file_names}
@@ -331,7 +323,7 @@ class Question(models.Model):
for tc in self.testcase_set.all():
test_case_type = tc.type
test_case_ctype = ContentType.objects.get(app_label="yaksh",
- model=self.test_case_type
+ model=test_case_type
)
test_case = test_case_ctype.get_object_for_this_type(
question=self,
@@ -550,7 +542,7 @@ class Quiz(models.Model):
is_trial = models.BooleanField(default=False)
instructions = models.TextField('Instructions for Students',
- default=get_quiz_instructions_info)
+ default=None, blank=True, null=True)
view_answerpaper = models.BooleanField('Allow student to view their answer\
paper', default=False)
@@ -1067,29 +1059,25 @@ 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}
- correct = False
+ result = {'success': False, 'error': ['Incorrect answer'], 'weight': 0.0}
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['success'] = True
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['success'] = True
result['error'] = ['Correct answer']
- correct = True
elif question.type == 'code':
user_dir = self.user.profile.get_user_dir()
- json_result = code_server.run_code(question.language,
- question.test_case_type, json_data, user_dir)
+ json_result = code_server.run_code(question.language, json_data, user_dir)
result = json.loads(json_result)
- if result.get('success'):
- correct = True
- return correct, result
+ return result
def regrade(self, question_id):
try:
@@ -1114,10 +1102,10 @@ class AnswerPaper(models.Model):
answer = user_answer.answer
json_data = question.consolidate_answer_data(answer) \
if question.type == 'code' else None
- correct, result = self.validate_answer(answer, question, json_data)
- user_answer.correct = correct
+ result = self.validate_answer(answer, question, json_data)
+ user_answer.correct = result.get('success')
user_answer.error = result.get('error')
- if correct:
+ if result.get('success'):
user_answer.marks = (question.points * result['weight'] /
question.get_maximum_test_case_weight()) \
if question.partial_grading and question.type == 'code' else question.points
@@ -1151,8 +1139,7 @@ class TestCase(models.Model):
class StandardTestCase(TestCase):
test_case = models.TextField()
weight = models.FloatField(default=1.0)
- test_case_args = models.TextField(help_text="<b>Command Line arguments for bash only</b>",
- blank=True)
+ test_case_args = models.TextField(blank=True)
def get_field_value(self):
return {"test_case_type": "standardtestcase",