Commit 83b79fb8 by John Jarvis Committed by Carlos Andrés Rocha

Adding new certificate state for "notpassing"

parent c6bfb67b
...@@ -45,6 +45,7 @@ class CertificateStatuses(object): ...@@ -45,6 +45,7 @@ class CertificateStatuses(object):
deleting = 'deleting' deleting = 'deleting'
deleted = 'deleted' deleted = 'deleted'
downloadable = 'downloadable' downloadable = 'downloadable'
notpassing = 'notpassing'
error = 'error' error = 'error'
......
...@@ -82,7 +82,12 @@ class XQueueCertInterface(object): ...@@ -82,7 +82,12 @@ class XQueueCertInterface(object):
the certificate status to 'regenerating'. the certificate status to 'regenerating'.
Certificate must be in the 'error' or 'downloadable' state Certificate must be in the 'error' or 'downloadable' state
and the student must have a passing grade.
If the student has a passing grade a certificate
request will be put on the queue
If the student is not passing his state will change
to status.notpassing
otherwise it will return the current state otherwise it will return the current state
...@@ -98,16 +103,16 @@ class XQueueCertInterface(object): ...@@ -98,16 +103,16 @@ class XQueueCertInterface(object):
course = courses.get_course_by_id(course_id) course = courses.get_course_by_id(course_id)
grade = grades.grade(student, self.request, course) grade = grades.grade(student, self.request, course)
if grade['grade'] is not None: profile = UserProfile.objects.get(user=student)
try:
cert = GeneratedCertificate.objects.get(
user=student, course_id=course_id)
except GeneratedCertificate.DoesNotExist:
logger.critical("Attempting to regenerate a certificate"
"for a user that doesn't have one")
raise
profile = UserProfile.objects.get(user=student) if grade['grade'] is not None:
try:
cert = GeneratedCertificate.objects.get(
user=student, course_id=course_id)
except GeneratedCertificate.DoesNotExist:
logger.warning("Attempting to regenerate a certificate"
"for a user that doesn't have one")
raise
cert.status = status.regenerating cert.status = status.regenerating
cert.name = profile.name cert.name = profile.name
...@@ -125,6 +130,11 @@ class XQueueCertInterface(object): ...@@ -125,6 +130,11 @@ class XQueueCertInterface(object):
self._send_to_xqueue(contents, key) self._send_to_xqueue(contents, key)
cert.save() cert.save()
else:
cert.status = status.notpassing
cert.name = profile.name
cert.save()
return cert_status return cert_status
def del_cert(self, student, course_id): def del_cert(self, student, course_id):
...@@ -182,14 +192,20 @@ class XQueueCertInterface(object): ...@@ -182,14 +192,20 @@ class XQueueCertInterface(object):
Will change the certificate status to 'deleting'. Will change the certificate status to 'deleting'.
Certificate must be in the 'unavailable', 'error', Certificate must be in the 'unavailable', 'error',
or 'deleted' state and the student must have or 'deleted' state.
a passing grade.
otherwise it will return the current state If a student has a passing grade a request will made
for a new cert
If a student does not have a passing grade the status
will change to status.notpassing
Returns the student's status
""" """
VALID_STATUSES = [status.unavailable, status.deleted, status.error] VALID_STATUSES = [status.unavailable, status.deleted, status.error,
status.notpassing]
cert_status = certificate_status_for_student( cert_status = certificate_status_for_student(
student, course_id)['status'] student, course_id)['status']
...@@ -198,14 +214,14 @@ class XQueueCertInterface(object): ...@@ -198,14 +214,14 @@ class XQueueCertInterface(object):
# grade the student # grade the student
course = courses.get_course_by_id(course_id) course = courses.get_course_by_id(course_id)
grade = grades.grade(student, self.request, course) grade = grades.grade(student, self.request, course)
profile = UserProfile.objects.get(user=student)
cert, created = GeneratedCertificate.objects.get_or_create(
user=student, course_id=course_id)
if grade['grade'] is not None: if grade['grade'] is not None:
cert_status = status.generating cert_status = status.generating
cert, created = GeneratedCertificate.objects.get_or_create(
user=student, course_id=course_id)
profile = UserProfile.objects.get(user=student)
key = make_hashkey(random.random()) key = make_hashkey(random.random())
cert.status = cert_status cert.status = cert_status
cert.grade = grade['percent'] cert.grade = grade['percent']
cert.user = student cert.user = student
...@@ -222,13 +238,19 @@ class XQueueCertInterface(object): ...@@ -222,13 +238,19 @@ class XQueueCertInterface(object):
self._send_to_xqueue(contents, key) self._send_to_xqueue(contents, key)
cert.save() cert.save()
else:
cert_status = status.notpassing
cert.status = cert_status
cert.user = student
cert.course_id = course_id
cert.name = profile.name
cert.save()
return cert_status return cert_status
def _send_to_xqueue(self, contents, key): def _send_to_xqueue(self, contents, key):
# TODO - need to read queue name from settings
xheader = make_xheader( xheader = make_xheader(
'http://{0}/update_certificate?{1}'.format( 'http://{0}/update_certificate?{1}'.format(
settings.SITE_NAME, key), key, 'test-pull') settings.SITE_NAME, key), key, 'test-pull')
......
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