Ejemplo n.º 1
0
class ContentSummaryLog(BaseLogModel):
    """
    This model provides a summary of all interactions a user has had with a content item.
    """
    # Morango syncing settings
    morango_model_name = "contentsummarylog"

    user = models.ForeignKey(FacilityUser)
    content_id = UUIDField(db_index=True)
    channel_id = UUIDField()
    start_timestamp = DateTimeTzField()
    end_timestamp = DateTimeTzField(blank=True, null=True)
    completion_timestamp = DateTimeTzField(blank=True, null=True)
    time_spent = models.FloatField(help_text="(in seconds)",
                                   default=0.0,
                                   validators=[MinValueValidator(0)])
    progress = models.FloatField(
        default=0, validators=[MinValueValidator(0),
                               MaxValueValidator(1.01)])
    kind = models.CharField(max_length=200)
    extra_fields = JSONField(default={}, blank=True)

    def calculate_source_id(self):
        return self.content_id

    def save(self, *args, **kwargs):
        if self.progress < 0 or self.progress > 1.01:
            raise ValidationError(
                "Content summary progress out of range (0-1)")

        super(ContentSummaryLog, self).save(*args, **kwargs)
Ejemplo n.º 2
0
class ContentRatingLog(BaseLogModel):
    """
    This model provides a record of user feedback on a content item.
    """
    user = models.ForeignKey(FacilityUser, blank=True, null=True)
    content_id = UUIDField(db_index=True)
    channel_id = UUIDField()
    quality = models.IntegerField(blank=True, null=True, validators=[MinValueValidator(1), MaxValueValidator(5)])
    ease = models.IntegerField(blank=True, null=True, validators=[MinValueValidator(1), MaxValueValidator(5)])
    learning = models.IntegerField(blank=True, null=True, validators=[MinValueValidator(1), MaxValueValidator(5)])
    feedback = models.TextField(blank=True)
Ejemplo n.º 3
0
class ContentSessionLog(BaseLogModel):
    """
    This model provides a record of interactions with a content item within a single visit to that content page.
    """
    user = models.ForeignKey(FacilityUser, blank=True, null=True)
    content_id = UUIDField(db_index=True)
    channel_id = UUIDField()
    start_timestamp = models.DateTimeField()
    end_timestamp = models.DateTimeField(blank=True, null=True)
    time_spent = models.FloatField(help_text="(in seconds)", default=0.0, validators=[MinValueValidator(0)])
    progress = models.FloatField(default=0, validators=[MinValueValidator(0)])
    kind = models.CharField(max_length=200)
    extra_fields = models.TextField(default="{}")
Ejemplo n.º 4
0
class ContentSummaryLog(BaseLogModel):
    """
    This model provides a summary of all interactions a user has had with a content item.
    """
    user = models.ForeignKey(FacilityUser)
    content_id = UUIDField(db_index=True)
    channel_id = UUIDField()
    start_timestamp = models.DateTimeField()
    end_timestamp = models.DateTimeField(blank=True, null=True)
    completion_timestamp = models.DateTimeField(blank=True, null=True)
    time_spent = models.FloatField(help_text="(in seconds)", default=0.0, validators=[MinValueValidator(0)])
    progress = models.FloatField(default=0, validators=[MinValueValidator(0), MaxValueValidator(1)])
    kind = models.CharField(max_length=200)
    extra_fields = models.TextField(default="{}")
Ejemplo n.º 5
0
class ReportsDataOffline(models.Model):
    """
    The top layer of the contentDB schema, defines the most common properties that are shared across all different contents.
    Things it can represent are, for example, video, exercise, audio or document...
    """
    class_id = UUIDField(db_index=True)
    student_id = UUIDField(db_index=True)
    number_of_attempt = models.IntegerField()
    course_id = UUIDField(db_index=True)
    unit_id = UUIDField(db_index=True)
    lesson_id = UUIDField(db_index=True)
    collection_id = UUIDField(db_index=True)
    collection_type = models.CharField(max_length=50, null=True, blank=True)
    content_id = UUIDField(db_index=True)  #Collection/Assesment Id
    content_type = models.CharField(max_length=50, null=True, blank=True)
    time_spent = models.FloatField(help_text="(in seconds)",
                                   default=0.0,
                                   validators=[MinValueValidator(0)])
    reaction = models.IntegerField(null=True, blank=True)
    student_response = JSONField(default=[], blank=True)
    attended = models.BooleanField(default=False)
    score = models.BooleanField(default=False)
    created_by = models.ForeignKey(FacilityUser,
                                   related_name='created_user',
                                   blank=False,
                                   null=False)
    created_date = DateTimeTzField(default=local_now, editable=False)
    modified_by = models.ForeignKey(FacilityUser, blank=False, null=False)
    modified_date = DateTimeTzField(default=local_now, editable=False)
Ejemplo n.º 6
0
class ExamAttemptLog(BaseAttemptLog):
    """
    This model provides a summary of a user's engagement within a particular interaction with an
    item/question in an exam
    """

    morango_model_name = 'examattemptlog'

    examlog = models.ForeignKey(ExamLog, related_name="attemptlogs", blank=False, null=False)
    # We have no session logs associated with ExamLogs, so we need to record the channel and content
    # ids here
    content_id = UUIDField()
    channel_id = UUIDField()

    def infer_dataset(self, *args, **kwargs):
        return self.examlog.dataset

    def calculate_partition(self):
        return self.dataset_id
Ejemplo n.º 7
0
class ContentSessionLog(BaseLogModel):
    """
    This model provides a record of interactions with a content item within a single visit to that content page.
    """
    # Morango syncing settings
    morango_model_name = "contentsessionlog"

    user = models.ForeignKey(FacilityUser, blank=True, null=True)
    content_id = UUIDField(db_index=True)
    channel_id = UUIDField()
    start_timestamp = DateTimeTzField()
    end_timestamp = DateTimeTzField(blank=True, null=True)
    time_spent = models.FloatField(help_text="(in seconds)",
                                   default=0.0,
                                   validators=[MinValueValidator(0)])
    progress = models.FloatField(default=0, validators=[MinValueValidator(0)])
    kind = models.CharField(max_length=200)
    extra_fields = JSONField(default={}, blank=True)

    def save(self, *args, **kwargs):
        if self.progress < 0:
            raise ValidationError("Progress out of range (<0)")

        super(ContentSessionLog, self).save(*args, **kwargs)