def focus_graph_context(user_data_student, dt_start_utc, dt_end_utc): if not user_data_student: return {} # We have to expand by 1 day on each side to be sure we grab proper 'day' in client's time zone, # then we filter for proper time zone daily boundaries dt_start_utc_expanded = dt_start_utc - datetime.timedelta(days=1) dt_end_utc_expanded = dt_end_utc + datetime.timedelta(days=1) daily_activity_logs = models.DailyActivityLog.get_for_user_data_between_dts(user_data_student, dt_start_utc_expanded, dt_end_utc_expanded).fetch(1000) daily_activity_logs = activity_summary.fill_realtime_recent_daily_activity_summaries(daily_activity_logs, user_data_student, dt_end_utc_expanded) playlist_focus_data = get_playlist_focus_data(daily_activity_logs, dt_start_utc, dt_end_utc) exercise_focus_data = get_exercise_focus_data(user_data_student, daily_activity_logs, dt_start_utc, dt_end_utc) total_playlist_seconds = playlist_focus_data[0] dict_playlist_seconds = playlist_focus_data[1] total_exercise_seconds = exercise_focus_data[0] dict_exercise_seconds = exercise_focus_data[1] return { "student_email": user_data_student.email, "total_playlist_seconds": total_playlist_seconds, "dict_playlist_seconds": dict_playlist_seconds, "total_exercise_seconds": total_exercise_seconds, "dict_exercise_seconds": dict_exercise_seconds, "is_graph_empty": (total_playlist_seconds + total_exercise_seconds <= 0), }
def activity_graph_context(user_data_student, dt_start_utc, dt_end_utc, tz_offset): if not user_data_student: return {} # We have to expand by 1 day on each side to be sure we grab proper 'day' in client's time zone, # then we filter for proper time zone daily boundaries dt_start_utc_expanded = dt_start_utc - datetime.timedelta(days=1) dt_end_utc_expanded = dt_end_utc + datetime.timedelta(days=1) daily_activity_logs = models.DailyActivityLog.get_for_user_data_between_dts(user_data_student, dt_start_utc_expanded, dt_end_utc_expanded).fetch(1000) daily_activity_logs = activity_summary.fill_realtime_recent_daily_activity_summaries(daily_activity_logs, user_data_student, dt_end_utc_expanded) bucket_type = get_bucket_type(dt_start_utc, dt_end_utc) bucket_list = get_bucket_list(dt_start_utc, dt_end_utc, tz_offset, bucket_type) dict_topic_buckets = get_topic_activity_data(user_data_student, bucket_list, bucket_type, daily_activity_logs, dt_start_utc, dt_end_utc, tz_offset) dict_exercise_buckets = get_exercise_activity_data(user_data_student, bucket_list, bucket_type, daily_activity_logs, dt_start_utc, dt_end_utc, tz_offset) dict_badge_buckets = get_badge_activity_data(user_data_student, bucket_list, bucket_type, dt_start_utc, dt_end_utc, tz_offset) dict_proficiency_buckets = get_proficiency_activity_data(user_data_student, bucket_list, bucket_type, dt_start_utc, dt_end_utc, tz_offset) dict_points_buckets = get_points_activity_data(bucket_list, dict_topic_buckets, dict_exercise_buckets, dict_badge_buckets) map_scatter_y_values(dict_badge_buckets, dict_topic_buckets, dict_exercise_buckets) map_scatter_y_values(dict_proficiency_buckets, dict_topic_buckets, dict_exercise_buckets) has_activity = False for bucket in bucket_list: if (has_activity_type(dict_topic_buckets, bucket, "minutes") or has_activity_type(dict_exercise_buckets, bucket, "minutes") or has_activity_type(dict_badge_buckets, bucket, "badge_category")): has_activity = True break graph_title = "" if bucket_type == ActivityBucketType.HOUR: graph_title = str(get_bucket_value(dt_start_utc, tz_offset, ActivityBucketType.DAY)) return { "context": { "is_graph_empty": not has_activity, "bucket_list": bucket_list, "enable_drill_down": (bucket_type != ActivityBucketType.HOUR), "dict_topic_buckets": dict_topic_buckets, "dict_exercise_buckets": dict_exercise_buckets, "dict_badge_buckets": dict_badge_buckets, "dict_proficiency_buckets": dict_proficiency_buckets, "dict_points_buckets": dict_points_buckets, "student_email": user_data_student.email, "profile_root": user_data_student.profile_root, "tz_offset": tz_offset, "graph_title": graph_title, }, }