Exemple #1
0
class CourseCertificate(AbstractCertificate):
    """
    Configuration for Course Certificates.
    """
    course_id = models.CharField(max_length=255,
                                 validators=[validate_course_key])
    certificate_type = models.CharField(
        max_length=255,
        choices=_choices(
            constants.CertificateType.HONOR,
            constants.CertificateType.PROFESSIONAL,
            constants.CertificateType.VERIFIED,
            constants.CertificateType.NO_ID_PROFESSIONAL,
        ))
    user_credentials = GenericRelation(
        UserCredential,
        content_type_field='credential_content_type',
        object_id_field='credential_id',
        related_query_name='course_credentials')

    class Meta(object):
        unique_together = (('course_id', 'certificate_type', 'site'), )
        verbose_name = "Course certificate configuration"

    @cached_property
    def course_key(self):
        return CourseKey.from_string(self.course_id)
Exemple #2
0
class CourseCertificate(AbstractCertificate):
    """
    Configuration for Course Certificates.

    .. no_pii: This model has no PII.
    """

    course_id = models.CharField(max_length=255, validators=[validate_course_key])
    course_run = models.OneToOneField(CourseRun, null=True, on_delete=models.PROTECT)
    certificate_type = models.CharField(
        max_length=255,
        choices=_choices(
            constants.CertificateType.HONOR,
            constants.CertificateType.PROFESSIONAL,
            constants.CertificateType.VERIFIED,
            constants.CertificateType.NO_ID_PROFESSIONAL,
        ),
    )
    user_credentials = GenericRelation(
        UserCredential,
        content_type_field="credential_content_type",
        object_id_field="credential_id",
        related_query_name="course_credentials",
    )

    class Meta:
        unique_together = (("course_id", "certificate_type", "site"),)
        verbose_name = "Course certificate configuration"

    @cached_property
    def course_key(self):
        return CourseKey.from_string(self.course_id)
Exemple #3
0
class UserCredential(TimeStampedModel):
    """
    Credentials issued to a learner.

    .. pii: Stores username for a user.
        pii values: username
    .. pii_types: username
    .. pii_retirement: retained
    """

    AWARDED, REVOKED = (
        "awarded",
        "revoked",
    )

    STATUSES_CHOICES = (
        (AWARDED, _("awarded")),
        (REVOKED, _("revoked")),
    )

    credential_content_type = models.ForeignKey(
        ContentType,
        limit_choices_to={
            "model__in": ("coursecertificate", "programcertificate")
        },
        on_delete=models.CASCADE,
    )
    credential_id = models.PositiveIntegerField()
    credential = GenericForeignKey("credential_content_type", "credential_id")

    username = models.CharField(max_length=255, db_index=True)
    status = models.CharField(
        max_length=255,
        choices=_choices(constants.UserCredentialStatus.AWARDED,
                         constants.UserCredentialStatus.REVOKED),
        default=constants.UserCredentialStatus.AWARDED,
    )
    download_url = models.CharField(
        max_length=255,
        blank=True,
        null=True,
        help_text=_("URL at which the credential can be downloaded"))
    uuid = models.UUIDField(default=uuid.uuid4, editable=False, unique=True)

    class Meta:
        unique_together = (("username", "credential_content_type",
                            "credential_id"), )

    def get_absolute_url(self):
        return reverse("credentials:render", kwargs={"uuid": self.uuid.hex})

    def revoke(self):
        """ Sets the status to revoked, and saves this instance. """
        self.status = UserCredential.REVOKED
        self.save()
Exemple #4
0
class UserCredential(TimeStampedModel):
    """
    Credentials issued to a learner.
    """
    AWARDED, REVOKED = (
        'awarded',
        'revoked',
    )

    STATUSES_CHOICES = (
        (AWARDED, _('awarded')),
        (REVOKED, _('revoked')),
    )

    credential_content_type = models.ForeignKey(ContentType,
                                                limit_choices_to={
                                                    'model__in':
                                                    ('coursecertificate',
                                                     'programcertificate')
                                                },
                                                on_delete=models.CASCADE)
    credential_id = models.PositiveIntegerField()
    credential = GenericForeignKey('credential_content_type', 'credential_id')

    username = models.CharField(max_length=255, db_index=True)
    status = models.CharField(max_length=255,
                              choices=_choices(
                                  constants.UserCredentialStatus.AWARDED,
                                  constants.UserCredentialStatus.REVOKED),
                              default=constants.UserCredentialStatus.AWARDED)
    download_url = models.CharField(
        max_length=255,
        blank=True,
        null=True,
        help_text=_('URL at which the credential can be downloaded'))
    uuid = models.UUIDField(default=uuid.uuid4, editable=False, unique=True)

    class Meta(object):
        unique_together = (('username', 'credential_content_type',
                            'credential_id'), )

    def get_absolute_url(self):
        return reverse('credentials:render', kwargs={'uuid': self.uuid.hex})

    def revoke(self):
        """ Sets the status to revoked, and saves this instance. """
        self.status = UserCredential.REVOKED
        self.save()