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