From 7df9ab9c149ba1d70f29ea800f7a851fc39be42f Mon Sep 17 00:00:00 2001 From: Diana Huang Date: Fri, 17 Apr 2015 13:09:34 -0400 Subject: [PATCH] Extend the Score namedtuple to know about module locations. --- common/lib/xmodule/xmodule/graders.py | 24 +++++++---- .../lib/xmodule/xmodule/tests/test_graders.py | 42 +++++++++---------- lms/djangoapps/courseware/grades.py | 16 +++++-- 3 files changed, 49 insertions(+), 33 deletions(-) diff --git a/common/lib/xmodule/xmodule/graders.py b/common/lib/xmodule/xmodule/graders.py index b5e0e1ba9f..8d73738b28 100644 --- a/common/lib/xmodule/xmodule/graders.py +++ b/common/lib/xmodule/xmodule/graders.py @@ -10,7 +10,7 @@ log = logging.getLogger("edx.courseware") # This is a tuple for holding scores, either from problems or sections. # Section either indicates the name of the problem or the name of the section -Score = namedtuple("Score", "earned possible graded section") +Score = namedtuple("Score", "earned possible graded section module_id") def aggregate_scores(scores, section_name="summary"): @@ -27,15 +27,21 @@ def aggregate_scores(scores, section_name="summary"): total_possible = sum(score.possible for score in scores) #regardless of whether or not it is graded - all_total = Score(total_correct, - total_possible, - False, - section_name) + all_total = Score( + total_correct, + total_possible, + False, + section_name, + None + ) #selecting only graded things - graded_total = Score(total_correct_graded, - total_possible_graded, - True, - section_name) + graded_total = Score( + total_correct_graded, + total_possible_graded, + True, + section_name, + None + ) return all_total, graded_total diff --git a/common/lib/xmodule/xmodule/tests/test_graders.py b/common/lib/xmodule/xmodule/tests/test_graders.py index 1a9ba50dc4..cc56173aa5 100644 --- a/common/lib/xmodule/xmodule/tests/test_graders.py +++ b/common/lib/xmodule/xmodule/tests/test_graders.py @@ -13,23 +13,23 @@ class GradesheetTest(unittest.TestCase): Score.__sub__ = lambda me, other: (me.earned - other.earned) + (me.possible - other.possible) all_total, graded_total = aggregate_scores(scores) - self.assertEqual(all_total, Score(earned=0, possible=0, graded=False, section="summary")) - self.assertEqual(graded_total, Score(earned=0, possible=0, graded=True, section="summary")) + self.assertEqual(all_total, Score(earned=0, possible=0, graded=False, section="summary", module_id=None)) + self.assertEqual(graded_total, Score(earned=0, possible=0, graded=True, section="summary", module_id=None)) - scores.append(Score(earned=0, possible=5, graded=False, section="summary")) + scores.append(Score(earned=0, possible=5, graded=False, section="summary", module_id=None)) all_total, graded_total = aggregate_scores(scores) - self.assertEqual(all_total, Score(earned=0, possible=5, graded=False, section="summary")) - self.assertEqual(graded_total, Score(earned=0, possible=0, graded=True, section="summary")) + self.assertEqual(all_total, Score(earned=0, possible=5, graded=False, section="summary", module_id=None)) + self.assertEqual(graded_total, Score(earned=0, possible=0, graded=True, section="summary", module_id=None)) - scores.append(Score(earned=3, possible=5, graded=True, section="summary")) + scores.append(Score(earned=3, possible=5, graded=True, section="summary", module_id=None)) all_total, graded_total = aggregate_scores(scores) - self.assertAlmostEqual(all_total, Score(earned=3, possible=10, graded=False, section="summary")) - self.assertAlmostEqual(graded_total, Score(earned=3, possible=5, graded=True, section="summary")) + self.assertAlmostEqual(all_total, Score(earned=3, possible=10, graded=False, section="summary", module_id=None)) + self.assertAlmostEqual(graded_total, Score(earned=3, possible=5, graded=True, section="summary", module_id=None)) - scores.append(Score(earned=2, possible=5, graded=True, section="summary")) + scores.append(Score(earned=2, possible=5, graded=True, section="summary", module_id=None)) all_total, graded_total = aggregate_scores(scores) - self.assertAlmostEqual(all_total, Score(earned=5, possible=15, graded=False, section="summary")) - self.assertAlmostEqual(graded_total, Score(earned=5, possible=10, graded=True, section="summary")) + self.assertAlmostEqual(all_total, Score(earned=5, possible=15, graded=False, section="summary", module_id=None)) + self.assertAlmostEqual(graded_total, Score(earned=5, possible=10, graded=True, section="summary", module_id=None)) class GraderTest(unittest.TestCase): @@ -45,19 +45,19 @@ class GraderTest(unittest.TestCase): } test_gradesheet = { - 'Homework': [Score(earned=2, possible=20.0, graded=True, section='hw1'), - Score(earned=16, possible=16.0, graded=True, section='hw2')], + 'Homework': [Score(earned=2, possible=20.0, graded=True, section='hw1', module_id=None), + Score(earned=16, possible=16.0, graded=True, section='hw2', module_id=None)], # The dropped scores should be from the assignments that don't exist yet - 'Lab': [Score(earned=1, possible=2.0, graded=True, section='lab1'), # Dropped - Score(earned=1, possible=1.0, graded=True, section='lab2'), - Score(earned=1, possible=1.0, graded=True, section='lab3'), - Score(earned=5, possible=25.0, graded=True, section='lab4'), # Dropped - Score(earned=3, possible=4.0, graded=True, section='lab5'), # Dropped - Score(earned=6, possible=7.0, graded=True, section='lab6'), - Score(earned=5, possible=6.0, graded=True, section='lab7')], + 'Lab': [Score(earned=1, possible=2.0, graded=True, section='lab1', module_id=None), # Dropped + Score(earned=1, possible=1.0, graded=True, section='lab2', module_id=None), + Score(earned=1, possible=1.0, graded=True, section='lab3', module_id=None), + Score(earned=5, possible=25.0, graded=True, section='lab4', module_id=None), # Dropped + Score(earned=3, possible=4.0, graded=True, section='lab5', module_id=None), # Dropped + Score(earned=6, possible=7.0, graded=True, section='lab6', module_id=None), + Score(earned=5, possible=6.0, graded=True, section='lab7', module_id=None)], - 'Midterm': [Score(earned=50.5, possible=100, graded=True, section="Midterm Exam"), ], + 'Midterm': [Score(earned=50.5, possible=100, graded=True, section="Midterm Exam", module_id=None), ], } def test_single_section_grader(self): diff --git a/lms/djangoapps/courseware/grades.py b/lms/djangoapps/courseware/grades.py index a1444be4c8..79caf5b765 100644 --- a/lms/djangoapps/courseware/grades.py +++ b/lms/djangoapps/courseware/grades.py @@ -228,13 +228,15 @@ def _grade(student, request, course, keep_raw_scores): #We simply cannot grade a problem that is 12/0, because we might need it as a percentage graded = False - scores.append(Score(correct, total, graded, module_descriptor.display_name_with_default)) + scores.append( + Score(correct, total, graded, module_descriptor.display_name_with_default, module_descriptor.location) + ) _, graded_total = graders.aggregate_scores(scores, section_name) if keep_raw_scores: raw_scores += scores else: - graded_total = Score(0.0, 1.0, True, section_name) + graded_total = Score(0.0, 1.0, True, section_name, None) #Add the graded total to totaled_scores if graded_total.possible > 0: @@ -364,7 +366,15 @@ def _progress_summary(student, request, course): if correct is None and total is None: continue - scores.append(Score(correct, total, graded, module_descriptor.display_name_with_default)) + scores.append( + Score( + correct, + total, + graded, + module_descriptor.display_name_with_default, + module_descriptor.location + ) + ) scores.reverse() section_total, _ = graders.aggregate_scores(