From ec04b0cb139814df6febc8abc2fd09996596e646 Mon Sep 17 00:00:00 2001 From: Bridger Maxwell Date: Tue, 7 Aug 2012 16:16:31 -0400 Subject: [PATCH] Changed yield_module_descendents to be stack-based, so it plays nicer with the profiler. --- lms/djangoapps/courseware/grades.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/lms/djangoapps/courseware/grades.py b/lms/djangoapps/courseware/grades.py index 737e4245e0..3be3f954f9 100644 --- a/lms/djangoapps/courseware/grades.py +++ b/lms/djangoapps/courseware/grades.py @@ -12,10 +12,12 @@ from models import StudentModule log = logging.getLogger("mitx.courseware") def yield_module_descendents(module): - for child in module.get_display_items(): - yield child - for module in yield_module_descendents(child): - yield module + stack = module.get_display_items() + + while len(stack) > 0: + next_module = stack.pop() + stack.extend( next_module.get_display_items() ) + yield next_module def grade(student, request, course, student_module_cache=None): """