示例#1
0
def get_playlist_focus_data(daily_activity_logs, dt_start_utc, dt_end_utc):
    total_seconds = 0
    dict_playlist_seconds = {}

    for daily_activity_log in daily_activity_logs:
        activity_summary = daily_activity_log.activity_summary
        for hour in activity_summary.hourly_summaries:

            hourly_activity_summary = activity_summary.hourly_summaries[hour]

            # We need to filter for dates outside of our range here because we expanded our DB query
            # to make sure we got the entire client time zone date range
            if hourly_activity_summary.date < dt_start_utc or hourly_activity_summary.date > dt_end_utc:
                continue

            for video_key in hourly_activity_summary.dict_videos.keys():
                hourly_activity_summary_video_item = hourly_activity_summary.dict_videos[video_key]

                playlist_title = "Other"
                if hourly_activity_summary_video_item.playlist_titles:
                    playlist_title = hourly_activity_summary_video_item.playlist_titles[0] # Only count against the first playlist for now

                key_playlist = playlist_title.lower()
                if dict_playlist_seconds.has_key(key_playlist):
                    dict_playlist_seconds[key_playlist]["seconds"] += hourly_activity_summary_video_item.seconds_watched
                else:
                    dict_playlist_seconds[key_playlist] = {"playlist_title": playlist_title, "seconds": hourly_activity_summary_video_item.seconds_watched, "videos": {}}

                key_video = hourly_activity_summary_video_item.video_title.lower()
                if dict_playlist_seconds[key_playlist]["videos"].has_key(key_video):
                    dict_playlist_seconds[key_playlist]["videos"][key_video]["seconds"] += hourly_activity_summary_video_item.seconds_watched
                else:
                    dict_playlist_seconds[key_playlist]["videos"][key_video] = {"video_title": hourly_activity_summary_video_item.video_title, "seconds": hourly_activity_summary_video_item.seconds_watched}

                total_seconds += hourly_activity_summary_video_item.seconds_watched

    for key_playlist in dict_playlist_seconds:
        dict_playlist_seconds[key_playlist]["percentage"] = 0
        if total_seconds > 0:
            dict_playlist_seconds[key_playlist]["percentage"] = int(float(dict_playlist_seconds[key_playlist]["seconds"]) / float(total_seconds) * 100.0)

        dict_playlist_seconds[key_playlist]["time_spent"] = seconds_to_time_string(dict_playlist_seconds[key_playlist]["seconds"], False)

        tooltip_more = ""
        c_videos_tooltip = 0
        c_videos_tooltip_max = 8
        for key_video in dict_playlist_seconds[key_playlist]["videos"]:
            if c_videos_tooltip < c_videos_tooltip_max:
                video_title = dict_playlist_seconds[key_playlist]["videos"][key_video]["video_title"]
                time_spent = seconds_to_time_string(dict_playlist_seconds[key_playlist]["videos"][key_video]["seconds"], False)
                tooltip_more += "<em>%s</em><br> - %s" % (video_title, time_spent) + "<br/>"
            elif c_videos_tooltip == c_videos_tooltip_max:
                tooltip_more += "<em>...and %d more</em>" % (len(dict_playlist_seconds[key_playlist]["videos"]) - c_videos_tooltip_max)
            c_videos_tooltip += 1
        dict_playlist_seconds[key_playlist]["tooltip_more"] = tooltip_more

    return (total_seconds, dict_playlist_seconds)
示例#2
0
    def get_visible_data(self, user_exercise_graph=None):
        data = dict(
            id=self.key().id(),
            title=self.title,
            created=self.created_on,
            created_ago=timesince_ago(self.created_on),
            updated=self.updated_on,
            updated_ago=timesince_ago(self.updated_on),
            completed=self.completed_on,
            abandoned=self.abandoned,
        )

        if self.completed:
            data['completed_ago'] = timesince_ago(self.completed_on)
            td = self.completed_on - self.created_on
            completed_seconds = (td.seconds + td.days * 24 * 3600)
            data['completed_time'] = seconds_to_time_string(completed_seconds)

        data['objectives'] = [dict(
                type=obj.__class__.__name__,
                description=obj.description,
                progress=obj.progress,
                url=obj.url(),
                internal_id=obj.internal_id(),
                status=obj.get_status(user_exercise_graph=user_exercise_graph),
            ) for obj in self.objectives]

        return data
示例#3
0
 def video_time(self):
     if not self.video_point:
         return 0
     else:
         return seconds_to_time_string(self.video_point.seconds_watched,
                                       False,
                                       english=True)
def get_exercise_activity_data(user_data, bucket_list, bucket_type,
                               daily_activity_logs, dt_start_utc, dt_end_utc,
                               tz_offset):

    dict_bucket = get_empty_dict_bucket(bucket_list)

    for daily_activity_log in daily_activity_logs:
        activity_summary = daily_activity_log.activity_summary
        for hour in activity_summary.hourly_summaries:

            hourly_activity_summary = activity_summary.hourly_summaries[hour]

            # We need to filter for dates outside of our range here because we expanded our DB query
            # to make sure we got the entire client time zone date range
            if hourly_activity_summary.date < dt_start_utc or hourly_activity_summary.date > dt_end_utc:
                continue

            key = get_bucket_value(hourly_activity_summary.date, tz_offset,
                                   bucket_type)

            if not dict_bucket.has_key(
                    key) or not hourly_activity_summary.has_exercise_activity(
                    ):
                continue

            if not dict_bucket[key]:
                dict_bucket[key] = {
                    "minutes": 0,
                    "seconds": 0,
                    "points": 0,
                    "exercise_names": {}
                }

            for exercise_key in hourly_activity_summary.dict_exercises.keys():
                activity_summary_exercise_item = hourly_activity_summary.dict_exercises[
                    exercise_key]
                dict_bucket[key]["minutes"] += (
                    activity_summary_exercise_item.time_taken / 60.0)
                dict_bucket[key][
                    "seconds"] += activity_summary_exercise_item.time_taken
                dict_bucket[key][
                    "points"] += activity_summary_exercise_item.points_earned
                dict_bucket[key]["exercise_names"][
                    exercise_models.Exercise.to_display_name(
                        activity_summary_exercise_item.exercise)] = True

    for bucket in bucket_list:
        if dict_bucket[bucket]:
            dict_bucket[bucket]["time_spent"] = seconds_to_time_string(
                dict_bucket[bucket]["seconds"], False)

    add_bucket_html_summary(dict_bucket, "exercise_names", 5)

    return dict_bucket
示例#5
0
def get_exercise_focus_data(user_data, daily_activity_logs, dt_start_utc, dt_end_utc):

    total_seconds = 0
    dict_exercise_seconds = {}

    for daily_activity_log in daily_activity_logs:
        activity_summary = daily_activity_log.activity_summary
        for hour in activity_summary.hourly_summaries:

            hourly_activity_summary = activity_summary.hourly_summaries[hour]

            # We need to filter for dates outside of our range here because we expanded our DB query
            # to make sure we got the entire client time zone date range
            if hourly_activity_summary.date < dt_start_utc or hourly_activity_summary.date > dt_end_utc:
                continue

            for exercise_key in hourly_activity_summary.dict_exercises.keys():
                hourly_activity_summary_exercise_item = hourly_activity_summary.dict_exercises[exercise_key]

                exid = hourly_activity_summary_exercise_item.exercise

                key_exercise = exid.lower()
                if not dict_exercise_seconds.has_key(key_exercise):
                    dict_exercise_seconds[key_exercise] = {"exercise_title": models.Exercise.to_display_name(exid), "exid": exid, "seconds": 0, "correct": 0, "problems": 0}

                dict_exercise_seconds[key_exercise]["seconds"] += hourly_activity_summary_exercise_item.time_taken
                dict_exercise_seconds[key_exercise]["problems"] += hourly_activity_summary_exercise_item.c_problems
                dict_exercise_seconds[key_exercise]["correct"] += hourly_activity_summary_exercise_item.c_correct

                total_seconds += hourly_activity_summary_exercise_item.time_taken

    keys = dict_exercise_seconds.keys()
    for key_exercise in keys:
        percentage = 0
        if total_seconds > 0:
            percentage = int(float(dict_exercise_seconds[key_exercise]["seconds"]) / float(total_seconds) * 100.0)
        if percentage:
            dict_exercise_seconds[key_exercise]["percentage"] = percentage
            dict_exercise_seconds[key_exercise]["time_spent"] = seconds_to_time_string(dict_exercise_seconds[key_exercise]["seconds"], False)

            correct = dict_exercise_seconds[key_exercise]["correct"]
            dict_exercise_seconds[key_exercise]["s_correct_problems"] = "%d correct problem%s without a hint" % (correct, pluralize(correct))

            problems = dict_exercise_seconds[key_exercise]["problems"]
            dict_exercise_seconds[key_exercise]["s_problems"] = "%d total problem%s" % (problems, pluralize(problems))

            dict_exercise_seconds[key_exercise]["proficient"] = user_data.is_proficient_at(key_exercise)

        else:
            # Don't bother showing 0 percentage exercises
            del dict_exercise_seconds[key_exercise]

    return (total_seconds, dict_exercise_seconds)
示例#6
0
def get_exercise_activity_data(
    user_data, bucket_list, bucket_type, daily_activity_logs, dt_start_utc, dt_end_utc, tz_offset
):

    dict_bucket = get_empty_dict_bucket(bucket_list)

    for daily_activity_log in daily_activity_logs:
        activity_summary = daily_activity_log.activity_summary
        for hour in activity_summary.hourly_summaries:

            hourly_activity_summary = activity_summary.hourly_summaries[hour]

            # We need to filter for dates outside of our range here because we expanded our DB query
            # to make sure we got the entire client time zone date range
            if hourly_activity_summary.date < dt_start_utc or hourly_activity_summary.date > dt_end_utc:
                continue

            key = get_bucket_value(hourly_activity_summary.date, tz_offset, bucket_type)

            if not dict_bucket.has_key(key) or not hourly_activity_summary.has_exercise_activity():
                continue

            if not dict_bucket[key]:
                dict_bucket[key] = {"minutes": 0, "seconds": 0, "points": 0, "exercise_names": {}}

            for exercise_key in hourly_activity_summary.dict_exercises.keys():
                activity_summary_exercise_item = hourly_activity_summary.dict_exercises[exercise_key]
                dict_bucket[key]["minutes"] += activity_summary_exercise_item.time_taken / 60.0
                dict_bucket[key]["seconds"] += activity_summary_exercise_item.time_taken
                dict_bucket[key]["points"] += activity_summary_exercise_item.points_earned
                dict_bucket[key]["exercise_names"][
                    models.Exercise.to_display_name(activity_summary_exercise_item.exercise)
                ] = True

    for bucket in bucket_list:
        if dict_bucket[bucket]:
            dict_bucket[bucket]["time_spent"] = seconds_to_time_string(dict_bucket[bucket]["seconds"], False)

    add_bucket_html_summary(dict_bucket, "exercise_names", 5)

    return dict_bucket
 def video_time(self):
     if not self.video_point:
         return 0
     else:
         return seconds_to_time_string(self.video_point.seconds_watched, False)
 def extended_description(self):
     return ("Bekijk %s van een video" %
             templatefilters.seconds_to_time_string(self.seconds_required))
 def time_watched(self):
     return seconds_to_time_string(self.seconds_watched, False)
 def exercise_time(self):
     return seconds_to_time_string(self.time_taken, False)
示例#11
0
 def completed_time(self):
     td = self.completed_on - self.created_on
     s = td.seconds + td.days * 24 * 3600
     if td.microseconds > 0:
         s += 1
     return seconds_to_time_string(s)
示例#12
0
 def extended_description(self):
     return ("Blijf lid van iktel.nl voor %s" %
             templatefilters.seconds_to_time_string(self.seconds_required))
