Adding new certificate state for "notpassing"
This commit is contained in:
committed by
Carlos Andrés Rocha
parent
c6bfb67b1a
commit
83b79fb87e
@@ -45,6 +45,7 @@ class CertificateStatuses(object):
|
||||
deleting = 'deleting'
|
||||
deleted = 'deleted'
|
||||
downloadable = 'downloadable'
|
||||
notpassing = 'notpassing'
|
||||
error = 'error'
|
||||
|
||||
|
||||
|
||||
@@ -82,7 +82,12 @@ class XQueueCertInterface(object):
|
||||
the certificate status to 'regenerating'.
|
||||
|
||||
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
|
||||
|
||||
@@ -98,16 +103,16 @@ class XQueueCertInterface(object):
|
||||
course = courses.get_course_by_id(course_id)
|
||||
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)
|
||||
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
|
||||
if grade['grade'] is not None:
|
||||
|
||||
cert.status = status.regenerating
|
||||
cert.name = profile.name
|
||||
@@ -125,6 +130,11 @@ class XQueueCertInterface(object):
|
||||
self._send_to_xqueue(contents, key)
|
||||
cert.save()
|
||||
|
||||
else:
|
||||
cert.status = status.notpassing
|
||||
cert.name = profile.name
|
||||
cert.save()
|
||||
|
||||
return cert_status
|
||||
|
||||
def del_cert(self, student, course_id):
|
||||
@@ -182,14 +192,20 @@ class XQueueCertInterface(object):
|
||||
Will change the certificate status to 'deleting'.
|
||||
|
||||
Certificate must be in the 'unavailable', 'error',
|
||||
or 'deleted' state and the student must have
|
||||
a passing grade.
|
||||
or 'deleted' state.
|
||||
|
||||
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(
|
||||
student, course_id)['status']
|
||||
@@ -198,14 +214,14 @@ class XQueueCertInterface(object):
|
||||
# grade the student
|
||||
course = courses.get_course_by_id(course_id)
|
||||
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:
|
||||
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())
|
||||
|
||||
cert.status = cert_status
|
||||
cert.grade = grade['percent']
|
||||
cert.user = student
|
||||
@@ -222,13 +238,19 @@ class XQueueCertInterface(object):
|
||||
|
||||
self._send_to_xqueue(contents, key)
|
||||
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
|
||||
|
||||
def _send_to_xqueue(self, contents, key):
|
||||
|
||||
# TODO - need to read queue name from settings
|
||||
|
||||
xheader = make_xheader(
|
||||
'http://{0}/update_certificate?{1}'.format(
|
||||
settings.SITE_NAME, key), key, 'test-pull')
|
||||
|
||||
Reference in New Issue
Block a user