summaryrefslogtreecommitdiff
path: root/yaksh/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'yaksh/models.py')
-rw-r--r--yaksh/models.py27
1 files changed, 20 insertions, 7 deletions
diff --git a/yaksh/models.py b/yaksh/models.py
index 33c3b42..05528c7 100644
--- a/yaksh/models.py
+++ b/yaksh/models.py
@@ -325,6 +325,13 @@ class Question(models.Model):
return test_case
+ def get_maximum_test_case_weightage(self, **kwargs):
+ max_weightage = 0.0
+ for test_case in self.get_test_cases():
+ max_weightage += test_case.weightage
+
+ return max_weightage
+
def _add_and_get_files(self, zip_file):
files = FileUpload.objects.filter(question=self)
files_list = []
@@ -1029,7 +1036,7 @@ class AnswerPaper(models.Model):
For code questions success is True only if the answer is correct.
"""
- result = {'success': True, 'error': 'Incorrect answer', 'marks': 0.0}
+ result = {'success': True, 'error': 'Incorrect answer', 'weightage': 0.0}
correct = False
if user_answer is not None:
if question.type == 'mcq':
@@ -1080,11 +1087,17 @@ class AnswerPaper(models.Model):
user_answer.correct = correct
user_answer.error = result.get('error')
if correct:
- user_answer.marks = question.points * result['marks'] \
+ user_answer.marks = (question.points * result['weightage'] /
+ question.get_maximum_test_case_weightage()) \
if question.partial_grading and question.type == 'code' else question.points
+ # user_answer.marks = question.points * result['weightage'] \
+ # if question.partial_grading and question.type == 'code' else question.points
else:
- user_answer.marks = question.points * result['marks'] \
+ user_answer.marks = (question.points * result['weightage'] /
+ question.get_maximum_test_case_weightage()) \
if question.partial_grading and question.type == 'code' else 0
+ # user_answer.marks = question.points * result['weightage'] \
+ # if question.partial_grading and question.type == 'code' else 0
user_answer.save()
self.update_marks('completed')
return True, msg
@@ -1109,11 +1122,11 @@ class TestCase(models.Model):
class StandardTestCase(TestCase):
test_case = models.TextField(blank=True)
- marks = models.FloatField(default=0.0)
+ weightage = models.FloatField(default=0.0)
def get_field_value(self):
return {"test_case": self.test_case,
- "marks": self.marks}
+ "weightage": self.weightage}
def __str__(self):
return u'Question: {0} | Test Case: {1}'.format(self.question,
@@ -1124,12 +1137,12 @@ class StandardTestCase(TestCase):
class StdioBasedTestCase(TestCase):
expected_input = models.TextField(blank=True)
expected_output = models.TextField()
- marks = models.FloatField(default=0.0)
+ weightage = models.IntegerField(default=0.0)
def get_field_value(self):
return {"expected_output": self.expected_output,
"expected_input": self.expected_input,
- "marks": self.marks}
+ "weightage": self.weightage}
def __str__(self):
return u'Question: {0} | Exp. Output: {1} | Exp. Input: {2}'.format(self.question,