Coverage report: 36%

Files Functions Classes

coverage.py v7.13.5, created at 2026-04-28 20:58 -0400

File function   statements missing excluded   coverage
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%
Total     2642 1702 0   36%

No items found using the specified filter.