Exemplo n.º 1
0
def get_playlist_focus_data(user, 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"] = util.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 = util.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)
Exemplo n.º 2
0
def get_exercise_activity_data(user, 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"] = util.seconds_to_time_string(
                dict_bucket[bucket]["seconds"], False)

    add_bucket_html_summary(dict_bucket, "exercise_names", 5)

    return dict_bucket
Exemplo n.º 3
0
def get_exercise_focus_data(user, 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"] = util.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, user)

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

    return (total_seconds, dict_exercise_seconds)
Exemplo n.º 4
0
def get_exercise_activity_data(user, 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"] = util.seconds_to_time_string(dict_bucket[bucket]["seconds"], False)

    add_bucket_html_summary(dict_bucket, "exercise_names", 5)

    return dict_bucket
Exemplo n.º 5
0
 def video_time(self):
     if not self.video_point:
         return 0
     else:
         return util.seconds_to_time_string(self.video_point.seconds_watched, False)
Exemplo n.º 6
0
 def exercise_time(self):
     return util.seconds_to_time_string(self.time_taken, False)
Exemplo n.º 7
0
 def time_watched(self):
     return util.seconds_to_time_string(self.seconds_watched, False)
Exemplo n.º 8
0
def get_exercise_focus_data(user, 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 = 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"] = util.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, user)

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

    return (total_seconds, dict_exercise_seconds)
Exemplo n.º 9
0
def get_playlist_focus_data(user, 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"] = int(
            float(dict_playlist_seconds[key_playlist]["seconds"]) /
            float(total_seconds) * 100.0)
        dict_playlist_seconds[key_playlist][
            "time_spent"] = util.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 = util.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)
Exemplo n.º 10
0
 def extended_description(self):
     return "Correctly answer %s problems and watch %s of video in %s" % (self.problems_required, util.seconds_to_time_string(self.video_seconds_required), util.seconds_to_time_string(self.seconds_allotted))
Exemplo n.º 11
0
 def extended_description(self):
     return "Remain an active member of the Khan Academy for %s" % util.seconds_to_time_string(
         self.seconds_required)
Exemplo n.º 12
0
 def video_time(self):
     if not self.video_point:
         return 0
     else:
         return util.seconds_to_time_string(
             self.video_point.seconds_watched, False)
Exemplo n.º 13
0
 def exercise_time(self):
     return util.seconds_to_time_string(self.time_taken, False)
Exemplo n.º 14
0
def timesince_ago_short(content):
    if not content:
        return ""
    return append_ago(util.seconds_to_time_string(util.seconds_since(content)))
Exemplo n.º 15
0
 def extended_description(self):
     return "Remain an active member of the Khan Academy for %s" % util.seconds_to_time_string(self.seconds_required)
Exemplo n.º 16
0
def timesince_ago_short(content):
    if not content:
        return ""
    return append_ago(util.seconds_to_time_string(util.seconds_since(content)))
Exemplo n.º 17
0
 def extended_description(self):
     return "Watch %s of video in a single playlist" % util.seconds_to_time_string(self.seconds_required)