From ca24d2ab400823ab3226fdc0d3f19b8789139675 Mon Sep 17 00:00:00 2001 From: John Jarvis Date: Wed, 21 Aug 2013 15:14:02 -0400 Subject: [PATCH 1/2] adding certificate info to the grade dump --- .../student/management/commands/get_grades.py | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/common/djangoapps/student/management/commands/get_grades.py b/common/djangoapps/student/management/commands/get_grades.py index f0d5b5ec5d..6fba34751b 100644 --- a/common/djangoapps/student/management/commands/get_grades.py +++ b/common/djangoapps/student/management/commands/get_grades.py @@ -1,4 +1,5 @@ from courseware import grades, courses +from certificates.models import GeneratedCertificate from django.test.client import RequestFactory from django.core.management.base import BaseCommand, CommandError import os @@ -28,6 +29,13 @@ class Command(BaseCommand): Generate a list of grades for all students that are enrolled in a course. + CSV will include the following: + - username + - email + - grade in the certificate table if it exists + - computed grade + - grade breakdown + Outputs grades to a csv file. Example: @@ -57,8 +65,7 @@ class Command(BaseCommand): course_id = options['course'] print "Fetching enrolled students for {0}".format(course_id) enrolled_students = User.objects.filter( - courseenrollment__course_id=course_id).prefetch_related( - "groups").order_by('username') + courseenrollment__course_id=course_id) factory = RequestMock() request = factory.get('/') @@ -69,6 +76,10 @@ class Command(BaseCommand): start = datetime.datetime.now() rows = [] header = None + certs = GeneratedCertificate.objects.filter(course_id=course_id) + print "Fetching certificate data" + cert_grades = { cert.user.username: cert.grade for cert in list(GeneratedCertificate.objects.filter(course_id=course_id).prefetch_related('user')) } + print "Grading students" for count, student in enumerate(enrolled_students): count += 1 if count % STATUS_INTERVAL == 0: @@ -86,10 +97,13 @@ class Command(BaseCommand): grade = grades.grade(student, request, course) if not header: header = [section['label'] for section in grade[u'section_breakdown']] - rows.append(["email", "username"] + header) + rows.append(["email", "username", "certificate-grade", "grade"] + header) percents = {section['label']: section['percent'] for section in grade[u'section_breakdown']} row_percents = [percents[label] for label in header] - rows.append([student.email, student.username] + row_percents) + if student.username in cert_grades: + rows.append([student.email, student.username, cert_grades[student.username], grade['percent']] + row_percents) + else: + rows.append([student.email, student.username, "N/A", grade['percent']] + row_percents) with open(options['output'], 'wb') as f: writer = csv.writer(f) writer.writerows(rows) From 6ba85765e7c8cb79ce03a538625d6b1aa6393374 Mon Sep 17 00:00:00 2001 From: John Jarvis Date: Wed, 21 Aug 2013 15:15:13 -0400 Subject: [PATCH 2/2] pep8 --- common/djangoapps/student/management/commands/get_grades.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/common/djangoapps/student/management/commands/get_grades.py b/common/djangoapps/student/management/commands/get_grades.py index 6fba34751b..e24fef26e3 100644 --- a/common/djangoapps/student/management/commands/get_grades.py +++ b/common/djangoapps/student/management/commands/get_grades.py @@ -76,9 +76,10 @@ class Command(BaseCommand): start = datetime.datetime.now() rows = [] header = None - certs = GeneratedCertificate.objects.filter(course_id=course_id) print "Fetching certificate data" - cert_grades = { cert.user.username: cert.grade for cert in list(GeneratedCertificate.objects.filter(course_id=course_id).prefetch_related('user')) } + cert_grades = {cert.user.username: cert.grade + for cert in list(GeneratedCertificate.objects.filter( + course_id=course_id).prefetch_related('user'))} print "Grading students" for count, student in enumerate(enrolled_students): count += 1