Commit 0820e752 by Martyn James Committed by Jonathan Piacenti

Addresses problem when too many excluded users were being excluded

parent e6384b92
......@@ -30,7 +30,7 @@ class StudentGradebook(TimeStampedModel):
unique_together = (('user', 'course_id'),)
@classmethod
def generate_leaderboard(cls, course_key, user_id=None, count=3, exclude_users=None):
def generate_leaderboard(cls, course_key, user_id=None, count=3, exclude_users=[]):
"""
Assembles a data set representing the Top N users, by grade, for a given course.
Optionally provide a user_id to include user-specific info. For example, you
......@@ -62,25 +62,19 @@ class StudentGradebook(TimeStampedModel):
data['course_count'] = 0
data['queryset'] = []
total_user_count = CourseEnrollment.users_enrolled_in(course_key).count()
if total_user_count:
enrolled_users_not_excluded = CourseEnrollment.users_enrolled_in(course_key).exclude(id__in=exclude_users)
total_user_count = enrolled_users_not_excluded.count()
if total_user_count:
# Generate the base data set we're going to work with
queryset = StudentGradebook.objects.select_related('user')\
.filter(course_id__exact=course_key, user__is_active=True)
gradebook_user_count = len(queryset)
if gradebook_user_count:
# Remove any users who should not be considered for the statistics
if exclude_users:
total_user_count = total_user_count - len(exclude_users)
queryset = queryset.exclude(user__in=exclude_users)
.filter(course_id__exact=course_key, user__is_active=True, user__in=enrolled_users_not_excluded)
gradebook_user_count = len(queryset)
if gradebook_user_count:
# Calculate the class average
course_avg = queryset.aggregate(Avg('grade'))['grade__avg']
if course_avg is not None and gradebook_user_count < total_user_count:
if course_avg is not None:
# Take into account any ungraded students (assumes zeros for grades...)
course_avg = course_avg / total_user_count * gradebook_user_count
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment