| admin_routes.py |
format_hhmmss |
|
6 |
6 |
0 |
|
0% |
| admin_routes.py |
_collect_downloaded_videos |
|
50 |
50 |
0 |
|
0% |
| admin_routes.py |
_segment_frame_debug |
|
52 |
52 |
0 |
|
0% |
| admin_routes.py |
_wrap_segment_result |
|
13 |
13 |
0 |
|
0% |
| admin_routes.py |
admin_page |
|
1 |
1 |
0 |
|
0% |
| admin_routes.py |
verify_admin_access |
|
4 |
4 |
0 |
|
0% |
| admin_routes.py |
api_admin_list_experts |
|
1 |
1 |
0 |
|
0% |
| admin_routes.py |
api_admin_create_expert |
|
12 |
6 |
0 |
|
50% |
| admin_routes.py |
api_admin_update_expert |
|
16 |
16 |
0 |
|
0% |
| admin_routes.py |
api_admin_deactivate_expert |
|
4 |
4 |
0 |
|
0% |
| admin_routes.py |
api_admin_delete_expert |
|
7 |
3 |
0 |
|
57% |
| admin_routes.py |
api_admin_delete_child |
|
4 |
0 |
0 |
|
100% |
| admin_routes.py |
api_admin_list_video_assignments |
|
10 |
10 |
0 |
|
0% |
| admin_routes.py |
api_admin_set_video_assignment |
|
19 |
19 |
0 |
|
0% |
| admin_routes.py |
api_download |
|
3 |
0 |
0 |
|
100% |
| admin_routes.py |
api_extract_frames |
|
2 |
2 |
0 |
|
0% |
| admin_routes.py |
admin_list_downloaded_videos |
|
2 |
2 |
0 |
|
0% |
| admin_routes.py |
submit_questions |
|
14 |
14 |
0 |
|
0% |
| admin_routes.py |
api_admin_list_children |
|
5 |
2 |
0 |
|
60% |
| admin_routes.py |
api_admin_create_child |
|
14 |
4 |
0 |
|
71% |
| admin_routes.py |
api_admin_update_child |
|
29 |
12 |
0 |
|
59% |
| admin_routes.py |
api_admin_unlink_child |
|
4 |
1 |
0 |
|
75% |
| admin_routes.py |
api_admin_deactivate_child |
|
4 |
1 |
0 |
|
75% |
| admin_routes.py |
ws_questions |
|
58 |
58 |
0 |
|
0% |
| admin_routes.py |
asyncio_to_thread |
|
2 |
2 |
0 |
|
0% |
| admin_routes.py |
api_get_child_report |
|
2 |
2 |
0 |
|
0% |
| admin_routes.py |
(no function) |
|
65 |
0 |
0 |
|
100% |
| app \ __init__.py |
(no function) |
|
0 |
0 |
0 |
|
100% |
| app \ services \ __init__.py |
(no function) |
|
0 |
0 |
0 |
|
100% |
| app \ services \ children_service.py |
utc_now_iso |
|
1 |
0 |
0 |
|
100% |
| app \ services \ children_service.py |
normalize_child_id |
|
1 |
0 |
0 |
|
100% |
| app \ services \ children_service.py |
normalize_name |
|
1 |
0 |
0 |
|
100% |
| app \ services \ children_service.py |
normalize_icon_key |
|
1 |
0 |
0 |
|
100% |
| app \ services \ children_service.py |
_row_to_child |
|
4 |
0 |
0 |
|
100% |
| app \ services \ children_service.py |
_ensure_expert_exists |
|
4 |
1 |
0 |
|
75% |
| app \ services \ children_service.py |
_child_id_exists |
|
3 |
0 |
0 |
|
100% |
| app \ services \ children_service.py |
generate_child_id |
|
5 |
1 |
0 |
|
80% |
| app \ services \ children_service.py |
get_child |
|
12 |
1 |
0 |
|
92% |
| app \ services \ children_service.py |
list_children |
|
17 |
1 |
0 |
|
94% |
| app \ services \ children_service.py |
create_child |
|
31 |
11 |
0 |
|
65% |
| app \ services \ children_service.py |
update_child |
|
56 |
18 |
0 |
|
68% |
| app \ services \ children_service.py |
deactivate_child |
|
1 |
0 |
0 |
|
100% |
| app \ services \ children_service.py |
delete_child |
|
7 |
1 |
0 |
|
86% |
| app \ services \ children_service.py |
(no function) |
|
21 |
0 |
0 |
|
100% |
| app \ services \ clients.py |
get_openai_client |
|
4 |
1 |
0 |
|
75% |
| app \ services \ clients.py |
get_anthropic_client |
|
3 |
3 |
0 |
|
0% |
| app \ services \ clients.py |
get_gemini_configured |
|
4 |
4 |
0 |
|
0% |
| app \ services \ clients.py |
(no function) |
|
13 |
0 |
0 |
|
100% |
| app \ services \ download_service.py |
download_youtube |
|
66 |
66 |
0 |
|
0% |
| app \ services \ download_service.py |
_normalize_youtube_url |
|
9 |
9 |
0 |
|
0% |
| app \ services \ download_service.py |
_extract_metadata |
|
3 |
3 |
0 |
|
0% |
| app \ services \ download_service.py |
_download_video |
|
3 |
3 |
0 |
|
0% |
| app \ services \ download_service.py |
_download_subtitles |
|
7 |
7 |
0 |
|
0% |
| app \ services \ download_service.py |
_run_ytdlp_with_auth_fallback |
|
35 |
35 |
0 |
|
0% |
| app \ services \ download_service.py |
_run_extract_info |
|
2 |
2 |
0 |
|
0% |
| app \ services \ download_service.py |
_download_with_format_fallback |
|
24 |
10 |
0 |
|
58% |
| app \ services \ download_service.py |
_build_metadata_opts |
|
4 |
0 |
0 |
|
100% |
| app \ services \ download_service.py |
_build_download_opts |
|
8 |
1 |
0 |
|
88% |
| app \ services \ download_service.py |
_preferred_download_format |
|
3 |
1 |
0 |
|
67% |
| app \ services \ download_service.py |
_build_subtitle_opts |
|
8 |
0 |
0 |
|
100% |
| app \ services \ download_service.py |
_with_missing_pot_formats |
|
10 |
10 |
0 |
|
0% |
| app \ services \ download_service.py |
_apply_runtime_options |
|
4 |
1 |
0 |
|
75% |
| app \ services \ download_service.py |
_apply_auth_options |
|
5 |
2 |
0 |
|
60% |
| app \ services \ download_service.py |
_apply_user_agent |
|
3 |
0 |
0 |
|
100% |
| app \ services \ download_service.py |
_select_auth_profile |
|
13 |
3 |
0 |
|
77% |
| app \ services \ download_service.py |
_resolve_auth_mode |
|
4 |
1 |
0 |
|
75% |
| app \ services \ download_service.py |
_resolve_cookiefile |
|
10 |
4 |
0 |
|
60% |
| app \ services \ download_service.py |
_preferred_browser_order |
|
6 |
1 |
0 |
|
83% |
| app \ services \ download_service.py |
_browser_session_available |
|
7 |
7 |
0 |
|
0% |
| app \ services \ download_service.py |
_classify_ytdlp_error |
|
13 |
7 |
0 |
|
46% |
| app \ services \ download_service.py |
_build_auth_recovery_hint |
|
15 |
3 |
0 |
|
80% |
| app \ services \ download_service.py |
_build_rate_limit_hint |
|
5 |
5 |
0 |
|
0% |
| app \ services \ download_service.py |
_browser_help_text |
|
5 |
2 |
0 |
|
60% |
| app \ services \ download_service.py |
_browser_label |
|
3 |
1 |
0 |
|
67% |
| app \ services \ download_service.py |
_apply_download_error |
|
6 |
6 |
0 |
|
0% |
| app \ services \ download_service.py |
_collect_created_files |
|
5 |
5 |
0 |
|
0% |
| app \ services \ download_service.py |
_resolve_ffmpeg_path |
|
20 |
12 |
0 |
|
40% |
| app \ services \ download_service.py |
_remove_stale_invalid_mp4 |
|
10 |
10 |
0 |
|
0% |
| app \ services \ download_service.py |
_clean_ytdlp_error |
|
2 |
0 |
0 |
|
100% |
| app \ services \ download_service.py |
_repair_invalid_mp4 |
|
22 |
12 |
0 |
|
45% |
| app \ services \ download_service.py |
_looks_like_mp4 |
|
6 |
2 |
0 |
|
67% |
| app \ services \ download_service.py |
(no function) |
|
48 |
0 |
0 |
|
100% |
| app \ services \ expert_auth_service.py |
utc_now_iso |
|
1 |
0 |
0 |
|
100% |
| app \ services \ expert_auth_service.py |
hash_password |
|
5 |
1 |
0 |
|
80% |
| app \ services \ expert_auth_service.py |
verify_password |
|
11 |
3 |
0 |
|
73% |
| app \ services \ expert_auth_service.py |
normalize_expert_id |
|
1 |
0 |
0 |
|
100% |
| app \ services \ expert_auth_service.py |
is_valid_expert_id |
|
1 |
0 |
0 |
|
100% |
| app \ services \ expert_auth_service.py |
_row_to_expert |
|
1 |
0 |
0 |
|
100% |
| app \ services \ expert_auth_service.py |
list_experts |
|
3 |
0 |
0 |
|
100% |
| app \ services \ expert_auth_service.py |
get_expert |
|
8 |
2 |
0 |
|
75% |
| app \ services \ expert_auth_service.py |
create_expert |
|
22 |
8 |
0 |
|
64% |
| app \ services \ expert_auth_service.py |
update_expert |
|
30 |
30 |
0 |
|
0% |
| app \ services \ expert_auth_service.py |
deactivate_expert |
|
1 |
1 |
0 |
|
0% |
| app \ services \ expert_auth_service.py |
delete_expert |
|
5 |
0 |
0 |
|
100% |
| app \ services \ expert_auth_service.py |
authenticate_expert |
|
12 |
12 |
0 |
|
0% |
| app \ services \ expert_auth_service.py |
ensure_video_assignment_rows |
|
8 |
8 |
0 |
|
0% |
| app \ services \ expert_auth_service.py |
add_video_assignment |
|
12 |
3 |
0 |
|
75% |
| app \ services \ expert_auth_service.py |
remove_video_assignment |
|
9 |
2 |
0 |
|
78% |
| app \ services \ expert_auth_service.py |
list_experts_for_video |
|
6 |
1 |
0 |
|
83% |
| app \ services \ expert_auth_service.py |
list_video_assignments |
|
3 |
3 |
0 |
|
0% |
| app \ services \ expert_auth_service.py |
list_video_ids_for_expert |
|
6 |
1 |
0 |
|
83% |
| app \ services \ expert_auth_service.py |
can_expert_access_video |
|
7 |
1 |
0 |
|
86% |
| app \ services \ expert_auth_service.py |
claim_video_for_expert |
|
11 |
2 |
0 |
|
82% |
| app \ services \ expert_auth_service.py |
(no function) |
|
32 |
0 |
0 |
|
100% |
| app \ services \ expert_review_service.py |
normalize_segment_value |
|
4 |
4 |
0 |
|
0% |
| app \ services \ expert_review_service.py |
_parse_rank_value |
|
22 |
22 |
0 |
|
0% |
| app \ services \ expert_review_service.py |
_build_llm_rank_lookup |
|
27 |
27 |
0 |
|
0% |
| app \ services \ expert_review_service.py |
load_expert_annotations |
|
10 |
10 |
0 |
|
0% |
| app \ services \ expert_review_service.py |
serialize_question_segments |
|
13 |
13 |
0 |
|
0% |
| app \ services \ expert_review_service.py |
_build_annotations_map |
|
7 |
7 |
0 |
|
0% |
| app \ services \ expert_review_service.py |
build_expert_preview_data |
|
79 |
79 |
0 |
|
0% |
| app \ services \ expert_review_service.py |
save_expert_annotation_payload |
|
96 |
96 |
0 |
|
0% |
| app \ services \ expert_review_service.py |
get_expert_questions_payload |
|
13 |
13 |
0 |
|
0% |
| app \ services \ expert_review_service.py |
save_expert_question_payload |
|
49 |
49 |
0 |
|
0% |
| app \ services \ expert_review_service.py |
save_expert_question_payload.matches_existing |
|
3 |
3 |
0 |
|
0% |
| app \ services \ expert_review_service.py |
save_final_questions_payload |
|
62 |
62 |
0 |
|
0% |
| app \ services \ expert_review_service.py |
(no function) |
|
20 |
0 |
0 |
|
100% |
| app \ services \ frame_service.py |
extract_frames_per_second_for_video |
|
49 |
49 |
0 |
|
0% |
| app \ services \ frame_service.py |
(no function) |
|
6 |
0 |
0 |
|
100% |
| app \ services \ personalize_quiz_service.py |
generate_persona_variants |
|
39 |
39 |
0 |
|
0% |
| app \ services \ personalize_quiz_service.py |
(no function) |
|
10 |
0 |
0 |
|
100% |
| app \ services \ question_generation_service.py |
encode_image_to_base64 |
|
12 |
12 |
0 |
|
0% |
| app \ services \ question_generation_service.py |
time_to_seconds |
|
11 |
0 |
0 |
|
100% |
| app \ services \ question_generation_service.py |
read_frame_data_from_csv |
|
30 |
30 |
0 |
|
0% |
| app \ services \ question_generation_service.py |
generate_questions_for_segment |
|
55 |
55 |
0 |
|
0% |
| app \ services \ question_generation_service.py |
generate_questions_for_segment._call_llm |
|
71 |
71 |
0 |
|
0% |
| app \ services \ question_generation_service.py |
generate_questions_for_segment_with_retry |
|
23 |
23 |
0 |
|
0% |
| app \ services \ question_generation_service.py |
build_segments_from_duration |
|
10 |
0 |
0 |
|
100% |
| app \ services \ question_generation_service.py |
_maybe_parse_json |
|
17 |
17 |
0 |
|
0% |
| app \ services \ question_generation_service.py |
persist_segment_questions_json |
|
30 |
30 |
0 |
|
0% |
| app \ services \ question_generation_service.py |
resolve_question_file_param |
|
18 |
18 |
0 |
|
0% |
| app \ services \ question_generation_service.py |
(no function) |
|
23 |
0 |
0 |
|
100% |
| app \ services \ quiz_scoring_service.py |
get_downloads_dir |
|
2 |
2 |
0 |
|
0% |
| app \ services \ quiz_scoring_service.py |
save_quiz_result |
|
30 |
7 |
0 |
|
77% |
| app \ services \ quiz_scoring_service.py |
get_child_scores |
|
12 |
2 |
0 |
|
83% |
| app \ services \ quiz_scoring_service.py |
(no function) |
|
7 |
0 |
0 |
|
100% |
| app \ services \ report_service.py |
_get_downloads_dir |
|
2 |
0 |
0 |
|
100% |
| app \ services \ report_service.py |
_get_video_meta |
|
9 |
6 |
0 |
|
33% |
| app \ services \ report_service.py |
_get_video_title |
|
1 |
1 |
0 |
|
0% |
| app \ services \ report_service.py |
_load_attempts |
|
8 |
5 |
0 |
|
38% |
| app \ services \ report_service.py |
_compute_top_categories |
|
24 |
1 |
0 |
|
96% |
| app \ services \ report_service.py |
get_child_report_scoped |
|
23 |
1 |
0 |
|
96% |
| app \ services \ report_service.py |
get_child_report |
|
26 |
26 |
0 |
|
0% |
| app \ services \ report_service.py |
(no function) |
|
11 |
0 |
0 |
|
100% |
| app \ services \ sqlite_store.py |
get_conn |
|
6 |
0 |
0 |
|
100% |
| app \ services \ sqlite_store.py |
_children_needs_unlink_migration |
|
7 |
2 |
0 |
|
71% |
| app \ services \ sqlite_store.py |
_migrate_drop_unique_name_index |
|
4 |
2 |
0 |
|
50% |
| app \ services \ sqlite_store.py |
_migrate_add_interaction_mode |
|
4 |
2 |
0 |
|
50% |
| app \ services \ sqlite_store.py |
_migrate_add_login_code_plain |
|
4 |
0 |
0 |
|
100% |
| app \ services \ sqlite_store.py |
_migrate_add_parent_id |
|
4 |
0 |
0 |
|
100% |
| app \ services \ sqlite_store.py |
_migrate_children_for_unlink |
|
5 |
3 |
0 |
|
40% |
| app \ services \ sqlite_store.py |
init_db |
|
8 |
0 |
0 |
|
100% |
| app \ services \ sqlite_store.py |
(no function) |
|
11 |
0 |
0 |
|
100% |
| app \ services \ video_files.py |
find_primary_video_file |
|
8 |
0 |
0 |
|
100% |
| app \ services \ video_files.py |
_video_sort_key |
|
3 |
0 |
0 |
|
100% |
| app \ services \ video_files.py |
list_question_json_files |
|
17 |
4 |
0 |
|
76% |
| app \ services \ video_files.py |
(no function) |
|
7 |
0 |
0 |
|
100% |
| app \ settings.py |
(no function) |
|
28 |
0 |
0 |
|
100% |
| app \ web.py |
(no function) |
|
3 |
0 |
0 |
|
100% |
| video_quiz_routes.py |
_parse_duration_to_seconds |
|
28 |
28 |
0 |
|
0% |
| video_quiz_routes.py |
_format_mmss |
|
4 |
4 |
0 |
|
0% |
| video_quiz_routes.py |
refresh_kids_videos_json |
|
73 |
73 |
0 |
|
0% |
| video_quiz_routes.py |
list_kids_videos |
|
2 |
2 |
0 |
|
0% |
| video_quiz_routes.py |
get_final_questions |
|
67 |
64 |
0 |
|
4% |
| video_quiz_routes.py |
get_final_questions._llm_sort_key |
|
5 |
5 |
0 |
|
0% |
| video_quiz_routes.py |
words_to_numbers |
|
22 |
13 |
0 |
|
41% |
| video_quiz_routes.py |
normalize_text |
|
7 |
0 |
0 |
|
100% |
| video_quiz_routes.py |
prepare_text_for_scoring |
|
9 |
4 |
0 |
|
56% |
| video_quiz_routes.py |
keyword_overlap |
|
3 |
3 |
0 |
|
0% |
| video_quiz_routes.py |
simplify_item |
|
9 |
9 |
0 |
|
0% |
| video_quiz_routes.py |
extract_items |
|
4 |
2 |
0 |
|
50% |
| video_quiz_routes.py |
list_match |
|
8 |
8 |
0 |
|
0% |
| video_quiz_routes.py |
required_items_from_question |
|
8 |
8 |
0 |
|
0% |
| video_quiz_routes.py |
check_answer |
|
50 |
20 |
0 |
|
60% |
| video_quiz_routes.py |
log_speech |
|
9 |
9 |
0 |
|
0% |
| video_quiz_routes.py |
transcribe_audio |
|
11 |
11 |
0 |
|
0% |
| video_quiz_routes.py |
get_config |
|
1 |
0 |
0 |
|
100% |
| video_quiz_routes.py |
api_save_quiz_score |
|
8 |
8 |
0 |
|
0% |
| video_quiz_routes.py |
api_get_quiz_scores |
|
2 |
2 |
0 |
|
0% |
| video_quiz_routes.py |
(no function) |
|
48 |
0 |
0 |
|
100% |