示例#13
0
 def extended_description(self):
     return u"ענו נכון על %s תרגילים וצפו ב%s של סרטונים ב%s" % (self.problems_required, seconds_to_time_string(self.video_seconds_required), seconds_to_time_string(self.seconds_allotted))
示例#14
0
 def extended_description(self):
     return "Correctly answer %s problems and watch %s of video in %s" % (
         self.problems_required,
         templatefilters.seconds_to_time_string(
             self.video_seconds_required),
         templatefilters.seconds_to_time_string(self.seconds_allotted))
示例#15
0
 def time_watched(self):
     return seconds_to_time_string(self.seconds_watched, False)
示例#16
0
 def extended_description(self):
     return u"היו חברים באקדמיית קהאן למשך %s" % seconds_to_time_string(self.seconds_required)
 def extended_description(self):
     return ("Watch %s of video in a single topic" %
             seconds_to_time_string(self.seconds_required))
示例#18
0
 def extended_description(self):
     return ("Bekijk %s van een video" %
             templatefilters.seconds_to_time_string(self.seconds_required))
 def extended_description(self):
     return "Watch %s of video" % seconds_to_time_string(
         self.seconds_required)
示例#20
0
 def extended_description(self):
     return u"צפו ב-%s של סרטונים" % seconds_to_time_string(self.seconds_required)
示例#21
0
 def extended_description(self):
     return u"צפו ב-%s סרטונים בנושא אחד" % seconds_to_time_string(
         self.seconds_required)
示例#22
0
 def extended_description(self):
     return "Beantwoord %s problemen correct en bekijk %s van een video (bestaande uit %s)" % (
         self.problems_required,
         templatefilters.seconds_to_time_string(
             self.video_seconds_required),
         templatefilters.seconds_to_time_string(self.seconds_allotted))
 def extended_description(self):
     return "Correctly answer %s problems and watch %s of video in %s" % (
         self.problems_required,
         templatefilters.seconds_to_time_string(
             self.video_seconds_required),
         templatefilters.seconds_to_time_string(self.seconds_allotted))
示例#24
0
 def completed_time(self):
     td = self.completed_on - self.created_on
     s = td.seconds + td.days * 24 * 3600
     if td.microseconds > 0:
         s += 1
     return templatefilters.seconds_to_time_string(s)
示例#25
0
 def extended_description(self):
     return "Watch %s of video" % seconds_to_time_string(self.seconds_required)
示例#26
0
 def exercise_time(self):
     return seconds_to_time_string(self.time_taken, False, english=True)
示例#27
0
 def extended_description(self):
     return "Beantwoord %s problemen correct en bekijk %s van een video (bestaande uit %s)" % (
         self.problems_required,
         templatefilters.seconds_to_time_string(
             self.video_seconds_required),
         templatefilters.seconds_to_time_string(self.seconds_allotted))
 def extended_description(self):
     return ("Watch %s of video" %
             templatefilters.seconds_to_time_string(self.seconds_required))
示例#29
0
 def extended_description(self):
     return u"היו חברים באקדמיית קהאן למשך %s" % seconds_to_time_string(
         self.seconds_required)
 def extended_description(self):
     return ("Watch %s of video" %
             templatefilters.seconds_to_time_string(self.seconds_required))
示例#31
0
 def extended_description(self):
     return "Remain a member of the Khan Academy for %s" % seconds_to_time_string(self.seconds_required)
 def extended_description(self):
     return ("Watch %s of video in a single topic" %
             seconds_to_time_string(self.seconds_required))
示例#33
0
 def extended_description(self):
     return ("Remain a member of the Khan Academy for %s" %
             seconds_to_time_string(self.seconds_required))
示例#34
0
 def extended_description(self):
     return ("Blijf lid van iktel.nl voor %s" %
             templatefilters.seconds_to_time_string(self.seconds_required))
示例#35
0
 def extended_description(self):
     return u"ענו נכון על %s תרגילים וצפו ב%s של סרטונים ב%s" % (
         self.problems_required,
         seconds_to_time_string(self.video_seconds_required),
         seconds_to_time_string(self.seconds_allotted))