SF:alembic/env.py DA:10,1 DA:12,1 DA:14,1 DA:16,1 DA:17,1 DA:19,1 DA:21,1 DA:22,0 DA:24,1 DA:27,1 DA:29,0 DA:30,0 DA:36,0 DA:37,0 DA:40,1 DA:42,1 DA:44,1 DA:46,1 DA:47,1 DA:48,1 DA:51,0 DA:56,0 DA:57,0 DA:58,0 DA:59,0 DA:60,0 DA:63,1 DA:64,0 DA:66,1 LF:29 LH:17 FN:27,37,run_migrations_offline FNDA:0,run_migrations_offline FN:40,60,run_migrations_online FNDA:1,run_migrations_online FNF:2 FNH:1 end_of_record SF:alembic/versions/0001_initial_schema.py DA:8,1 DA:10,1 DA:12,1 DA:15,1 DA:16,1 DA:17,1 DA:18,1 DA:21,1 DA:22,1 DA:39,1 DA:42,1 DA:46,1 DA:53,1 DA:57,1 DA:65,1 DA:70,1 DA:76,1 DA:84,1 DA:85,0 DA:86,0 DA:87,0 DA:88,0 DA:89,0 DA:90,0 DA:91,0 DA:92,0 DA:93,0 LF:27 LH:18 FN:21,81,upgrade FNDA:1,upgrade FN:84,93,downgrade FNDA:0,downgrade FNF:2 FNH:1 end_of_record SF:alembic/versions/0002_add_provider_name.py DA:8,1 DA:10,1 DA:12,1 DA:15,1 DA:16,1 DA:17,1 DA:18,1 DA:21,1 DA:22,1 DA:33,1 DA:34,0 LF:11 LH:10 FN:21,30,upgrade FNDA:1,upgrade FN:33,34,downgrade FNDA:0,downgrade FNF:2 FNH:1 end_of_record SF:alembic/versions/0003_backfill_provider_name.py DA:17,1 DA:19,1 DA:20,1 DA:22,1 DA:24,1 DA:27,1 DA:28,1 DA:29,1 DA:30,1 DA:33,1 DA:38,1 DA:39,1 DA:40,0 DA:41,0 DA:43,1 DA:44,1 DA:45,1 DA:46,1 DA:48,0 DA:49,0 DA:50,0 DA:51,0 DA:54,1 DA:55,1 DA:56,1 DA:58,1 DA:60,0 DA:61,0 DA:62,0 DA:64,0 DA:67,0 DA:68,0 DA:69,0 DA:72,0 DA:73,0 DA:84,0 DA:85,0 DA:86,0 DA:95,1 DA:97,0 DA:98,0 LF:41 LH:21 FN:33,51,_load_config FNDA:1,_load_config FN:54,92,upgrade FNDA:1,upgrade FN:95,98,downgrade FNDA:0,downgrade FNF:3 FNH:2 end_of_record SF:covsrv/__init__.py end_of_record SF:covsrv/auth/__init__.py DA:20,1 DA:22,1 DA:27,1 DA:28,1 DA:29,1 DA:34,1 DA:41,1 DA:43,1 DA:67,1 DA:75,1 DA:76,1 DA:77,1 DA:78,1 DA:79,1 DA:80,1 DA:83,1 DA:86,1 DA:94,1 DA:103,0 DA:104,0 DA:105,0 DA:107,0 DA:109,0 DA:110,0 DA:113,0 DA:114,0 DA:117,0 DA:118,0 DA:119,0 DA:120,0 DA:122,0 DA:123,0 DA:125,0 DA:126,0 DA:127,0 DA:129,0 DA:133,0 DA:134,0 DA:135,0 DA:136,0 DA:137,0 DA:138,0 DA:139,0 DA:141,0 DA:142,0 DA:143,0 DA:145,0 DA:147,0 DA:152,0 DA:153,0 DA:156,1 DA:170,0 DA:171,0 DA:172,0 DA:173,0 DA:175,0 DA:176,0 DA:179,0 DA:180,0 DA:181,0 DA:184,0 DA:185,0 DA:186,0 DA:188,0 DA:189,0 DA:190,0 DA:192,0 DA:193,0 DA:194,0 DA:195,0 DA:200,0 DA:201,0 DA:202,0 DA:204,0 DA:207,1 DA:210,0 DA:211,0 DA:213,0 DA:215,0 LF:79 LH:20 FN:75,83,_AuthState.__init__ FNDA:1,_AuthState.__init__ FN:94,153,setup_auth FNDA:0,setup_auth FN:156,204,_make_repo_provider_lookup FNDA:0,_make_repo_provider_lookup FN:175,202,_make_repo_provider_lookup._lookup FNDA:0,_make_repo_provider_lookup._lookup FN:207,215,_make_repo_provider_url_lookup FNDA:0,_make_repo_provider_url_lookup FN:210,213,_make_repo_provider_url_lookup._lookup FNDA:0,_make_repo_provider_url_lookup._lookup FNF:6 FNH:1 end_of_record SF:covsrv/auth/cache.py DA:8,1 DA:10,1 DA:11,1 DA:14,1 DA:17,1 DA:18,1 DA:19,1 DA:20,1 DA:21,1 DA:25,1 DA:26,1 DA:27,1 DA:31,1 DA:33,1 DA:34,1 DA:35,1 DA:36,1 DA:37,1 DA:38,1 DA:39,1 DA:40,1 DA:41,1 DA:42,1 DA:44,1 DA:53,1 DA:54,1 DA:55,1 DA:56,1 DA:57,1 DA:59,1 DA:61,1 DA:62,1 DA:64,1 DA:66,1 DA:67,1 DA:68,1 DA:69,1 DA:70,1 DA:74,1 DA:75,1 DA:76,1 DA:77,1 DA:78,1 LF:43 LH:43 FN:17,21,AuthzCache.__init__ FNDA:1,AuthzCache.__init__ FN:26,27,AuthzCache._key FNDA:1,AuthzCache._key FN:31,42,AuthzCache.get FNDA:1,AuthzCache.get FN:44,57,AuthzCache.set FNDA:1,AuthzCache.set FN:59,62,AuthzCache.clear FNDA:1,AuthzCache.clear FN:64,70,AuthzCache.clear_user FNDA:1,AuthzCache.clear_user FN:74,78,AuthzCache._evict_expired FNDA:1,AuthzCache._evict_expired FNF:7 FNH:7 end_of_record SF:covsrv/auth/config.py DA:3,1 DA:5,1 DA:6,1 DA:9,1 DA:10,1 DA:13,1 DA:14,1 DA:15,1 DA:16,1 DA:17,1 DA:18,1 DA:19,1 DA:20,1 DA:21,1 DA:29,1 DA:30,1 DA:31,1 DA:32,1 DA:33,1 DA:34,1 DA:48,1 DA:49,1 DA:50,1 DA:51,1 DA:52,1 DA:53,1 DA:54,1 DA:55,1 DA:73,1 DA:74,1 DA:77,1 DA:78,1 DA:79,1 DA:81,1 DA:82,1 DA:83,1 DA:86,1 DA:105,1 DA:110,1 DA:111,1 DA:112,1 DA:116,1 DA:117,1 DA:119,1 DA:120,1 DA:121,1 DA:122,1 DA:124,1 DA:125,1 DA:126,1 DA:127,1 DA:129,1 LF:52 LH:52 FN:29,45,_github_config FNDA:1,_github_config FN:48,65,_gitea_config FNDA:1,_gitea_config FN:86,136,load_auth_config FNDA:1,load_auth_config FNF:3 FNH:3 end_of_record SF:covsrv/auth/dependencies.py DA:3,1 DA:5,1 DA:7,1 DA:8,1 DA:10,1 DA:11,1 DA:13,1 DA:15,1 DA:23,1 DA:26,1 DA:27,1 DA:28,1 DA:31,1 DA:38,1 DA:39,1 DA:40,1 DA:48,1 DA:62,1 DA:64,1 DA:65,1 DA:67,1 DA:68,1 DA:70,1 DA:71,0 DA:74,1 DA:75,1 DA:79,1 DA:80,1 DA:81,1 DA:82,0 DA:84,1 DA:86,1 DA:87,1 DA:88,1 DA:89,0 DA:90,0 DA:96,0 DA:99,1 DA:101,1 DA:102,1 DA:103,1 DA:108,1 DA:109,1 DA:113,1 DA:117,0 DA:121,1 DA:122,1 DA:123,1 DA:126,1 DA:127,1 DA:128,1 DA:131,1 DA:132,1 DA:133,0 DA:134,1 DA:135,0 DA:139,1 DA:140,1 DA:141,0 DA:142,0 DA:143,0 DA:148,1 DA:154,1 DA:155,1 DA:156,1 DA:159,1 DA:160,1 DA:162,1 DA:163,1 DA:166,1 DA:174,1 DA:181,1 DA:183,1 DA:184,1 DA:185,1 DA:186,1 DA:188,1 DA:191,1 DA:193,1 DA:195,1 DA:196,1 DA:197,0 DA:200,1 DA:209,1 DA:210,1 DA:211,1 DA:213,0 DA:214,0 DA:215,0 DA:218,0 DA:220,0 DA:221,0 DA:222,0 DA:223,0 DA:224,0 DA:225,0 DA:226,0 DA:227,0 DA:228,0 DA:234,0 DA:237,1 DA:247,1 DA:248,1 DA:249,1 DA:250,1 DA:252,1 DA:253,1 DA:259,1 DA:262,1 DA:269,1 DA:270,1 DA:272,1 DA:273,1 DA:275,1 LF:114 LH:88 FN:26,28,AuthenticationRequired.__init__ FNDA:1,AuthenticationRequired.__init__ FN:38,40,AccessDenied.__init__ FNDA:1,AccessDenied.__init__ FN:48,166,require_view_permission FNDA:1,require_view_permission FN:174,188,_resolve_provider FNDA:1,_resolve_provider FN:191,197,_get_raw_provider_url FNDA:1,_get_raw_provider_url FN:200,234,_check_public_anonymous FNDA:1,_check_public_anonymous FN:237,259,_handle_unauthenticated FNDA:1,_handle_unauthenticated FN:262,275,_handle_access_denied FNDA:1,_handle_access_denied FNF:8 FNH:8 end_of_record SF:covsrv/auth/provider.py DA:3,1 DA:5,1 DA:6,1 DA:7,1 DA:10,1 DA:13,1 DA:14,1 DA:15,1 DA:18,1 DA:19,1 DA:22,1 DA:23,1 DA:24,1 DA:27,1 DA:28,1 DA:31,1 DA:32,1 DA:33,1 DA:34,1 DA:35,1 DA:36,1 DA:39,1 DA:40,1 DA:43,1 DA:44,1 DA:45,1 DA:46,1 DA:47,1 DA:48,1 DA:51,1 DA:59,1 DA:60,1 DA:61,1 DA:65,1 DA:66,1 DA:70,1 DA:71,1 DA:75,1 DA:76,1 DA:80,1 DA:81,1 DA:92,1 DA:98,0 DA:100,1 DA:108,1 LF:45 LH:44 FN:61,63,OAuthProvider.name FNDA:0,OAuthProvider.name FN:66,68,OAuthProvider.get_authorize_url FNDA:0,OAuthProvider.get_authorize_url FN:71,73,OAuthProvider.exchange_code FNDA:0,OAuthProvider.exchange_code FN:76,78,OAuthProvider.get_user FNDA:0,OAuthProvider.get_user FN:81,90,OAuthProvider.can_view_repo FNDA:0,OAuthProvider.can_view_repo FN:92,98,OAuthProvider.is_repo_public FNDA:0,OAuthProvider.is_repo_public FN:100,108,OAuthProvider.can_view FNDA:1,OAuthProvider.can_view FNF:7 FNH:1 end_of_record SF:covsrv/auth/routes.py DA:3,1 DA:5,1 DA:6,1 DA:8,1 DA:9,1 DA:11,1 DA:18,1 DA:26,1 DA:31,1 DA:32,0 DA:33,1 DA:35,1 DA:36,1 DA:38,0 DA:39,0 DA:40,0 DA:41,0 DA:49,1 DA:50,1 DA:55,1 DA:57,1 DA:58,0 DA:60,1 DA:61,1 DA:62,1 DA:65,1 DA:66,1 DA:67,1 DA:71,1 DA:72,1 DA:73,1 DA:76,1 DA:77,1 DA:84,1 DA:85,1 DA:87,1 DA:88,0 DA:90,1 DA:91,1 DA:93,1 DA:94,1 DA:95,0 DA:98,1 DA:99,1 DA:100,1 DA:102,1 DA:104,1 DA:105,1 DA:107,1 DA:109,1 DA:110,1 DA:111,0 DA:112,0 DA:114,1 DA:115,1 DA:116,0 DA:117,0 DA:119,1 DA:127,1 DA:131,1 DA:134,1 DA:135,1 DA:140,1 DA:143,1 DA:144,1 DA:145,1 DA:147,1 DA:148,1 DA:149,1 DA:152,1 DA:153,1 DA:157,1 DA:160,1 DA:161,1 DA:162,1 DA:163,1 DA:165,1 DA:166,1 DA:167,1 DA:172,1 DA:173,1 DA:176,1 LF:82 LH:70 FN:26,41,_safe_next_url FNDA:1,_safe_next_url FN:50,73,auth_login FNDA:1,auth_login FN:77,131,auth_callback FNDA:1,auth_callback FN:135,149,auth_logout FNDA:1,auth_logout FN:153,167,auth_logout_all FNDA:1,auth_logout_all FNF:5 FNH:5 end_of_record SF:covsrv/auth/session.py DA:18,1 DA:20,1 DA:23,1 DA:24,1 DA:27,1 DA:30,1 DA:34,1 DA:35,1 DA:36,1 DA:37,1 DA:38,1 DA:41,1 DA:51,1 DA:52,1 DA:53,1 DA:61,1 DA:63,1 DA:64,1 DA:68,1 DA:69,1 DA:70,1 DA:72,1 DA:75,1 DA:80,1 DA:83,1 DA:85,1 DA:86,1 DA:87,1 DA:88,1 DA:89,1 DA:90,1 LF:31 LH:31 FN:30,38,get_provider_session FNDA:1,get_provider_session FN:41,58,set_provider_session FNDA:1,set_provider_session FN:61,72,clear_provider_session FNDA:1,clear_provider_session FN:75,80,clear_all_sessions FNDA:1,clear_all_sessions FN:83,90,get_logged_in_providers FNDA:1,get_logged_in_providers FNF:5 FNH:5 end_of_record SF:covsrv/badges/__init__.py DA:1,1 DA:2,1 DA:3,1 DA:4,1 LF:4 LH:4 end_of_record SF:covsrv/badges/badges.py DA:1,1 DA:3,1 DA:6,1 DA:8,1 DA:9,1 DA:10,1 DA:11,1 DA:12,1 DA:13,1 DA:14,1 DA:15,1 DA:16,1 DA:17,1 DA:20,1 DA:21,1 DA:30,1 DA:35,1 DA:38,1 DA:39,1 DA:40,1 DA:43,1 DA:44,1 DA:45,1 DA:46,1 DA:49,1 DA:50,1 DA:53,1 DA:75,1 DA:76,1 DA:77,1 DA:87,1 DA:88,1 DA:89,1 DA:90,1 DA:92,1 DA:93,1 DA:94,1 DA:95,1 DA:96,1 LF:39 LH:39 FN:6,17,badge_color FNDA:1,badge_color FN:20,27,_escape_xml FNDA:1,_escape_xml FN:30,35,_text_px_width FNDA:1,_text_px_width FN:38,72,render_badge_svg FNDA:1,render_badge_svg FN:75,84,svg_response FNDA:1,svg_response FN:87,96,coverage_message FNDA:1,coverage_message FNF:6 FNH:6 end_of_record SF:covsrv/config.py DA:15,1 DA:17,1 DA:18,1 DA:19,1 DA:20,1 DA:21,1 DA:22,1 DA:28,1 DA:31,1 DA:32,1 DA:35,1 DA:36,1 DA:39,1 DA:40,1 DA:43,1 DA:44,1 DA:47,1 DA:48,1 DA:55,1 DA:56,1 DA:57,1 DA:58,1 DA:59,1 DA:60,1 DA:61,1 DA:62,1 DA:64,1 DA:65,1 DA:67,1 DA:70,1 DA:71,1 DA:74,1 DA:75,1 DA:76,1 DA:77,1 DA:78,1 DA:86,1 DA:95,1 DA:100,1 DA:101,1 DA:105,1 DA:106,1 DA:108,1 DA:109,1 DA:110,1 DA:112,1 DA:113,1 DA:115,1 DA:116,1 DA:118,1 DA:119,1 DA:122,1 DA:123,1 DA:132,1 DA:133,1 DA:134,1 DA:135,0 DA:138,1 DA:139,1 DA:144,1 DA:145,1 DA:146,1 DA:148,1 DA:149,1 DA:150,1 DA:153,1 DA:154,1 DA:155,1 DA:156,1 DA:162,1 DA:163,1 DA:164,1 DA:165,1 DA:166,1 DA:171,1 DA:182,1 DA:184,1 DA:185,1 DA:187,1 DA:191,1 DA:192,1 DA:193,1 DA:195,1 DA:196,1 DA:197,1 DA:199,1 DA:200,1 DA:202,1 DA:204,1 DA:205,1 DA:209,1 DA:228,1 DA:229,1 DA:230,1 DA:232,1 DA:235,1 DA:236,1 DA:237,1 DA:238,1 DA:241,1 DA:242,1 DA:243,1 DA:244,1 DA:247,1 DA:248,1 DA:249,1 DA:252,1 DA:253,1 DA:254,1 DA:256,1 DA:260,1 DA:266,1 DA:268,1 DA:270,1 DA:272,1 DA:273,1 DA:275,1 DA:276,1 DA:288,1 DA:289,1 DA:301,1 DA:303,1 DA:309,1 DA:311,1 DA:312,1 DA:314,1 DA:315,1 DA:316,1 DA:317,1 DA:318,1 DA:319,1 DA:321,1 LF:132 LH:131 FN:65,67,ProviderEntry.oauth_configured FNDA:1,ProviderEntry.oauth_configured FN:95,101,ConfigManager.__init__ FNDA:1,ConfigManager.__init__ FN:106,110,ConfigManager.from_file FNDA:1,ConfigManager.from_file FN:113,116,ConfigManager.from_str FNDA:1,ConfigManager.from_str FN:119,182,ConfigManager._from_dict FNDA:1,ConfigManager._from_dict FN:185,187,ConfigManager.default FNDA:1,ConfigManager.default FN:192,193,ConfigManager.global_config FNDA:1,ConfigManager.global_config FN:196,197,ConfigManager.providers FNDA:1,ConfigManager.providers FN:199,200,ConfigManager.get_provider FNDA:1,ConfigManager.get_provider FN:202,205,ConfigManager.provider_url FNDA:1,ConfigManager.provider_url FN:209,256,ConfigManager.verify_report_key FNDA:1,ConfigManager.verify_report_key FN:260,301,ConfigManager.to_auth_provider_config FNDA:1,ConfigManager.to_auth_provider_config FN:303,328,ConfigManager.to_auth_config FNDA:1,ConfigManager.to_auth_config FNF:13 FNH:13 end_of_record SF:covsrv/db.py DA:3,1 DA:5,1 DA:6,1 DA:7,1 DA:8,1 DA:10,1 DA:11,1 DA:12,1 DA:18,1 DA:20,1 DA:26,1 DA:27,1 DA:30,1 DA:33,1 DA:34,1 DA:35,1 DA:38,1 DA:39,1 DA:40,1 DA:41,1 DA:44,1 DA:45,1 DA:47,1 DA:48,1 DA:49,1 DA:50,1 DA:57,1 DA:60,1 DA:62,1 DA:64,1 DA:65,1 DA:66,1 DA:68,1 DA:69,1 DA:70,1 DA:74,1 DA:75,1 DA:76,1 DA:77,1 DA:78,0 DA:79,0 DA:81,1 DA:84,1 DA:86,1 DA:87,0 DA:88,1 DA:89,1 DA:90,1 DA:93,1 DA:96,1 DA:97,1 DA:98,1 DA:99,1 DA:107,1 DA:108,1 DA:109,1 DA:113,1 DA:116,1 DA:123,1 DA:126,1 DA:133,1 DA:141,1 DA:144,1 DA:145,1 DA:150,1 DA:151,1 DA:152,1 DA:153,1 DA:154,1 DA:167,1 DA:168,1 DA:169,1 DA:174,1 DA:175,1 DA:176,1 DA:179,1 DA:182,1 DA:183,1 DA:192,1 DA:193,1 DA:196,1 DA:199,1 DA:200,1 DA:206,1 DA:207,1 DA:210,1 DA:212,1 DA:213,1 DA:219,1 DA:220,1 DA:221,1 DA:224,1 DA:226,0 DA:227,0 DA:233,0 DA:234,0 DA:235,0 DA:236,0 DA:237,0 DA:240,1 DA:244,1 DA:245,1 DA:246,1 DA:247,1 DA:252,1 DA:253,1 DA:254,1 DA:261,1 LF:108 LH:98 FN:30,35,configure FNDA:1,configure FN:38,41,_get_session_factory FNDA:1,_get_session_factory FN:45,50,session FNDA:1,session FN:60,81,_run_alembic_upgrade FNDA:1,_run_alembic_upgrade FN:84,90,init_db FNDA:1,init_db FN:93,99,dispose FNDA:1,dispose FN:107,113,upsert_repo_seen FNDA:1,upsert_repo_seen FN:116,133,upsert_branch_head FNDA:1,upsert_branch_head FN:141,164,latest_report_for_repo_hash FNDA:1,latest_report_for_repo_hash FN:167,176,latest_branch_head_hash FNDA:1,latest_branch_head_hash FN:179,193,branch_events_for FNDA:1,branch_events_for FN:196,207,reports_trend_for_repo_hash FNDA:1,reports_trend_for_repo_hash FN:210,221,provider_url_for_repo FNDA:1,provider_url_for_repo FN:224,237,provider_name_for_repo FNDA:0,provider_name_for_repo FN:240,261,report_percent_for_hashes FNDA:1,report_percent_for_hashes FNF:15 FNH:14 end_of_record SF:covsrv/models.py DA:3,1 DA:5,1 DA:6,1 DA:8,1 DA:11,1 DA:12,1 DA:15,1 DA:16,1 DA:18,1 DA:19,1 DA:20,1 DA:21,1 DA:22,1 DA:23,1 DA:24,1 DA:25,1 DA:28,1 DA:32,1 DA:39,1 DA:40,1 DA:42,1 DA:43,1 DA:44,1 DA:45,1 DA:47,1 DA:50,1 DA:51,1 DA:53,1 DA:54,1 DA:55,1 DA:56,1 DA:57,1 DA:59,1 DA:65,1 DA:66,1 DA:68,1 DA:69,1 DA:70,1 LF:38 LH:38 end_of_record SF:main.py DA:1,1 DA:3,1 DA:4,1 DA:5,1 DA:6,1 DA:7,1 DA:8,1 DA:9,1 DA:10,1 DA:11,1 DA:12,1 DA:13,1 DA:14,1 DA:16,1 DA:17,1 DA:18,1 DA:19,1 DA:30,1 DA:31,1 DA:32,1 DA:33,1 DA:35,1 DA:36,1 DA:44,1 DA:45,1 DA:46,1 DA:48,1 DA:57,1 DA:59,1 DA:60,1 DA:61,1 DA:63,1 DA:64,1 DA:67,1 DA:70,1 DA:76,1 DA:77,1 DA:78,0 DA:79,0 DA:80,0 DA:81,0 DA:82,1 DA:85,1 DA:86,1 DA:87,1 DA:94,1 DA:95,1 DA:96,1 DA:97,1 DA:98,1 DA:99,1 DA:100,0 DA:101,1 DA:104,1 DA:105,1 DA:106,1 DA:107,1 DA:108,1 DA:109,1 DA:110,1 DA:111,1 DA:112,1 DA:115,1 DA:116,1 DA:117,1 DA:118,1 DA:120,1 DA:121,1 DA:122,1 DA:125,1 DA:126,1 DA:127,1 DA:128,1 DA:129,1 DA:130,1 DA:131,1 DA:132,1 DA:133,1 DA:135,1 DA:136,1 DA:145,1 DA:147,1 DA:148,1 DA:151,1 DA:153,1 DA:155,1 DA:157,1 DA:163,1 DA:173,1 DA:174,0 DA:182,1 DA:183,1 DA:184,1 DA:185,1 DA:186,1 DA:187,1 DA:188,1 DA:189,1 DA:192,1 DA:193,1 DA:194,1 DA:195,0 DA:196,1 DA:197,1 DA:200,1 DA:206,0 DA:207,0 DA:208,0 DA:209,0 DA:212,0 DA:220,1 DA:221,0 DA:222,0 DA:225,1 DA:226,1 DA:229,1 DA:230,1 DA:233,1 DA:234,1 DA:235,1 DA:236,1 DA:237,1 DA:238,1 DA:239,1 DA:240,1 DA:241,1 DA:242,0 DA:243,1 DA:246,1 DA:248,1 DA:249,1 DA:250,1 DA:251,1 DA:252,1 DA:256,1 DA:257,1 DA:265,1 DA:266,1 DA:269,0 DA:270,0 DA:271,0 DA:274,0 DA:275,0 DA:276,0 DA:278,0 DA:280,0 DA:281,0 DA:289,1 DA:290,1 DA:291,1 DA:292,1 DA:293,1 DA:296,1 DA:298,1 DA:299,1 DA:300,1 DA:301,1 DA:305,1 DA:306,1 DA:307,1 DA:308,1 DA:309,1 DA:310,0 DA:311,0 DA:313,1 DA:314,1 DA:315,1 DA:316,1 DA:317,0 DA:319,1 DA:320,1 DA:321,1 DA:322,1 DA:323,1 DA:324,0 DA:325,0 DA:327,1 DA:328,1 DA:329,1 DA:330,1 DA:331,1 DA:333,1 DA:334,1 DA:335,1 DA:337,0 DA:338,0 DA:340,1 DA:346,1 DA:353,1 DA:362,1 DA:363,1 DA:364,0 DA:365,0 DA:366,0 DA:368,1 DA:369,1 DA:370,1 DA:372,1 DA:384,1 DA:385,1 DA:389,1 DA:391,1 DA:394,1 DA:395,1 DA:396,1 DA:397,1 DA:398,1 DA:402,1 DA:405,1 DA:406,1 DA:409,1 DA:410,1 DA:413,1 DA:414,1 DA:418,1 DA:419,1 DA:420,1 DA:424,1 DA:575,1 DA:577,1 DA:578,1 DA:580,1 DA:581,1 DA:582,0 DA:583,0 DA:584,0 DA:586,1 DA:587,1 DA:590,1 DA:596,1 DA:597,1 DA:598,1 DA:600,1 DA:601,1 DA:602,1 DA:603,1 DA:604,1 DA:605,1 DA:607,1 DA:608,1 DA:609,1 DA:610,1 DA:611,1 DA:613,1 DA:614,1 DA:626,1 DA:627,1 DA:628,1 DA:631,1 DA:632,1 DA:639,1 DA:640,1 DA:642,1 DA:643,1 DA:644,1 DA:646,1 DA:649,1 DA:650,1 DA:651,1 DA:654,1 DA:655,1 DA:662,1 DA:663,1 DA:665,1 DA:666,1 DA:667,1 DA:668,1 DA:669,1 DA:671,1 DA:672,1 DA:673,1 DA:676,1 DA:677,1 DA:678,1 DA:681,1 DA:682,1 DA:683,1 DA:686,1 DA:689,1 DA:692,1 DA:693,1 DA:694,1 DA:695,1 DA:696,1 DA:697,1 DA:698,1 DA:711,1 DA:712,1 DA:713,1 DA:716,1 DA:717,1 DA:718,1 DA:721,1 DA:722,1 DA:723,1 DA:724,1 DA:725,1 DA:726,1 DA:727,1 DA:728,1 DA:731,1 DA:732,1 DA:735,1 DA:736,1 DA:738,1 DA:739,1 DA:740,1 DA:741,1 DA:743,1 DA:751,1 DA:756,1 DA:757,1 DA:758,1 DA:759,1 DA:760,1 DA:762,1 DA:763,1 DA:770,1 DA:773,1 DA:776,1 DA:777,1 DA:778,1 DA:779,1 DA:786,1 DA:791,1 DA:794,1 DA:795,1 DA:796,1 DA:797,1 DA:810,1 DA:811,1 DA:812,1 DA:813,1 DA:816,1 DA:819,1 DA:820,0 DA:821,0 DA:822,0 DA:823,0 DA:826,1 DA:832,1 DA:834,1 DA:840,1 DA:841,1 DA:842,1 DA:844,1 DA:845,1 DA:846,0 DA:847,1 DA:850,1 DA:851,1 DA:852,1 DA:853,1 DA:855,1 DA:856,1 DA:858,1 DA:860,1 DA:861,1 DA:864,0 DA:867,0 DA:869,0 DA:871,0 DA:873,0 DA:880,1 DA:881,1 DA:882,1 DA:883,1 DA:885,1 DA:886,0 DA:888,1 DA:890,1 DA:891,1 DA:893,0 DA:896,0 DA:898,0 DA:900,0 DA:901,0 DA:903,0 DA:915,1 DA:916,1 DA:919,1 DA:920,1 DA:921,1 DA:922,1 DA:927,1 DA:928,1 DA:929,1 DA:930,0 DA:931,1 DA:934,1 DA:935,1 DA:938,1 DA:939,1 DA:941,1 DA:942,1 DA:943,1 DA:945,1 DA:946,1 DA:948,1 DA:964,1 DA:965,1 DA:968,1 DA:969,1 DA:971,1 DA:972,1 DA:973,1 DA:975,1 DA:976,1 DA:978,1 DA:999,1 DA:1000,1 DA:1003,1 DA:1004,1 DA:1006,1 DA:1007,1 DA:1008,1 DA:1010,1 DA:1015,1 DA:1016,1 DA:1019,1 DA:1020,1 DA:1022,1 DA:1023,1 DA:1024,1 DA:1026,1 DA:1027,1 DA:1028,0 DA:1030,1 DA:1031,1 DA:1033,1 DA:1049,1 DA:1052,1 DA:1055,1 DA:1056,1 DA:1058,1 DA:1059,1 DA:1060,1 DA:1062,1 DA:1063,1 DA:1064,0 DA:1066,1 DA:1067,1 DA:1069,1 DA:1085,1 DA:1086,0 DA:1088,0 LF:446 LH:387 FN:70,82,_resolve_config_path FNDA:1,_resolve_config_path FN:94,101,normalize_repo_full FNDA:1,normalize_repo_full FN:104,112,normalize_owner_repo FNDA:1,normalize_owner_repo FN:115,122,normalize_sha FNDA:1,normalize_sha FN:136,171,ReportIngestDTO.from_form FNDA:1,ReportIngestDTO.from_form FN:173,174,ReportIngestDTO.to_dict FNDA:0,ReportIngestDTO.to_dict FN:182,189,extract_token FNDA:1,extract_token FN:192,197,verify_token FNDA:1,verify_token FN:200,212,verify_report_access FNDA:0,verify_report_access FN:220,222,init_dirs FNDA:0,init_dirs FN:225,226,repo_to_fs FNDA:1,repo_to_fs FN:229,230,repo_from_owner_name FNDA:1,repo_from_owner_name FN:233,243,safe_join_under FNDA:1,safe_join_under FN:246,257,safe_extract_tar FNDA:1,safe_extract_tar FN:266,281,lifespan FNDA:0,lifespan FN:296,346,parse_coverage_xml FNDA:1,parse_coverage_xml FN:385,398,_no_cache_protected_responses FNDA:1,_no_cache_protected_responses FN:406,410,_auth_required_redirect FNDA:1,_auth_required_redirect FN:414,420,_access_denied_page FNDA:1,_access_denied_page FN:432,567,ingest_report FNDA:0,ingest_report FN:575,587,_resolve_provider_url FNDA:1,_resolve_provider_url FN:590,623,dashboard_html_for FNDA:1,dashboard_html_for FN:627,628,root FNDA:1,root FN:632,651,badge_hash_svg FNDA:1,badge_hash_svg FN:655,678,badge_branch_svg FNDA:1,badge_branch_svg FN:682,683,repo_home FNDA:1,repo_home FN:689,703,repo_branch_dashboard FNDA:1,repo_branch_dashboard FN:711,713,report_html_root_for_hash FNDA:1,report_html_root_for_hash FN:717,718,raw_hash_redirect FNDA:1,raw_hash_redirect FN:722,728,raw_hash_index FNDA:1,raw_hash_index FN:732,743,raw_hash_file FNDA:1,raw_hash_file FN:751,767,framed_html_for FNDA:1,framed_html_for FN:773,783,repo_hash_framed FNDA:1,repo_hash_framed FN:791,802,repo_hash_chart FNDA:1,repo_hash_chart FN:810,816,report_html_root_for_branch FNDA:1,report_html_root_for_branch FN:819,823,tar_gz_dir FNDA:0,tar_gz_dir FN:826,847,resolve_download_token FNDA:1,resolve_download_token FN:851,877,hash_download_token FNDA:1,hash_download_token FN:881,907,branch_download_token FNDA:1,branch_download_token FN:916,924,api_repo_hash_trend FNDA:1,api_repo_hash_trend FN:927,931,latest_stats_from_xml FNDA:1,latest_stats_from_xml FN:935,961,api_repo_hash_latest_worst_files FNDA:1,api_repo_hash_latest_worst_files FN:965,991,api_repo_hash_latest_uncovered_lines FNDA:1,api_repo_hash_latest_uncovered_lines FN:1000,1012,api_repo_branch_trend FNDA:1,api_repo_branch_trend FN:1016,1046,api_repo_branch_latest_worst_files FNDA:1,api_repo_branch_latest_worst_files FN:1052,1082,api_repo_branch_latest_uncovered_lines FNDA:1,api_repo_branch_latest_uncovered_lines FNF:46 FNH:40 end_of_record SF:tests/__init__.py end_of_record SF:tests/conftest.py DA:3,1 DA:5,1 DA:6,1 DA:7,1 DA:9,1 DA:10,1 DA:11,1 DA:13,1 DA:19,1 DA:57,1 DA:62,1 DA:63,1 DA:64,1 DA:65,1 DA:66,1 DA:67,1 DA:69,1 DA:70,0 DA:71,0 DA:72,0 DA:73,0 DA:74,0 DA:76,1 DA:77,1 DA:85,1 DA:86,1 DA:88,1 DA:90,1 DA:91,1 DA:92,1 DA:93,1 DA:95,1 DA:96,1 DA:97,1 DA:98,1 DA:100,1 DA:101,1 DA:103,1 DA:105,1 DA:106,1 DA:107,1 DA:108,1 DA:111,1 DA:112,1 DA:114,1 DA:115,1 DA:116,1 DA:117,1 DA:118,1 DA:126,1 DA:127,1 DA:129,1 DA:131,1 DA:132,1 DA:133,1 DA:142,1 DA:145,1 DA:146,1 DA:152,0 LF:59 LH:53 FN:57,77,make_tarball_bytes FNDA:1,make_tarball_bytes FN:86,108,tmp_data_dir FNDA:1,tmp_data_dir FN:112,118,initialized_db FNDA:1,initialized_db FN:127,133,client FNDA:1,client FN:146,152,valid_token FNDA:0,valid_token FNF:5 FNH:4 end_of_record SF:tests/test_auth.py DA:7,1 DA:9,1 DA:10,1 DA:11,1 DA:13,1 DA:14,1 DA:16,1 DA:17,1 DA:18,1 DA:19,1 DA:26,1 DA:38,1 DA:39,1 DA:40,1 DA:41,1 DA:43,1 DA:44,1 DA:45,1 DA:46,1 DA:48,1 DA:49,1 DA:50,1 DA:51,1 DA:53,1 DA:54,1 DA:55,1 DA:57,1 DA:58,1 DA:60,1 DA:61,1 DA:62,1 DA:63,1 DA:64,1 DA:66,1 DA:67,1 DA:68,1 DA:69,1 DA:70,1 DA:71,1 DA:73,1 DA:74,1 DA:75,1 DA:76,1 DA:78,1 DA:79,1 DA:80,1 DA:81,1 DA:83,1 DA:84,1 DA:92,1 DA:95,1 DA:96,1 DA:99,1 DA:100,1 DA:101,1 DA:102,1 DA:104,1 DA:105,1 DA:106,1 DA:109,1 DA:110,1 DA:111,1 DA:112,1 DA:113,1 DA:115,1 DA:116,1 DA:117,1 DA:120,1 DA:121,1 DA:123,1 DA:125,1 DA:126,1 DA:127,1 DA:130,1 DA:131,1 DA:132,1 DA:134,1 DA:136,1 DA:137,1 DA:138,1 DA:141,1 DA:144,1 DA:145,1 DA:146,1 DA:149,1 DA:151,1 DA:152,1 DA:153,1 DA:156,1 DA:157,1 DA:158,1 DA:159,1 DA:160,1 DA:161,1 DA:162,1 DA:170,1 DA:171,1 DA:173,1 DA:174,1 DA:175,1 DA:176,1 DA:178,1 DA:179,1 DA:185,1 DA:186,1 DA:187,1 DA:188,1 DA:189,1 DA:190,1 DA:192,1 DA:193,1 DA:199,1 DA:200,1 DA:201,1 DA:202,1 DA:204,1 DA:205,1 DA:213,1 DA:214,1 DA:215,1 DA:216,1 DA:218,1 DA:219,1 DA:220,1 DA:221,1 DA:222,1 DA:230,1 DA:231,1 DA:232,1 DA:233,1 DA:234,1 DA:235,1 DA:238,1 DA:241,1 DA:242,1 DA:243,1 DA:245,1 DA:246,0 DA:248,1 DA:249,0 DA:251,1 DA:252,0 DA:254,1 DA:255,1 DA:257,1 DA:258,1 DA:259,1 DA:260,1 DA:261,1 DA:269,1 DA:272,1 DA:273,1 DA:274,0 DA:276,1 DA:277,1 DA:279,1 DA:280,1 DA:281,0 DA:282,1 DA:284,1 DA:285,1 DA:287,1 DA:290,1 DA:291,1 DA:292,1 DA:293,1 DA:294,1 DA:296,1 DA:297,1 DA:300,1 DA:302,1 DA:304,1 DA:305,1 DA:307,1 DA:326,1 DA:327,1 DA:330,1 DA:331,1 DA:333,1 DA:334,1 DA:335,1 DA:336,1 DA:337,1 DA:338,1 DA:339,1 DA:340,1 DA:341,1 DA:343,1 DA:346,1 DA:347,1 DA:349,1 DA:351,1 DA:352,1 DA:355,1 DA:356,1 DA:358,1 DA:359,1 DA:361,1 DA:362,1 DA:365,1 DA:367,1 DA:368,1 DA:369,1 DA:370,1 DA:372,1 DA:375,1 DA:376,1 DA:377,1 DA:381,1 DA:382,1 DA:383,1 DA:384,1 DA:386,1 DA:387,1 DA:391,1 DA:394,1 DA:395,1 DA:396,1 DA:400,1 DA:402,1 DA:404,1 DA:408,1 DA:410,1 DA:411,1 DA:413,1 DA:414,1 DA:415,1 DA:417,1 DA:418,1 DA:422,1 DA:424,1 DA:425,1 DA:429,1 DA:431,1 DA:434,1 DA:438,1 DA:439,1 DA:442,1 DA:443,1 DA:445,1 DA:446,1 DA:447,1 DA:450,1 DA:451,1 DA:455,1 DA:456,1 DA:459,1 DA:460,1 DA:461,1 DA:465,1 DA:467,1 DA:468,1 DA:472,1 DA:474,1 DA:476,1 DA:479,1 DA:483,1 DA:484,1 DA:485,1 DA:487,1 DA:488,1 DA:492,1 DA:493,1 DA:496,1 DA:497,1 DA:499,1 DA:500,1 DA:508,1 DA:509,1 DA:513,1 DA:516,1 DA:517,1 DA:521,1 DA:522,1 DA:523,1 DA:526,1 DA:527,1 DA:531,1 DA:532,1 DA:534,1 DA:536,1 DA:539,1 DA:543,1 DA:544,1 DA:545,1 DA:547,1 DA:548,1 DA:552,1 DA:555,1 DA:556,1 DA:558,1 DA:559,1 DA:567,1 DA:568,1 DA:572,1 DA:573,1 DA:574,1 DA:577,1 DA:578,1 DA:582,1 DA:583,1 DA:591,1 DA:594,1 DA:599,1 DA:600,1 DA:602,1 DA:603,1 DA:610,1 DA:615,1 DA:616,1 DA:617,1 DA:619,1 DA:623,1 DA:626,1 DA:627,1 DA:629,1 DA:630,1 DA:637,1 DA:642,1 DA:644,1 DA:648,1 DA:649,1 DA:651,1 DA:652,1 DA:660,1 DA:664,1 DA:665,1 DA:667,1 DA:668,1 DA:669,1 DA:670,1 DA:672,1 DA:673,1 DA:678,1 DA:681,1 DA:682,1 DA:685,1 DA:687,1 DA:692,1 DA:693,1 DA:695,1 DA:696,1 DA:704,1 DA:706,1 DA:710,1 DA:711,1 DA:712,1 DA:714,1 DA:715,1 DA:719,1 DA:722,1 DA:723,1 DA:726,1 DA:727,1 DA:728,1 DA:730,1 DA:735,1 DA:736,1 DA:738,1 DA:739,1 DA:747,1 DA:751,1 DA:752,1 DA:754,1 DA:755,1 DA:756,1 DA:757,1 DA:759,1 DA:760,1 DA:764,1 DA:767,1 DA:768,1 DA:772,1 DA:773,1 DA:774,1 DA:776,1 DA:778,1 DA:779,1 DA:781,1 DA:782,1 DA:790,1 DA:794,1 DA:795,1 DA:797,1 DA:798,1 DA:799,1 DA:800,1 DA:802,1 DA:803,1 DA:807,1 DA:810,1 DA:811,1 DA:816,1 DA:818,1 DA:820,1 DA:821,1 DA:823,1 DA:825,1 DA:833,1 DA:837,1 DA:838,1 DA:840,1 DA:841,1 DA:842,1 DA:843,1 DA:845,1 DA:846,1 DA:850,1 DA:853,1 DA:854,1 DA:858,1 DA:859,1 DA:860,1 DA:863,1 DA:866,1 DA:867,1 DA:868,1 DA:870,1 DA:871,1 DA:872,1 DA:875,1 DA:878,1 DA:880,1 DA:881,1 DA:883,1 DA:885,1 DA:892,1 DA:896,1 DA:899,1 DA:902,1 DA:906,1 DA:907,1 DA:909,1 DA:910,1 DA:917,1 DA:922,1 DA:926,1 DA:928,1 DA:932,1 DA:933,1 DA:935,1 DA:936,1 DA:943,1 DA:948,1 DA:952,1 DA:954,1 DA:956,1 DA:960,1 DA:968,1 DA:969,1 DA:970,1 DA:971,1 DA:973,1 DA:974,1 DA:976,1 DA:981,1 DA:982,1 DA:984,1 DA:985,1 DA:987,1 DA:994,1 DA:1001,1 DA:1002,1 LF:463 LH:458 FN:39,41,TestAuthzCache.test_get_miss FNDA:1,TestAuthzCache.test_get_miss FN:43,46,TestAuthzCache.test_set_and_get FNDA:1,TestAuthzCache.test_set_and_get FN:48,51,TestAuthzCache.test_denied_cached FNDA:1,TestAuthzCache.test_denied_cached FN:53,58,TestAuthzCache.test_expired_entry_returns_none FNDA:1,TestAuthzCache.test_expired_entry_returns_none FN:60,64,TestAuthzCache.test_clear FNDA:1,TestAuthzCache.test_clear FN:66,71,TestAuthzCache.test_different_keys_independent FNDA:1,TestAuthzCache.test_different_keys_independent FN:73,84,TestAuthzCache.test_eviction_on_max_size FNDA:1,TestAuthzCache.test_eviction_on_max_size FN:95,96,_FakeRequest.__init__ FNDA:1,_FakeRequest.__init__ FN:100,102,TestSessionHelpers.test_get_provider_session_empty FNDA:1,TestSessionHelpers.test_get_provider_session_empty FN:104,113,TestSessionHelpers.test_set_and_get_provider_session FNDA:1,TestSessionHelpers.test_set_and_get_provider_session FN:115,123,TestSessionHelpers.test_clear_provider_session FNDA:1,TestSessionHelpers.test_clear_provider_session FN:125,134,TestSessionHelpers.test_clear_provider_session_keeps_other_providers FNDA:1,TestSessionHelpers.test_clear_provider_session_keeps_other_providers FN:136,149,TestSessionHelpers.test_clear_all_sessions FNDA:1,TestSessionHelpers.test_clear_all_sessions FN:151,162,TestSessionHelpers.test_multiple_providers_independent FNDA:1,TestSessionHelpers.test_multiple_providers_independent FN:171,176,TestLoadAuthConfig.test_defaults_disabled FNDA:1,TestLoadAuthConfig.test_defaults_disabled FN:178,190,TestLoadAuthConfig.test_github_provider_from_env FNDA:1,TestLoadAuthConfig.test_github_provider_from_env FN:192,202,TestLoadAuthConfig.test_gitea_provider_from_env FNDA:1,TestLoadAuthConfig.test_gitea_provider_from_env FN:204,216,TestLoadAuthConfig.test_url_to_provider_mapping FNDA:1,TestLoadAuthConfig.test_url_to_provider_mapping FN:218,222,TestLoadAuthConfig.test_cache_ttl_from_env FNDA:1,TestLoadAuthConfig.test_cache_ttl_from_env FN:231,235,TestResourceDescriptor.test_defaults FNDA:1,TestResourceDescriptor.test_defaults FN:241,261,TestOAuthProviderCanView.test_delegates_to_can_view_repo FNDA:1,TestOAuthProviderCanView.test_delegates_to_can_view_repo FN:245,246,TestOAuthProviderCanView.test_delegates_to_can_view_repo.StubProvider.get_authorize_url FNDA:0,TestOAuthProviderCanView.test_delegates_to_can_view_repo.StubProvider.get_authorize_url FN:248,249,TestOAuthProviderCanView.test_delegates_to_can_view_repo.StubProvider.exchange_code FNDA:0,TestOAuthProviderCanView.test_delegates_to_can_view_repo.StubProvider.exchange_code FN:251,252,TestOAuthProviderCanView.test_delegates_to_can_view_repo.StubProvider.get_user FNDA:0,TestOAuthProviderCanView.test_delegates_to_can_view_repo.StubProvider.get_user FN:254,255,TestOAuthProviderCanView.test_delegates_to_can_view_repo.StubProvider.can_view_repo FNDA:1,TestOAuthProviderCanView.test_delegates_to_can_view_repo.StubProvider.can_view_repo FN:273,274,_FakeProvider.name FNDA:0,_FakeProvider.name FN:276,277,_FakeProvider.get_authorize_url FNDA:1,_FakeProvider.get_authorize_url FN:279,282,_FakeProvider.exchange_code FNDA:1,_FakeProvider.exchange_code FN:284,285,_FakeProvider.get_user FNDA:1,_FakeProvider.get_user FN:287,294,_FakeProvider.can_view_repo FNDA:1,_FakeProvider.can_view_repo FN:296,297,_FakeProvider.is_repo_public FNDA:1,_FakeProvider.is_repo_public FN:300,352,_make_fake_auth_state FNDA:1,_make_fake_auth_state FN:330,341,_make_fake_auth_state._lookup FNDA:1,_make_fake_auth_state._lookup FN:346,349,_make_fake_auth_state._url_lookup FNDA:1,_make_fake_auth_state._url_lookup FN:356,372,auth_client FNDA:1,auth_client FN:376,384,TestAuthLoginRoute.test_login_redirects_to_provider FNDA:1,TestAuthLoginRoute.test_login_redirects_to_provider FN:386,391,TestAuthLoginRoute.test_login_unknown_provider_404 FNDA:1,TestAuthLoginRoute.test_login_unknown_provider_404 FN:395,400,TestAuthCallbackRoute.test_callback_invalid_state_403 FNDA:1,TestAuthCallbackRoute.test_callback_invalid_state_403 FN:402,422,TestAuthCallbackRoute.test_callback_missing_code_400 FNDA:1,TestAuthCallbackRoute.test_callback_missing_code_400 FN:424,429,TestAuthCallbackRoute.test_callback_error_param_403 FNDA:1,TestAuthCallbackRoute.test_callback_error_param_403 FN:431,456,TestAuthCallbackRoute.test_full_login_flow FNDA:1,TestAuthCallbackRoute.test_full_login_flow FN:460,465,TestAuthLogoutRoute.test_logout_redirects FNDA:1,TestAuthLogoutRoute.test_logout_redirects FN:467,472,TestAuthLogoutRoute.test_logout_all FNDA:1,TestAuthLogoutRoute.test_logout_all FN:474,532,TestAuthLogoutRoute.test_logout_clears_session FNDA:1,TestAuthLogoutRoute.test_logout_clears_session FN:534,583,TestAuthLogoutRoute.test_logout_all_clears_session FNDA:1,TestAuthLogoutRoute.test_logout_all_clears_session FN:594,621,TestRequireViewPermission.test_unauthenticated_browser_redirects_to_login FNDA:1,TestRequireViewPermission.test_unauthenticated_browser_redirects_to_login FN:623,642,TestRequireViewPermission.test_unauthenticated_api_returns_401 FNDA:1,TestRequireViewPermission.test_unauthenticated_api_returns_401 FN:644,685,TestRequireViewPermission.test_authenticated_allowed_repo_succeeds FNDA:1,TestRequireViewPermission.test_authenticated_allowed_repo_succeeds FN:687,728,TestRequireViewPermission.test_protected_response_has_no_cache_headers FNDA:1,TestRequireViewPermission.test_protected_response_has_no_cache_headers FN:730,774,TestRequireViewPermission.test_authenticated_denied_repo_returns_403 FNDA:1,TestRequireViewPermission.test_authenticated_denied_repo_returns_403 FN:776,816,TestRequireViewPermission.test_authenticated_denied_api_returns_404 FNDA:1,TestRequireViewPermission.test_authenticated_denied_api_returns_404 FN:818,860,TestRequireViewPermission.test_expired_token_redirects_to_login FNDA:1,TestRequireViewPermission.test_expired_token_redirects_to_login FN:866,868,TestAuthDisabledPassthrough.test_dashboard_accessible_without_login FNDA:1,TestAuthDisabledPassthrough.test_dashboard_accessible_without_login FN:870,872,TestAuthDisabledPassthrough.test_api_accessible_without_login FNDA:1,TestAuthDisabledPassthrough.test_api_accessible_without_login FN:878,896,TestPublicRepoBypass.test_public_repo_no_login_needed FNDA:1,TestPublicRepoBypass.test_public_repo_no_login_needed FN:902,926,TestUnconfiguredProviderBypass.test_unconfigured_provider_public_repo_allowed FNDA:1,TestUnconfiguredProviderBypass.test_unconfigured_provider_public_repo_allowed FN:928,952,TestUnconfiguredProviderBypass.test_unconfigured_provider_private_repo_denied FNDA:1,TestUnconfiguredProviderBypass.test_unconfigured_provider_private_repo_denied FN:954,960,TestUnconfiguredProviderBypass.test_unknown_repo_denied FNDA:1,TestUnconfiguredProviderBypass.test_unknown_repo_denied FN:969,971,TestProviderUrlForRepo.test_returns_none_for_unknown FNDA:1,TestProviderUrlForRepo.test_returns_none_for_unknown FN:973,982,TestProviderUrlForRepo.test_returns_provider_url FNDA:1,TestProviderUrlForRepo.test_returns_provider_url FN:984,1002,TestProviderUrlForRepo.test_returns_latest FNDA:1,TestProviderUrlForRepo.test_returns_latest FNF:61 FNH:57 end_of_record SF:tests/test_badges.py DA:3,1 DA:5,1 DA:7,1 DA:21,1 DA:22,1 DA:23,1 DA:25,1 DA:26,1 DA:27,1 DA:29,1 DA:30,1 DA:31,1 DA:33,1 DA:34,1 DA:35,1 DA:37,1 DA:38,1 DA:39,1 DA:41,1 DA:43,1 DA:44,1 DA:45,1 DA:46,1 DA:47,1 DA:48,1 DA:56,1 DA:57,1 DA:58,1 DA:60,1 DA:61,1 DA:63,1 DA:64,1 DA:66,1 DA:67,1 DA:69,1 DA:70,1 DA:72,1 DA:73,1 DA:75,1 DA:76,1 DA:78,1 DA:79,1 DA:87,1 DA:88,1 DA:89,1 DA:91,1 DA:92,1 DA:93,1 DA:94,1 DA:96,1 DA:97,1 DA:105,1 DA:106,1 DA:107,1 DA:108,1 DA:109,1 DA:110,1 DA:111,1 DA:113,1 DA:114,1 DA:115,1 DA:116,1 DA:118,1 DA:119,1 DA:120,1 DA:122,1 DA:123,1 DA:124,1 DA:126,1 DA:127,1 DA:128,1 DA:136,1 DA:137,1 DA:138,1 DA:139,1 DA:140,1 DA:142,1 DA:143,1 DA:144,1 DA:146,1 DA:147,1 DA:148,1 DA:149,1 DA:151,1 DA:152,1 DA:153,1 DA:154,1 DA:156,1 DA:157,1 DA:158,1 DA:166,1 DA:167,1 DA:168,1 DA:170,1 DA:171,1 DA:173,1 DA:174,1 DA:176,1 DA:177,1 DA:179,1 DA:180,1 DA:182,1 DA:183,1 DA:185,1 DA:186,1 DA:187,1 DA:189,1 DA:190,1 LF:108 LH:108 FN:22,23,TestBadgeColor.test_none_returns_grey FNDA:1,TestBadgeColor.test_none_returns_grey FN:25,27,TestBadgeColor.test_below_50_returns_red FNDA:1,TestBadgeColor.test_below_50_returns_red FN:29,31,TestBadgeColor.test_50_to_75_returns_orange FNDA:1,TestBadgeColor.test_50_to_75_returns_orange FN:33,35,TestBadgeColor.test_75_to_90_returns_yellow FNDA:1,TestBadgeColor.test_75_to_90_returns_yellow FN:37,39,TestBadgeColor.test_90_plus_returns_green FNDA:1,TestBadgeColor.test_90_plus_returns_green FN:41,48,TestBadgeColor.test_exact_boundaries FNDA:1,TestBadgeColor.test_exact_boundaries FN:57,58,TestEscapeXml.test_ampersand FNDA:1,TestEscapeXml.test_ampersand FN:60,61,TestEscapeXml.test_less_than FNDA:1,TestEscapeXml.test_less_than FN:63,64,TestEscapeXml.test_greater_than FNDA:1,TestEscapeXml.test_greater_than FN:66,67,TestEscapeXml.test_double_quote FNDA:1,TestEscapeXml.test_double_quote FN:69,70,TestEscapeXml.test_single_quote FNDA:1,TestEscapeXml.test_single_quote FN:72,73,TestEscapeXml.test_no_escaping_needed FNDA:1,TestEscapeXml.test_no_escaping_needed FN:75,76,TestEscapeXml.test_multiple_special FNDA:1,TestEscapeXml.test_multiple_special FN:78,79,TestEscapeXml.test_empty FNDA:1,TestEscapeXml.test_empty FN:88,89,TestTextPxWidth.test_empty_string FNDA:1,TestTextPxWidth.test_empty_string FN:91,94,TestTextPxWidth.test_positive_width FNDA:1,TestTextPxWidth.test_positive_width FN:96,97,TestTextPxWidth.test_longer_string_wider FNDA:1,TestTextPxWidth.test_longer_string_wider FN:106,111,TestRenderBadgeSvg.test_returns_valid_svg FNDA:1,TestRenderBadgeSvg.test_returns_valid_svg FN:113,116,TestRenderBadgeSvg.test_escapes_special_characters_in_label FNDA:1,TestRenderBadgeSvg.test_escapes_special_characters_in_label FN:118,120,TestRenderBadgeSvg.test_escapes_special_characters_in_message FNDA:1,TestRenderBadgeSvg.test_escapes_special_characters_in_message FN:122,124,TestRenderBadgeSvg.test_svg_has_role_img FNDA:1,TestRenderBadgeSvg.test_svg_has_role_img FN:126,128,TestRenderBadgeSvg.test_svg_has_aria_label FNDA:1,TestRenderBadgeSvg.test_svg_has_aria_label FN:137,140,TestSvgResponse.test_returns_response_with_svg_content_type FNDA:1,TestSvgResponse.test_returns_response_with_svg_content_type FN:142,144,TestSvgResponse.test_cache_control_header FNDA:1,TestSvgResponse.test_cache_control_header FN:146,149,TestSvgResponse.test_etag_header_is_deterministic FNDA:1,TestSvgResponse.test_etag_header_is_deterministic FN:151,154,TestSvgResponse.test_etag_differs_for_different_seeds FNDA:1,TestSvgResponse.test_etag_differs_for_different_seeds FN:156,158,TestSvgResponse.test_body_is_svg FNDA:1,TestSvgResponse.test_body_is_svg FN:167,168,TestCoverageMessage.test_none_returns_unknown FNDA:1,TestCoverageMessage.test_none_returns_unknown FN:170,171,TestCoverageMessage.test_zero FNDA:1,TestCoverageMessage.test_zero FN:173,174,TestCoverageMessage.test_normal_value FNDA:1,TestCoverageMessage.test_normal_value FN:176,177,TestCoverageMessage.test_hundred FNDA:1,TestCoverageMessage.test_hundred FN:179,180,TestCoverageMessage.test_negative_clamped FNDA:1,TestCoverageMessage.test_negative_clamped FN:182,183,TestCoverageMessage.test_over_100_clamped FNDA:1,TestCoverageMessage.test_over_100_clamped FN:185,187,TestCoverageMessage.test_custom_decimals FNDA:1,TestCoverageMessage.test_custom_decimals FN:189,190,TestCoverageMessage.test_none_with_decimals FNDA:1,TestCoverageMessage.test_none_with_decimals FNF:35 FNH:35 end_of_record SF:tests/test_config.py DA:3,1 DA:5,1 DA:7,1 DA:15,1 DA:42,1 DA:57,1 DA:58,1 DA:59,1 DA:60,1 DA:61,1 DA:62,1 DA:63,1 DA:64,1 DA:65,1 DA:67,1 DA:68,1 DA:69,1 DA:70,1 DA:72,1 DA:73,1 DA:74,1 DA:75,1 DA:76,1 DA:77,1 DA:78,1 DA:79,1 DA:80,1 DA:82,1 DA:83,1 DA:84,1 DA:85,1 DA:86,1 DA:87,1 DA:88,1 DA:89,1 DA:91,1 DA:92,1 DA:93,1 DA:94,1 DA:95,1 DA:96,1 DA:98,1 DA:99,1 DA:100,1 DA:101,1 DA:102,1 DA:103,1 DA:105,1 DA:106,1 DA:109,1 DA:110,1 DA:111,1 DA:113,1 DA:114,1 DA:115,1 DA:116,1 DA:117,1 DA:118,1 DA:119,1 DA:120,1 DA:121,1 DA:122,1 DA:124,1 DA:125,1 DA:126,1 DA:128,1 DA:129,1 DA:130,1 DA:132,1 DA:133,1 DA:134,1 DA:139,1 DA:140,1 DA:141,1 DA:142,1 DA:143,1 DA:146,1 DA:147,1 DA:148,1 DA:149,1 DA:151,1 DA:152,1 DA:153,1 DA:161,1 DA:162,1 DA:163,1 DA:165,1 DA:166,1 DA:168,1 DA:169,1 DA:173,1 DA:174,1 DA:178,1 DA:179,1 DA:183,1 DA:184,1 DA:186,1 DA:187,1 DA:191,1 DA:192,1 DA:194,1 DA:195,1 DA:199,1 DA:200,1 DA:204,1 DA:205,1 DA:207,1 DA:208,1 DA:209,1 DA:211,1 DA:219,1 DA:220,1 DA:221,1 DA:222,1 DA:223,1 DA:224,1 DA:225,1 DA:226,1 DA:228,1 DA:229,1 DA:230,1 DA:232,1 DA:234,1 DA:236,1 DA:237,1 DA:238,1 DA:239,1 DA:241,1 DA:242,1 DA:243,1 DA:244,1 DA:245,1 DA:246,1 DA:247,1 DA:249,1 DA:250,1 DA:251,1 DA:252,1 DA:253,1 DA:254,1 DA:256,1 DA:257,1 DA:258,1 DA:259,1 DA:260,1 DA:261,1 DA:262,1 DA:264,1 DA:265,1 DA:268,1 DA:269,1 DA:270,1 DA:271,1 DA:279,1 DA:280,1 DA:281,1 DA:282,1 DA:283,1 DA:284,1 DA:285,1 DA:287,1 DA:288,1 DA:289,1 LF:163 LH:163 FN:58,65,TestFromStr.test_global_section FNDA:1,TestFromStr.test_global_section FN:67,70,TestFromStr.test_providers_parsed FNDA:1,TestFromStr.test_providers_parsed FN:72,80,TestFromStr.test_provider_fields FNDA:1,TestFromStr.test_provider_fields FN:82,89,TestFromStr.test_provider_oauth_configured FNDA:1,TestFromStr.test_provider_oauth_configured FN:91,96,TestFromStr.test_owner_section FNDA:1,TestFromStr.test_owner_section FN:98,103,TestFromStr.test_repo_section FNDA:1,TestFromStr.test_repo_section FN:105,111,TestFromStr.test_url_trailing_slash_stripped FNDA:1,TestFromStr.test_url_trailing_slash_stripped FN:113,122,TestFromStr.test_multiple_same_type FNDA:1,TestFromStr.test_multiple_same_type FN:124,126,TestFromStr.test_missing_type_raises FNDA:1,TestFromStr.test_missing_type_raises FN:128,130,TestFromStr.test_missing_url_raises FNDA:1,TestFromStr.test_missing_url_raises FN:132,136,TestFromStr.test_invalid_provider_name_raises FNDA:1,TestFromStr.test_invalid_provider_name_raises FN:140,143,TestDefault.test_empty FNDA:1,TestDefault.test_empty FN:147,149,TestProviderUrl.test_known_provider FNDA:1,TestProviderUrl.test_known_provider FN:151,153,TestProviderUrl.test_unknown_provider FNDA:1,TestProviderUrl.test_unknown_provider FN:162,163,TestVerifyReportKey.setup_method FNDA:1,TestVerifyReportKey.setup_method FN:165,166,TestVerifyReportKey.test_repo_level_key_matches FNDA:1,TestVerifyReportKey.test_repo_level_key_matches FN:168,171,TestVerifyReportKey.test_owner_level_key_matches FNDA:1,TestVerifyReportKey.test_owner_level_key_matches FN:173,176,TestVerifyReportKey.test_provider_level_key_matches FNDA:1,TestVerifyReportKey.test_provider_level_key_matches FN:178,181,TestVerifyReportKey.test_global_key_matches FNDA:1,TestVerifyReportKey.test_global_key_matches FN:183,184,TestVerifyReportKey.test_global_key_works_for_all_providers FNDA:1,TestVerifyReportKey.test_global_key_works_for_all_providers FN:186,189,TestVerifyReportKey.test_wrong_key_denied FNDA:1,TestVerifyReportKey.test_wrong_key_denied FN:191,192,TestVerifyReportKey.test_unknown_provider_denied FNDA:1,TestVerifyReportKey.test_unknown_provider_denied FN:194,197,TestVerifyReportKey.test_repo_key_does_not_work_for_other_repo FNDA:1,TestVerifyReportKey.test_repo_key_does_not_work_for_other_repo FN:199,202,TestVerifyReportKey.test_owner_key_does_not_work_for_other_owner FNDA:1,TestVerifyReportKey.test_owner_key_does_not_work_for_other_owner FN:204,205,TestVerifyReportKey.test_provider_key_does_not_work_for_other_provider FNDA:1,TestVerifyReportKey.test_provider_key_does_not_work_for_other_provider FN:207,211,TestVerifyReportKey.test_no_global_key FNDA:1,TestVerifyReportKey.test_no_global_key FN:220,226,TestToAuthConfig.test_produces_auth_config FNDA:1,TestToAuthConfig.test_produces_auth_config FN:228,234,TestToAuthConfig.test_only_oauth_providers_included FNDA:1,TestToAuthConfig.test_only_oauth_providers_included FN:236,239,TestToAuthConfig.test_url_to_provider_mapping FNDA:1,TestToAuthConfig.test_url_to_provider_mapping FN:241,247,TestToAuthConfig.test_github_api_urls FNDA:1,TestToAuthConfig.test_github_api_urls FN:249,254,TestToAuthConfig.test_github_enterprise_api_urls FNDA:1,TestToAuthConfig.test_github_enterprise_api_urls FN:256,262,TestToAuthConfig.test_gitea_api_urls FNDA:1,TestToAuthConfig.test_gitea_api_urls FN:264,271,TestToAuthConfig.test_unknown_type_raises FNDA:1,TestToAuthConfig.test_unknown_type_raises FN:280,285,TestFromFile.test_loads_from_path FNDA:1,TestFromFile.test_loads_from_path FN:287,289,TestFromFile.test_missing_file_raises FNDA:1,TestFromFile.test_missing_file_raises FNF:35 FNH:35 end_of_record SF:tests/test_db.py DA:3,1 DA:5,1 DA:6,1 DA:8,1 DA:9,1 DA:16,1 DA:17,1 DA:18,1 DA:19,1 DA:20,1 DA:21,1 DA:23,1 DA:24,1 DA:25,1 DA:26,1 DA:27,1 DA:28,1 DA:29,1 DA:30,1 DA:32,1 DA:33,1 DA:41,1 DA:42,1 DA:44,1 DA:45,1 DA:48,1 DA:50,1 DA:51,1 DA:52,1 DA:53,1 DA:55,1 DA:57,1 DA:59,1 DA:61,1 DA:62,1 DA:65,1 DA:66,1 DA:74,1 DA:75,1 DA:76,1 DA:77,1 DA:79,1 DA:80,1 DA:81,1 DA:82,1 DA:83,1 DA:84,1 DA:86,1 DA:87,1 DA:88,1 DA:89,1 DA:90,1 DA:92,1 DA:93,1 DA:94,1 DA:95,1 DA:96,1 DA:97,1 DA:105,1 DA:106,1 DA:107,1 DA:108,1 DA:110,1 DA:111,1 DA:112,1 DA:123,1 DA:124,1 DA:125,1 DA:126,1 DA:127,1 DA:129,1 DA:130,1 DA:131,1 DA:143,1 DA:144,1 DA:145,1 DA:147,1 DA:148,1 DA:149,1 DA:160,1 DA:161,1 DA:169,1 DA:170,1 DA:171,1 DA:172,1 DA:174,1 DA:175,1 DA:176,1 DA:185,1 DA:186,1 DA:194,1 DA:195,1 DA:196,1 DA:197,1 DA:199,1 DA:200,1 DA:201,1 DA:209,1 DA:218,1 DA:219,1 DA:220,1 DA:221,1 DA:223,1 DA:224,1 DA:225,1 DA:226,1 DA:235,1 DA:236,1 DA:244,1 DA:245,1 DA:246,1 DA:247,1 DA:249,1 DA:250,1 DA:251,1 DA:262,1 DA:263,1 DA:264,1 DA:272,1 DA:273,1 DA:274,1 DA:275,1 DA:277,1 DA:278,1 DA:279,1 DA:290,1 DA:293,1 DA:294,1 DA:295,1 DA:297,1 DA:298,1 DA:301,1 DA:302,1 DA:310,1 DA:311,1 DA:312,1 DA:313,1 DA:316,1 DA:317,1 DA:318,1 DA:319,1 DA:321,1 DA:322,1 DA:323,1 DA:324,1 DA:327,1 DA:330,1 DA:331,1 DA:334,1 DA:335,1 LF:150 LH:150 FN:17,21,TestConfigure.test_configure_creates_engine FNDA:1,TestConfigure.test_configure_creates_engine FN:23,33,TestConfigure.test_session_factory_raises_if_not_configured FNDA:1,TestConfigure.test_session_factory_raises_if_not_configured FN:42,53,TestInitDb.test_creates_tables FNDA:1,TestInitDb.test_creates_tables FN:55,57,TestInitDb.test_idempotent FNDA:1,TestInitDb.test_idempotent FN:59,66,TestInitDb.test_creates_alembic_version_table FNDA:1,TestInitDb.test_creates_alembic_version_table FN:75,84,TestUpsertRepoSeen.test_insert_new FNDA:1,TestUpsertRepoSeen.test_insert_new FN:86,97,TestUpsertRepoSeen.test_upsert_updates_last_seen FNDA:1,TestUpsertRepoSeen.test_upsert_updates_last_seen FN:106,108,TestLatestReportForRepoHash.test_returns_none_when_empty FNDA:1,TestLatestReportForRepoHash.test_returns_none_when_empty FN:110,127,TestLatestReportForRepoHash.test_returns_row FNDA:1,TestLatestReportForRepoHash.test_returns_row FN:129,145,TestLatestReportForRepoHash.test_returns_custom_provider_url FNDA:1,TestLatestReportForRepoHash.test_returns_custom_provider_url FN:147,161,TestLatestReportForRepoHash.test_different_hash_not_found FNDA:1,TestLatestReportForRepoHash.test_different_hash_not_found FN:170,172,TestLatestBranchHeadHash.test_returns_none_when_empty FNDA:1,TestLatestBranchHeadHash.test_returns_none_when_empty FN:174,186,TestLatestBranchHeadHash.test_returns_hash FNDA:1,TestLatestBranchHeadHash.test_returns_hash FN:195,197,TestBranchEventsFor.test_empty FNDA:1,TestBranchEventsFor.test_empty FN:199,221,TestBranchEventsFor.test_returns_events_ordered FNDA:1,TestBranchEventsFor.test_returns_events_ordered FN:223,236,TestBranchEventsFor.test_limit_applied FNDA:1,TestBranchEventsFor.test_limit_applied FN:245,247,TestReportsTrendForRepoHash.test_empty FNDA:1,TestReportsTrendForRepoHash.test_empty FN:249,264,TestReportsTrendForRepoHash.test_returns_matching_records FNDA:1,TestReportsTrendForRepoHash.test_returns_matching_records FN:273,275,TestReportPercentForHashes.test_empty_pairs FNDA:1,TestReportPercentForHashes.test_empty_pairs FN:277,295,TestReportPercentForHashes.test_resolves_percent FNDA:1,TestReportPercentForHashes.test_resolves_percent FN:297,302,TestReportPercentForHashes.test_missing_hash_returns_zero FNDA:1,TestReportPercentForHashes.test_missing_hash_returns_zero FN:311,319,TestSession.test_commits_on_success FNDA:1,TestSession.test_commits_on_success FN:321,335,TestSession.test_rolls_back_on_error FNDA:1,TestSession.test_rolls_back_on_error FNF:23 FNH:23 end_of_record SF:tests/test_main.py DA:3,1 DA:5,1 DA:6,1 DA:7,1 DA:8,1 DA:10,1 DA:11,1 DA:12,1 DA:13,1 DA:16,1 DA:17,1 DA:18,1 DA:19,1 DA:31,1 DA:32,1 DA:33,1 DA:35,1 DA:36,1 DA:38,1 DA:39,1 DA:41,1 DA:42,1 DA:43,1 DA:44,1 DA:46,1 DA:47,1 DA:48,1 DA:50,1 DA:51,1 DA:52,1 DA:54,1 DA:55,1 DA:56,1 DA:64,1 DA:65,1 DA:66,1 DA:67,1 DA:68,1 DA:69,1 DA:71,1 DA:72,1 DA:73,1 DA:75,1 DA:76,1 DA:77,1 DA:79,1 DA:80,1 DA:81,1 DA:83,1 DA:84,1 DA:85,1 DA:93,1 DA:94,1 DA:95,1 DA:97,1 DA:98,1 DA:100,1 DA:101,1 DA:102,1 DA:103,1 DA:105,1 DA:106,1 DA:107,1 DA:109,1 DA:110,1 DA:111,1 DA:119,1 DA:120,1 DA:121,1 DA:128,1 DA:129,1 DA:130,1 DA:131,1 DA:132,1 DA:133,1 DA:134,1 DA:136,1 DA:137,1 DA:145,1 DA:147,1 DA:148,1 DA:156,1 DA:158,1 DA:159,1 DA:167,1 DA:169,1 DA:170,1 DA:177,1 DA:179,1 DA:180,1 DA:181,1 DA:189,1 DA:190,1 DA:191,1 DA:205,1 DA:206,1 DA:207,1 DA:209,1 DA:210,1 DA:212,1 DA:213,1 DA:215,1 DA:216,1 DA:217,1 DA:218,1 DA:220,1 DA:221,1 DA:223,1 DA:224,1 DA:225,1 DA:233,1 DA:234,1 DA:235,1 DA:236,1 DA:237,1 DA:245,1 DA:246,1 DA:247,1 DA:249,1 DA:250,1 DA:253,1 DA:254,1 DA:255,1 DA:263,1 DA:264,1 DA:265,1 DA:266,1 DA:267,1 DA:268,1 DA:270,1 DA:271,1 DA:272,1 DA:273,1 DA:274,1 DA:275,1 DA:277,1 DA:278,1 DA:279,1 DA:280,1 DA:281,1 DA:283,1 DA:284,1 DA:285,1 DA:286,1 DA:287,1 DA:295,1 DA:296,1 DA:297,1 DA:298,1 DA:299,1 DA:301,1 DA:302,1 DA:303,1 DA:304,1 DA:305,1 DA:307,1 DA:308,1 DA:310,1 DA:311,1 DA:312,1 DA:313,1 DA:315,1 DA:316,1 DA:317,1 DA:318,1 DA:319,1 DA:321,1 DA:322,1 DA:323,1 DA:331,1 DA:332,1 DA:333,1 DA:334,1 DA:336,1 DA:337,1 DA:338,1 DA:340,1 DA:341,1 DA:342,1 DA:344,1 DA:345,1 DA:346,1 DA:348,1 DA:349,1 DA:352,1 DA:354,1 DA:356,1 DA:357,1 DA:358,1 DA:360,1 DA:361,1 DA:362,1 DA:364,1 DA:365,1 DA:366,1 DA:372,1 DA:373,1 DA:375,1 DA:376,1 DA:377,1 DA:381,1 DA:382,1 DA:383,1 DA:391,1 DA:392,1 DA:393,1 DA:394,1 DA:395,1 DA:396,1 DA:398,1 DA:399,1 DA:401,1 DA:402,1 DA:403,1 DA:404,1 DA:406,1 DA:407,1 DA:408,1 DA:410,1 DA:411,1 DA:412,1 DA:413,1 DA:415,1 DA:416,1 DA:417,1 DA:419,1 DA:420,1 DA:423,1 DA:424,1 DA:426,1 DA:427,1 DA:428,1 DA:431,1 DA:432,1 DA:433,1 DA:434,1 DA:435,1 DA:436,1 DA:437,1 DA:438,1 DA:439,1 DA:441,1 DA:442,1 DA:445,1 DA:446,1 DA:459,1 DA:471,1 DA:472,1 DA:473,1 DA:474,1 DA:476,1 DA:477,1 DA:478,1 DA:479,1 DA:480,1 DA:482,1 DA:484,1 DA:485,1 DA:497,1 DA:503,1 DA:510,1 DA:511,1 DA:519,1 DA:521,1 DA:529,1 DA:530,1 DA:531,1 DA:532,1 DA:533,1 DA:541,1 DA:542,1 DA:543,1 DA:544,1 DA:545,1 DA:553,1 DA:554,1 DA:555,1 DA:556,1 DA:557,1 DA:558,1 DA:560,1 DA:563,1 DA:564,1 DA:565,1 DA:566,1 DA:574,1 DA:577,1 DA:578,1 DA:579,1 DA:580,1 DA:581,1 DA:582,1 DA:583,1 DA:585,1 DA:586,1 DA:587,1 DA:588,1 DA:590,1 DA:593,1 DA:594,1 DA:595,1 DA:598,1 DA:599,1 DA:600,1 DA:601,1 DA:602,1 DA:603,1 DA:604,1 DA:606,1 DA:609,1 DA:610,1 DA:611,1 DA:614,1 DA:615,1 DA:616,1 DA:617,1 DA:618,1 DA:621,1 DA:622,1 DA:623,1 DA:624,1 DA:625,1 DA:626,1 DA:628,1 DA:629,1 DA:630,1 DA:633,1 DA:634,1 DA:635,1 DA:636,1 DA:637,1 DA:639,1 DA:640,1 DA:641,1 DA:642,1 DA:650,1 DA:651,1 DA:652,1 DA:653,1 DA:654,1 DA:655,1 DA:656,1 DA:658,1 DA:661,1 DA:662,1 DA:663,1 DA:665,1 DA:666,1 DA:667,1 DA:668,1 DA:671,1 DA:672,1 DA:673,1 DA:674,1 DA:675,1 DA:676,1 DA:678,1 DA:681,1 DA:682,1 DA:683,1 DA:685,1 DA:686,1 DA:687,1 DA:688,1 DA:689,1 DA:697,1 DA:698,1 DA:699,1 DA:700,1 DA:701,1 DA:702,1 DA:704,1 DA:705,1 DA:706,1 DA:707,1 DA:708,1 DA:709,1 DA:711,1 DA:712,1 DA:713,1 DA:714,1 DA:715,1 DA:723,1 DA:724,1 DA:725,1 DA:726,1 DA:727,1 DA:728,1 DA:730,1 DA:731,1 DA:732,1 DA:733,1 DA:734,1 DA:735,1 DA:736,1 DA:744,1 DA:745,1 DA:746,1 DA:747,1 DA:748,1 DA:750,1 DA:751,1 DA:752,1 DA:753,1 DA:754,1 DA:755,1 DA:757,1 DA:767,1 DA:768,1 DA:769,1 DA:770,1 DA:771,1 DA:773,1 DA:774,1 DA:775,1 DA:776,1 DA:777,1 DA:785,1 DA:786,1 DA:787,1 DA:788,1 DA:789,1 DA:791,1 DA:792,1 DA:793,1 DA:794,1 DA:795,1 DA:796,1 DA:804,1 DA:805,1 DA:806,1 DA:807,1 DA:808,1 DA:810,1 DA:811,1 DA:812,1 DA:813,1 DA:814,1 DA:815,1 DA:823,1 DA:824,1 DA:825,1 DA:826,1 DA:827,1 DA:829,1 DA:830,1 DA:831,1 DA:832,1 DA:834,1 DA:835,1 DA:836,1 DA:837,1 DA:839,1 DA:840,1 DA:841,1 DA:842,1 DA:844,1 DA:847,1 DA:848,1 DA:850,1 DA:851,1 DA:852,1 DA:853,1 DA:855,1 DA:856,1 DA:857,1 DA:865,1 DA:866,1 DA:867,1 DA:869,1 DA:873,1 DA:874,1 DA:875,1 DA:877,1 DA:878,1 DA:879,1 DA:891,1 DA:892,1 DA:893,1 DA:894,1 DA:895,1 DA:897,1 DA:900,1 DA:901,1 DA:902,1 DA:914,1 DA:916,1 DA:917,1 DA:929,1 DA:931,1 DA:935,1 DA:936,1 DA:937,1 DA:938,1 DA:939,1 DA:940,1 DA:941,1 DA:943,1 DA:955,1 DA:957,1 DA:960,1 DA:961,1 DA:973,1 DA:974,1 DA:975,1 DA:978,1 DA:981,1 DA:982,1 DA:984,1 DA:987,1 DA:988,1 DA:999,1 DA:1001,1 DA:1004,1 DA:1005,1 DA:1007,1 DA:1009,1 DA:1010,1 DA:1020,1 LF:519 LH:519 FN:32,33,TestNormalizeRepoFull.test_valid FNDA:1,TestNormalizeRepoFull.test_valid FN:35,36,TestNormalizeRepoFull.test_strips_whitespace FNDA:1,TestNormalizeRepoFull.test_strips_whitespace FN:38,39,TestNormalizeRepoFull.test_strips_slashes FNDA:1,TestNormalizeRepoFull.test_strips_slashes FN:41,44,TestNormalizeRepoFull.test_missing_slash_raises FNDA:1,TestNormalizeRepoFull.test_missing_slash_raises FN:46,48,TestNormalizeRepoFull.test_empty_raises FNDA:1,TestNormalizeRepoFull.test_empty_raises FN:50,52,TestNormalizeRepoFull.test_empty_owner_raises FNDA:1,TestNormalizeRepoFull.test_empty_owner_raises FN:54,56,TestNormalizeRepoFull.test_empty_name_raises FNDA:1,TestNormalizeRepoFull.test_empty_name_raises FN:65,69,TestNormalizeOwnerRepo.test_valid FNDA:1,TestNormalizeOwnerRepo.test_valid FN:71,73,TestNormalizeOwnerRepo.test_empty_owner_raises FNDA:1,TestNormalizeOwnerRepo.test_empty_owner_raises FN:75,77,TestNormalizeOwnerRepo.test_empty_repo_raises FNDA:1,TestNormalizeOwnerRepo.test_empty_repo_raises FN:79,81,TestNormalizeOwnerRepo.test_non_string_owner_raises FNDA:1,TestNormalizeOwnerRepo.test_non_string_owner_raises FN:83,85,TestNormalizeOwnerRepo.test_non_string_repo_raises FNDA:1,TestNormalizeOwnerRepo.test_non_string_repo_raises FN:94,95,TestNormalizeSha.test_valid FNDA:1,TestNormalizeSha.test_valid FN:97,98,TestNormalizeSha.test_strips_whitespace FNDA:1,TestNormalizeSha.test_strips_whitespace FN:100,103,TestNormalizeSha.test_too_short_raises FNDA:1,TestNormalizeSha.test_too_short_raises FN:105,107,TestNormalizeSha.test_empty_raises FNDA:1,TestNormalizeSha.test_empty_raises FN:109,111,TestNormalizeSha.test_non_string_raises FNDA:1,TestNormalizeSha.test_non_string_raises FN:120,134,TestReportIngestDTO.test_from_form_valid FNDA:1,TestReportIngestDTO.test_from_form_valid FN:136,145,TestReportIngestDTO.test_from_form_with_provider_url FNDA:1,TestReportIngestDTO.test_from_form_with_provider_url FN:147,156,TestReportIngestDTO.test_from_form_provider_url_strips_trailing_slash FNDA:1,TestReportIngestDTO.test_from_form_provider_url_strips_trailing_slash FN:158,167,TestReportIngestDTO.test_from_form_empty_provider_url_defaults FNDA:1,TestReportIngestDTO.test_from_form_empty_provider_url_defaults FN:169,177,TestReportIngestDTO.test_empty_provider_name_allowed_in_legacy_mode FNDA:1,TestReportIngestDTO.test_empty_provider_name_allowed_in_legacy_mode FN:179,187,TestReportIngestDTO.test_empty_branch_raises FNDA:1,TestReportIngestDTO.test_empty_branch_raises FN:189,197,TestReportIngestDTO.test_short_sha_raises FNDA:1,TestReportIngestDTO.test_short_sha_raises FN:206,207,TestExtractToken.test_from_x_access_token FNDA:1,TestExtractToken.test_from_x_access_token FN:209,210,TestExtractToken.test_from_bearer FNDA:1,TestExtractToken.test_from_bearer FN:212,213,TestExtractToken.test_x_access_token_takes_precedence FNDA:1,TestExtractToken.test_x_access_token_takes_precedence FN:215,218,TestExtractToken.test_missing_both_raises FNDA:1,TestExtractToken.test_missing_both_raises FN:220,221,TestExtractToken.test_bearer_case_insensitive FNDA:1,TestExtractToken.test_bearer_case_insensitive FN:223,225,TestExtractToken.test_non_bearer_auth_raises FNDA:1,TestExtractToken.test_non_bearer_auth_raises FN:234,237,TestVerifyToken.test_invalid_token_raises FNDA:1,TestVerifyToken.test_invalid_token_raises FN:246,247,TestRepoToFs.test_replaces_slash FNDA:1,TestRepoToFs.test_replaces_slash FN:249,250,TestRepoToFs.test_no_slash FNDA:1,TestRepoToFs.test_no_slash FN:254,255,TestRepoFromOwnerName.test_valid FNDA:1,TestRepoFromOwnerName.test_valid FN:264,268,TestSafeJoinUnder.test_valid_join FNDA:1,TestSafeJoinUnder.test_valid_join FN:270,275,TestSafeJoinUnder.test_traversal_blocked FNDA:1,TestSafeJoinUnder.test_traversal_blocked FN:277,281,TestSafeJoinUnder.test_dot_dot_in_component FNDA:1,TestSafeJoinUnder.test_dot_dot_in_component FN:283,287,TestSafeJoinUnder.test_same_as_base FNDA:1,TestSafeJoinUnder.test_same_as_base FN:296,308,TestSafeExtractTar.test_extracts_normal_tar FNDA:1,TestSafeExtractTar.test_extracts_normal_tar FN:310,323,TestSafeExtractTar.test_blocks_path_traversal FNDA:1,TestSafeExtractTar.test_blocks_path_traversal FN:332,342,TestParseCoverageXml.test_parses_sample_xml FNDA:1,TestParseCoverageXml.test_parses_sample_xml FN:344,354,TestParseCoverageXml.test_per_file_uncovered_lines FNDA:1,TestParseCoverageXml.test_per_file_uncovered_lines FN:356,362,TestParseCoverageXml.test_invalid_xml_raises FNDA:1,TestParseCoverageXml.test_invalid_xml_raises FN:364,373,TestParseCoverageXml.test_missing_line_rate_defaults_to_zero FNDA:1,TestParseCoverageXml.test_missing_line_rate_defaults_to_zero FN:375,383,TestParseCoverageXml.test_empty_coverage FNDA:1,TestParseCoverageXml.test_empty_coverage FN:392,399,TestDashboardHtmlFor.test_hash_kind FNDA:1,TestDashboardHtmlFor.test_hash_kind FN:401,404,TestDashboardHtmlFor.test_branch_kind FNDA:1,TestDashboardHtmlFor.test_branch_kind FN:406,408,TestDashboardHtmlFor.test_contains_trend_limit FNDA:1,TestDashboardHtmlFor.test_contains_trend_limit FN:410,413,TestDashboardHtmlFor.test_hash_contains_nav_urls FNDA:1,TestDashboardHtmlFor.test_hash_contains_nav_urls FN:415,417,TestDashboardHtmlFor.test_branch_hides_spreadsheet FNDA:1,TestDashboardHtmlFor.test_branch_hides_spreadsheet FN:419,424,TestDashboardHtmlFor.test_custom_provider_url FNDA:1,TestDashboardHtmlFor.test_custom_provider_url FN:426,428,TestDashboardHtmlFor.test_default_provider_url FNDA:1,TestDashboardHtmlFor.test_default_provider_url FN:432,439,TestFramedHtmlFor.test_renders_with_iframe FNDA:1,TestFramedHtmlFor.test_renders_with_iframe FN:441,446,TestFramedHtmlFor.test_custom_provider_url FNDA:1,TestFramedHtmlFor.test_custom_provider_url FN:459,521,seed_report FNDA:1,seed_report FN:530,533,TestRootEndpoint.test_redirects_to_docs FNDA:1,TestRootEndpoint.test_redirects_to_docs FN:542,545,TestRepoHome.test_redirects_to_branch_main FNDA:1,TestRepoHome.test_redirects_to_branch_main FN:554,558,TestBranchDashboard.test_returns_html FNDA:1,TestBranchDashboard.test_returns_html FN:560,566,TestBranchDashboard.test_uses_provider_url_from_report FNDA:1,TestBranchDashboard.test_uses_provider_url_from_report FN:578,583,TestHashFramedView.test_returns_framed_html FNDA:1,TestHashFramedView.test_returns_framed_html FN:585,588,TestHashFramedView.test_contains_nav_buttons FNDA:1,TestHashFramedView.test_contains_nav_buttons FN:590,595,TestHashFramedView.test_uses_provider_url_from_report FNDA:1,TestHashFramedView.test_uses_provider_url_from_report FN:599,604,TestHashChart.test_returns_chart_html FNDA:1,TestHashChart.test_returns_chart_html FN:606,611,TestHashChart.test_uses_provider_url_from_report FNDA:1,TestHashChart.test_uses_provider_url_from_report FN:615,618,TestRawHashRedirect.test_redirect_appends_slash FNDA:1,TestRawHashRedirect.test_redirect_appends_slash FN:622,626,TestRawHashIndex.test_serves_index FNDA:1,TestRawHashIndex.test_serves_index FN:628,630,TestRawHashIndex.test_404_when_missing FNDA:1,TestRawHashIndex.test_404_when_missing FN:634,637,TestRawHashFile.test_serves_asset FNDA:1,TestRawHashFile.test_serves_asset FN:639,642,TestRawHashFile.test_404_for_missing_file FNDA:1,TestRawHashFile.test_404_for_missing_file FN:651,656,TestBadgeHash.test_returns_svg FNDA:1,TestBadgeHash.test_returns_svg FN:658,663,TestBadgeHash.test_unknown_hash_returns_unknown FNDA:1,TestBadgeHash.test_unknown_hash_returns_unknown FN:665,668,TestBadgeHash.test_immutable_cache_control FNDA:1,TestBadgeHash.test_immutable_cache_control FN:672,676,TestBadgeBranch.test_returns_svg FNDA:1,TestBadgeBranch.test_returns_svg FN:678,683,TestBadgeBranch.test_unknown_branch_returns_unknown FNDA:1,TestBadgeBranch.test_unknown_branch_returns_unknown FN:685,689,TestBadgeBranch.test_short_cache_control FNDA:1,TestBadgeBranch.test_short_cache_control FN:698,702,TestApiHashTrend.test_empty FNDA:1,TestApiHashTrend.test_empty FN:704,709,TestApiHashTrend.test_with_data FNDA:1,TestApiHashTrend.test_with_data FN:711,715,TestApiHashTrend.test_limit_param FNDA:1,TestApiHashTrend.test_limit_param FN:724,728,TestApiHashWorstFiles.test_no_report FNDA:1,TestApiHashWorstFiles.test_no_report FN:730,736,TestApiHashWorstFiles.test_with_report FNDA:1,TestApiHashWorstFiles.test_with_report FN:745,748,TestApiHashUncoveredLines.test_no_report FNDA:1,TestApiHashUncoveredLines.test_no_report FN:750,759,TestApiHashUncoveredLines.test_with_report FNDA:1,TestApiHashUncoveredLines.test_with_report FN:768,771,TestApiBranchTrend.test_empty FNDA:1,TestApiBranchTrend.test_empty FN:773,777,TestApiBranchTrend.test_with_data FNDA:1,TestApiBranchTrend.test_with_data FN:786,789,TestApiBranchWorstFiles.test_no_head FNDA:1,TestApiBranchWorstFiles.test_no_head FN:791,796,TestApiBranchWorstFiles.test_with_report FNDA:1,TestApiBranchWorstFiles.test_with_report FN:805,808,TestApiBranchUncoveredLines.test_no_head FNDA:1,TestApiBranchUncoveredLines.test_no_head FN:810,815,TestApiBranchUncoveredLines.test_with_report FNDA:1,TestApiBranchUncoveredLines.test_with_report FN:824,827,TestDownloads.test_hash_download_json FNDA:1,TestDownloads.test_hash_download_json FN:829,832,TestDownloads.test_hash_download_xml FNDA:1,TestDownloads.test_hash_download_xml FN:834,837,TestDownloads.test_hash_download_lcov FNDA:1,TestDownloads.test_hash_download_lcov FN:839,842,TestDownloads.test_hash_download_unknown_token FNDA:1,TestDownloads.test_hash_download_unknown_token FN:844,848,TestDownloads.test_hash_download_missing_report FNDA:1,TestDownloads.test_hash_download_missing_report FN:850,853,TestDownloads.test_branch_download_json FNDA:1,TestDownloads.test_branch_download_json FN:855,857,TestDownloads.test_branch_download_no_head FNDA:1,TestDownloads.test_branch_download_no_head FN:867,875,TestIngestReport.auth_client FNDA:1,TestIngestReport.auth_client FN:877,895,TestIngestReport.test_successful_ingest FNDA:1,TestIngestReport.test_successful_ingest FN:897,929,TestIngestReport.test_duplicate_ingest_returns_409 FNDA:1,TestIngestReport.test_duplicate_ingest_returns_409 FN:931,955,TestIngestReport.test_missing_coverage_xml_returns_400 FNDA:1,TestIngestReport.test_missing_coverage_xml_returns_400 FN:957,982,TestIngestReport.test_ingest_with_custom_provider_url FNDA:1,TestIngestReport.test_ingest_with_custom_provider_url FN:984,1005,TestIngestReport.test_ingest_without_provider_url_defaults FNDA:1,TestIngestReport.test_ingest_without_provider_url_defaults FN:1007,1020,TestIngestReport.test_no_auth_returns_401 FNDA:1,TestIngestReport.test_no_auth_returns_401 FNF:102 FNH:102 end_of_record