-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathcoverage.json
More file actions
1 lines (1 loc) · 282 KB
/
coverage.json
File metadata and controls
1 lines (1 loc) · 282 KB
1
{"meta": {"format": 3, "version": "7.10.7", "timestamp": "2025-11-05T09:58:26.178356", "branch_coverage": false, "show_contexts": false}, "files": {"src/accessiweather/__init__.py": {"executed_lines": [1, 9, 10, 11, 12, 13, 14, 29, 36, 37, 44, 45, 50, 51, 58, 60, 61, 62, 64, 65, 66, 67, 68, 69, 70, 71, 72, 75, 78], "summary": {"covered_lines": 28, "num_statements": 32, "percent_covered": 87.5, "percent_covered_display": "88", "missing_lines": 4, "excluded_lines": 0}, "missing_lines": [52, 53, 54, 55], "excluded_lines": [], "functions": {"_read_pyproject_version": {"executed_lines": [60, 61, 62, 64, 65, 66, 67, 68, 69, 70, 71, 72], "summary": {"covered_lines": 12, "num_statements": 12, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [1, 9, 10, 11, 12, 13, 14, 29, 36, 37, 44, 45, 50, 51, 58, 75, 78], "summary": {"covered_lines": 16, "num_statements": 20, "percent_covered": 80.0, "percent_covered_display": "80", "missing_lines": 4, "excluded_lines": 0}, "missing_lines": [52, 53, 54, 55], "excluded_lines": []}}, "classes": {"": {"executed_lines": [1, 9, 10, 11, 12, 13, 14, 29, 36, 37, 44, 45, 50, 51, 58, 60, 61, 62, 64, 65, 66, 67, 68, 69, 70, 71, 72, 75, 78], "summary": {"covered_lines": 28, "num_statements": 32, "percent_covered": 87.5, "percent_covered_display": "88", "missing_lines": 4, "excluded_lines": 0}, "missing_lines": [52, 53, 54, 55], "excluded_lines": []}}}, "src/accessiweather/api/__init__.py": {"executed_lines": [1, 8, 9, 10, 12], "summary": {"covered_lines": 4, "num_statements": 4, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"": {"executed_lines": [1, 8, 9, 10, 12], "summary": {"covered_lines": 4, "num_statements": 4, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [1, 8, 9, 10, 12], "summary": {"covered_lines": 4, "num_statements": 4, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "src/accessiweather/app.py": {"executed_lines": [1, 8, 10, 11, 12, 14, 16, 17, 18, 19, 21, 28, 31, 32, 34, 36, 39, 40, 41, 42, 43, 44, 45, 48, 49, 50, 51, 52, 53, 54, 57, 58, 61, 64, 65, 68, 70, 72, 74, 76, 77, 87, 90, 93, 96, 98, 100, 101, 103, 106, 110, 112, 113, 114, 115, 118, 120, 122, 124, 127, 128, 129, 130, 131, 132, 133, 135, 136, 137, 138, 141, 142, 145, 148, 150, 152, 153, 155, 157, 159, 161, 163, 165, 167, 169, 172, 174], "summary": {"covered_lines": 84, "num_statements": 92, "percent_covered": 91.30434782608695, "percent_covered_display": "91", "missing_lines": 8, "excluded_lines": 6}, "missing_lines": [78, 80, 81, 82, 83, 84, 104, 105], "excluded_lines": [21, 22, 23, 24, 25, 26], "functions": {"AccessiWeatherApp.__init__": {"executed_lines": [36, 39, 40, 41, 42, 43, 44, 45, 48, 49, 50, 51, 52, 53, 54, 57, 58, 61, 64, 65, 68], "summary": {"covered_lines": 21, "num_statements": 21, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "AccessiWeatherApp.startup": {"executed_lines": [72, 74, 76, 77, 87, 90, 93, 96, 98, 100, 101, 103, 106], "summary": {"covered_lines": 13, "num_statements": 21, "percent_covered": 61.904761904761905, "percent_covered_display": "62", "missing_lines": 8, "excluded_lines": 0}, "missing_lines": [78, 80, 81, 82, 83, 84, 104, 105], "excluded_lines": []}, "AccessiWeatherApp._handle_already_running": {"executed_lines": [112, 113, 114, 115, 118], "summary": {"covered_lines": 5, "num_statements": 5, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "AccessiWeatherApp.on_running": {"executed_lines": [122, 124, 127, 128, 129, 130, 131, 132, 133, 135, 136, 137, 138, 141, 142, 145, 148, 150, 152, 153], "summary": {"covered_lines": 20, "num_statements": 20, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "AccessiWeatherApp._initialize_components": {"executed_lines": [157], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "AccessiWeatherApp._load_initial_data": {"executed_lines": [161], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "AccessiWeatherApp._on_window_close": {"executed_lines": [165], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "AccessiWeatherApp.on_exit": {"executed_lines": [169], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "main": {"executed_lines": [174], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [1, 8, 10, 11, 12, 14, 16, 17, 18, 19, 21, 28, 31, 32, 34, 70, 110, 120, 155, 159, 163, 167, 172], "summary": {"covered_lines": 20, "num_statements": 20, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 6}, "missing_lines": [], "excluded_lines": [21, 22, 23, 24, 25, 26]}}, "classes": {"AccessiWeatherApp": {"executed_lines": [36, 39, 40, 41, 42, 43, 44, 45, 48, 49, 50, 51, 52, 53, 54, 57, 58, 61, 64, 65, 68, 72, 74, 76, 77, 87, 90, 93, 96, 98, 100, 101, 103, 106, 112, 113, 114, 115, 118, 122, 124, 127, 128, 129, 130, 131, 132, 133, 135, 136, 137, 138, 141, 142, 145, 148, 150, 152, 153, 157, 161, 165, 169], "summary": {"covered_lines": 63, "num_statements": 71, "percent_covered": 88.73239436619718, "percent_covered_display": "89", "missing_lines": 8, "excluded_lines": 0}, "missing_lines": [78, 80, 81, 82, 83, 84, 104, 105], "excluded_lines": []}, "": {"executed_lines": [1, 8, 10, 11, 12, 14, 16, 17, 18, 19, 21, 28, 31, 32, 34, 70, 110, 120, 155, 159, 163, 167, 172, 174], "summary": {"covered_lines": 21, "num_statements": 21, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 6}, "missing_lines": [], "excluded_lines": [21, 22, 23, 24, 25, 26]}}}, "src/accessiweather/cache.py": {"executed_lines": [1, 7, 8, 9, 10, 11, 12, 13, 14, 16, 30, 33, 34, 35, 37, 38, 41, 42, 44, 53, 54, 55, 57, 70, 71, 73, 74, 77, 78, 80, 81, 83, 84, 86, 97, 98, 100, 101, 102, 104, 117, 118, 120, 121, 124, 126, 127, 129, 131, 140, 141, 142, 144, 146, 147, 149, 151, 152, 154, 155, 157, 158, 161, 162, 163, 164, 165, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 180, 181, 182, 183, 206, 207, 208, 209, 232, 233, 247, 248, 262, 263, 264, 265, 271, 272, 273, 274, 275, 276, 279, 294, 310, 311, 312, 319, 320, 321, 329, 347, 365, 366, 367, 371, 372, 373, 378, 379, 380, 396, 397, 398, 415, 416, 430, 431, 433, 434, 448, 451, 452, 467, 468, 479, 480, 481, 482, 485, 486, 487, 490, 491, 493, 503, 504, 505, 507, 508, 509, 520, 521, 522, 526, 527, 528, 529, 531, 532, 533, 538, 539, 540, 541, 543, 544, 545, 546, 547, 554, 555, 558, 559, 560, 561, 562, 564, 565, 566, 567, 568, 569, 570, 571, 572, 576, 577, 578], "summary": {"covered_lines": 182, "num_statements": 209, "percent_covered": 87.08133971291866, "percent_covered_display": "87", "missing_lines": 27, "excluded_lines": 0}, "missing_lines": [280, 295, 296, 313, 322, 323, 324, 330, 348, 368, 374, 375, 381, 399, 412, 432, 435, 436, 437, 523, 524, 534, 535, 536, 556, 573, 574], "excluded_lines": [], "functions": {"Cache.__init__": {"executed_lines": [53, 54, 55], "summary": {"covered_lines": 3, "num_statements": 3, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "Cache.get": {"executed_lines": [70, 71, 73, 74, 77, 78, 80, 81, 83, 84], "summary": {"covered_lines": 10, "num_statements": 10, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "Cache.set": {"executed_lines": [97, 98, 100, 101, 102], "summary": {"covered_lines": 5, "num_statements": 5, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "Cache.has_key": {"executed_lines": [117, 118, 120, 121, 124, 126, 127, 129], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "Cache.invalidate": {"executed_lines": [140, 141, 142], "summary": {"covered_lines": 3, "num_statements": 3, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "Cache.clear": {"executed_lines": [146, 147], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "Cache.cleanup": {"executed_lines": [151, 152, 154, 155, 157, 158], "summary": {"covered_lines": 6, "num_statements": 6, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "_serialize_datetime": {"executed_lines": [162, 163, 164, 165], "summary": {"covered_lines": 4, "num_statements": 4, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "_deserialize_datetime": {"executed_lines": [169, 170, 171, 172, 173, 174, 175, 176, 177], "summary": {"covered_lines": 9, "num_statements": 9, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "_serialize_current": {"executed_lines": [181, 182, 183], "summary": {"covered_lines": 3, "num_statements": 3, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "_deserialize_current": {"executed_lines": [207, 208, 209], "summary": {"covered_lines": 3, "num_statements": 3, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "_serialize_forecast_period": {"executed_lines": [233], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "_deserialize_forecast_period": {"executed_lines": [248], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "_serialize_forecast": {"executed_lines": [263, 264, 265], "summary": {"covered_lines": 3, "num_statements": 3, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "_deserialize_forecast": {"executed_lines": [272, 273, 274, 275, 276], "summary": {"covered_lines": 5, "num_statements": 5, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "_serialize_hourly_period": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 1, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [280], "excluded_lines": []}, "_deserialize_hourly_period": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 2, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [295, 296], "excluded_lines": []}, "_serialize_hourly": {"executed_lines": [311, 312], "summary": {"covered_lines": 2, "num_statements": 3, "percent_covered": 66.66666666666667, "percent_covered_display": "67", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [313], "excluded_lines": []}, "_deserialize_hourly": {"executed_lines": [320, 321], "summary": {"covered_lines": 2, "num_statements": 5, "percent_covered": 40.0, "percent_covered_display": "40", "missing_lines": 3, "excluded_lines": 0}, "missing_lines": [322, 323, 324], "excluded_lines": []}, "_serialize_alert": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 1, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [330], "excluded_lines": []}, "_deserialize_alert": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 1, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [348], "excluded_lines": []}, "_serialize_alerts": {"executed_lines": [366, 367], "summary": {"covered_lines": 2, "num_statements": 3, "percent_covered": 66.66666666666667, "percent_covered_display": "67", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [368], "excluded_lines": []}, "_deserialize_alerts": {"executed_lines": [372, 373], "summary": {"covered_lines": 2, "num_statements": 4, "percent_covered": 50.0, "percent_covered_display": "50", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [374, 375], "excluded_lines": []}, "_serialize_environmental": {"executed_lines": [379, 380], "summary": {"covered_lines": 2, "num_statements": 3, "percent_covered": 66.66666666666667, "percent_covered_display": "67", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [381], "excluded_lines": []}, "_deserialize_environmental": {"executed_lines": [397, 398], "summary": {"covered_lines": 2, "num_statements": 4, "percent_covered": 50.0, "percent_covered_display": "50", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [399, 412], "excluded_lines": []}, "_serialize_trends": {"executed_lines": [416], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "_deserialize_trends": {"executed_lines": [431, 433, 434, 448], "summary": {"covered_lines": 4, "num_statements": 8, "percent_covered": 50.0, "percent_covered_display": "50", "missing_lines": 4, "excluded_lines": 0}, "missing_lines": [432, 435, 436, 437], "excluded_lines": []}, "_serialize_weather_data": {"executed_lines": [452], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "_deserialize_weather_data": {"executed_lines": [468, 479, 480, 481, 482], "summary": {"covered_lines": 5, "num_statements": 5, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "_safe_location_key": {"executed_lines": [486, 487], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "WeatherDataCache.__init__": {"executed_lines": [503, 504, 505], "summary": {"covered_lines": 3, "num_statements": 3, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "WeatherDataCache.store": {"executed_lines": [508, 509, 520, 521, 522], "summary": {"covered_lines": 5, "num_statements": 7, "percent_covered": 71.42857142857143, "percent_covered_display": "71", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [523, 524], "excluded_lines": []}, "WeatherDataCache.load": {"executed_lines": [527, 528, 529, 531, 532, 533, 538, 539, 540, 541, 543, 544, 545, 546, 547, 554, 555, 558, 559, 560, 561, 562], "summary": {"covered_lines": 22, "num_statements": 26, "percent_covered": 84.61538461538461, "percent_covered_display": "85", "missing_lines": 4, "excluded_lines": 0}, "missing_lines": [534, 535, 536, 556], "excluded_lines": []}, "WeatherDataCache.purge_expired": {"executed_lines": [565, 566, 567, 568, 569, 570, 571, 572], "summary": {"covered_lines": 8, "num_statements": 10, "percent_covered": 80.0, "percent_covered_display": "80", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [573, 574], "excluded_lines": []}, "WeatherDataCache._path_for_location": {"executed_lines": [577, 578], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [1, 7, 8, 9, 10, 11, 12, 13, 14, 16, 30, 33, 34, 35, 37, 38, 41, 42, 44, 57, 86, 104, 131, 144, 149, 161, 168, 180, 206, 232, 247, 262, 271, 279, 294, 310, 319, 329, 347, 365, 371, 378, 396, 415, 430, 451, 467, 485, 490, 491, 493, 507, 526, 564, 576], "summary": {"covered_lines": 51, "num_statements": 51, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"CacheEntry": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "Cache": {"executed_lines": [53, 54, 55, 70, 71, 73, 74, 77, 78, 80, 81, 83, 84, 97, 98, 100, 101, 102, 117, 118, 120, 121, 124, 126, 127, 129, 140, 141, 142, 146, 147, 151, 152, 154, 155, 157, 158], "summary": {"covered_lines": 37, "num_statements": 37, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "WeatherDataCache": {"executed_lines": [503, 504, 505, 508, 509, 520, 521, 522, 527, 528, 529, 531, 532, 533, 538, 539, 540, 541, 543, 544, 545, 546, 547, 554, 555, 558, 559, 560, 561, 562, 565, 566, 567, 568, 569, 570, 571, 572, 577, 578], "summary": {"covered_lines": 40, "num_statements": 48, "percent_covered": 83.33333333333333, "percent_covered_display": "83", "missing_lines": 8, "excluded_lines": 0}, "missing_lines": [523, 524, 534, 535, 536, 556, 573, 574], "excluded_lines": []}, "": {"executed_lines": [1, 7, 8, 9, 10, 11, 12, 13, 14, 16, 30, 33, 34, 35, 37, 38, 41, 42, 44, 57, 86, 104, 131, 144, 149, 161, 162, 163, 164, 165, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 180, 181, 182, 183, 206, 207, 208, 209, 232, 233, 247, 248, 262, 263, 264, 265, 271, 272, 273, 274, 275, 276, 279, 294, 310, 311, 312, 319, 320, 321, 329, 347, 365, 366, 367, 371, 372, 373, 378, 379, 380, 396, 397, 398, 415, 416, 430, 431, 433, 434, 448, 451, 452, 467, 468, 479, 480, 481, 482, 485, 486, 487, 490, 491, 493, 507, 526, 564, 576], "summary": {"covered_lines": 105, "num_statements": 124, "percent_covered": 84.6774193548387, "percent_covered_display": "85", "missing_lines": 19, "excluded_lines": 0}, "missing_lines": [280, 295, 296, 313, 322, 323, 324, 330, 348, 368, 374, 375, 381, 399, 412, 432, 435, 436, 437], "excluded_lines": []}}}, "src/accessiweather/config/__init__.py": {"executed_lines": [1, 8, 10], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"": {"executed_lines": [1, 8, 10], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [1, 8, 10], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "src/accessiweather/config/config_manager.py": {"executed_lines": [1, 8, 10, 11, 12, 13, 14, 16, 18, 19, 21, 22, 23, 24, 26, 29, 30, 32, 34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 48, 50, 51, 52, 55, 57, 60, 61, 62, 63, 64, 66, 69, 71, 73, 74, 75, 77, 78, 79, 80, 82, 84, 86, 87, 88, 90, 91, 92, 93, 96, 97, 98, 102, 103, 105, 106, 107, 109, 111, 112, 113, 115, 117, 119, 123, 125, 127, 129, 131, 133, 135, 137, 139, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 177, 197, 217, 232, 258, 262, 266, 270, 274, 278, 282], "summary": {"covered_lines": 110, "num_statements": 156, "percent_covered": 70.51282051282051, "percent_covered_display": "71", "missing_lines": 46, "excluded_lines": 0}, "missing_lines": [53, 58, 99, 100, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 226, 227, 228, 229, 230, 243, 244, 245, 247, 248, 251, 253, 254, 255, 256, 260, 264, 268, 272, 276, 280, 284], "excluded_lines": [], "functions": {"ConfigManager.__init__": {"executed_lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46], "summary": {"covered_lines": 11, "num_statements": 11, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "ConfigManager._get_logger": {"executed_lines": [50, 51, 52], "summary": {"covered_lines": 3, "num_statements": 4, "percent_covered": 75.0, "percent_covered_display": "75", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [53], "excluded_lines": []}, "ConfigManager.load_config": {"executed_lines": [57, 60, 61, 62, 63, 64, 66, 69, 71, 73, 74, 75, 77, 78, 79, 80, 82], "summary": {"covered_lines": 17, "num_statements": 18, "percent_covered": 94.44444444444444, "percent_covered_display": "94", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [58], "excluded_lines": []}, "ConfigManager.save_config": {"executed_lines": [86, 87, 88, 90, 91, 92, 93, 96, 97, 98, 102, 103, 105, 106, 107], "summary": {"covered_lines": 15, "num_statements": 17, "percent_covered": 88.23529411764706, "percent_covered_display": "88", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [99, 100], "excluded_lines": []}, "ConfigManager.get_config": {"executed_lines": [111, 112, 113], "summary": {"covered_lines": 3, "num_statements": 3, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "ConfigManager.update_settings": {"executed_lines": [117], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "ConfigManager.add_location": {"executed_lines": [123], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "ConfigManager.remove_location": {"executed_lines": [127], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "ConfigManager.set_current_location": {"executed_lines": [131], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "ConfigManager.get_current_location": {"executed_lines": [135], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "ConfigManager.get_all_locations": {"executed_lines": [139], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "ConfigManager.get_location_names": {"executed_lines": [143], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "ConfigManager.has_locations": {"executed_lines": [147], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "ConfigManager.get_settings": {"executed_lines": [151], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "ConfigManager.reset_to_defaults": {"executed_lines": [155], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "ConfigManager.reset_all_data": {"executed_lines": [159], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "ConfigManager.backup_config": {"executed_lines": [163], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "ConfigManager.restore_config": {"executed_lines": [167], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "ConfigManager.export_locations": {"executed_lines": [171], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "ConfigManager.import_locations": {"executed_lines": [175], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "ConfigManager.enable_startup": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 10, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 10, "excluded_lines": 0}, "missing_lines": [186, 187, 188, 189, 190, 191, 192, 193, 194, 195], "excluded_lines": []}, "ConfigManager.disable_startup": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 10, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 10, "excluded_lines": 0}, "missing_lines": [206, 207, 208, 209, 210, 211, 212, 213, 214, 215], "excluded_lines": []}, "ConfigManager.is_startup_enabled": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 5, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 5, "excluded_lines": 0}, "missing_lines": [226, 227, 228, 229, 230], "excluded_lines": []}, "ConfigManager.sync_startup_setting": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 10, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 10, "excluded_lines": 0}, "missing_lines": [243, 244, 245, 247, 248, 251, 253, 254, 255, 256], "excluded_lines": []}, "ConfigManager.validate_github_app_config": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 1, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [260], "excluded_lines": []}, "ConfigManager.set_github_app_config": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 1, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [264], "excluded_lines": []}, "ConfigManager.get_github_app_config": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 1, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [268], "excluded_lines": []}, "ConfigManager.clear_github_app_config": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 1, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [272], "excluded_lines": []}, "ConfigManager.has_github_app_config": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 1, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [276], "excluded_lines": []}, "ConfigManager.get_github_backend_url": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 1, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [280], "excluded_lines": []}, "ConfigManager.set_github_backend_url": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 1, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [284], "excluded_lines": []}, "": {"executed_lines": [1, 8, 10, 11, 12, 13, 14, 16, 18, 19, 21, 22, 23, 24, 26, 29, 30, 32, 48, 55, 84, 109, 115, 119, 125, 129, 133, 137, 141, 145, 149, 153, 157, 161, 165, 169, 173, 177, 197, 217, 232, 258, 262, 266, 270, 274, 278, 282], "summary": {"covered_lines": 46, "num_statements": 46, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"ConfigManager": {"executed_lines": [34, 35, 36, 37, 38, 39, 40, 41, 42, 45, 46, 50, 51, 52, 57, 60, 61, 62, 63, 64, 66, 69, 71, 73, 74, 75, 77, 78, 79, 80, 82, 86, 87, 88, 90, 91, 92, 93, 96, 97, 98, 102, 103, 105, 106, 107, 111, 112, 113, 117, 123, 127, 131, 135, 139, 143, 147, 151, 155, 159, 163, 167, 171, 175], "summary": {"covered_lines": 64, "num_statements": 110, "percent_covered": 58.18181818181818, "percent_covered_display": "58", "missing_lines": 46, "excluded_lines": 0}, "missing_lines": [53, 58, 99, 100, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 226, 227, 228, 229, 230, 243, 244, 245, 247, 248, 251, 253, 254, 255, 256, 260, 264, 268, 272, 276, 280, 284], "excluded_lines": []}, "": {"executed_lines": [1, 8, 10, 11, 12, 13, 14, 16, 18, 19, 21, 22, 23, 24, 26, 29, 30, 32, 48, 55, 84, 109, 115, 119, 125, 129, 133, 137, 141, 145, 149, 153, 157, 161, 165, 169, 173, 177, 197, 217, 232, 258, 262, 266, 270, 274, 278, 282], "summary": {"covered_lines": 46, "num_statements": 46, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "src/accessiweather/config/github_config.py": {"executed_lines": [1, 3, 5, 6, 8, 15, 18, 21, 22, 24, 26, 28, 29, 30, 32, 34, 36, 37, 39, 40, 42, 43, 45, 46, 48, 49, 56, 57, 58, 59, 60, 62, 63, 67, 68, 72, 77, 78, 80, 82, 84, 85, 86, 87, 88, 89, 90, 91, 92, 94, 96, 97, 98, 103, 104, 105, 107, 109, 111, 113, 114, 115, 116, 117, 119, 121, 122, 123, 124, 125, 127, 129, 130, 131, 132, 133, 134, 135], "summary": {"covered_lines": 75, "num_statements": 75, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 2}, "missing_lines": [], "excluded_lines": [15, 16], "functions": {"GitHubConfigOperations.__init__": {"executed_lines": [26], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "GitHubConfigOperations.logger": {"executed_lines": [30], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "GitHubConfigOperations.validate_github_app_config": {"executed_lines": [34, 36, 37, 39, 40, 42, 43, 45, 46, 48, 49, 56, 57, 58, 59, 60, 62, 63, 67, 68, 72, 77, 78, 80], "summary": {"covered_lines": 24, "num_statements": 24, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "GitHubConfigOperations.set_github_app_config": {"executed_lines": [84, 85, 86, 87, 88, 89, 90, 91, 92], "summary": {"covered_lines": 9, "num_statements": 9, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "GitHubConfigOperations.get_github_app_config": {"executed_lines": [96, 97, 98, 103, 104, 105], "summary": {"covered_lines": 6, "num_statements": 6, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "GitHubConfigOperations.clear_github_app_config": {"executed_lines": [109], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "GitHubConfigOperations.has_github_app_config": {"executed_lines": [113, 114, 115, 116, 117], "summary": {"covered_lines": 5, "num_statements": 5, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "GitHubConfigOperations.get_github_backend_url": {"executed_lines": [121, 122, 123, 124, 125], "summary": {"covered_lines": 5, "num_statements": 5, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "GitHubConfigOperations.set_github_backend_url": {"executed_lines": [129, 130, 131, 132, 133, 134, 135], "summary": {"covered_lines": 7, "num_statements": 7, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [1, 3, 5, 6, 8, 15, 18, 21, 22, 24, 28, 29, 32, 82, 94, 107, 111, 119, 127], "summary": {"covered_lines": 16, "num_statements": 16, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 2}, "missing_lines": [], "excluded_lines": [15, 16]}}, "classes": {"GitHubConfigOperations": {"executed_lines": [26, 30, 34, 36, 37, 39, 40, 42, 43, 45, 46, 48, 49, 56, 57, 58, 59, 60, 62, 63, 67, 68, 72, 77, 78, 80, 84, 85, 86, 87, 88, 89, 90, 91, 92, 96, 97, 98, 103, 104, 105, 109, 113, 114, 115, 116, 117, 121, 122, 123, 124, 125, 129, 130, 131, 132, 133, 134, 135], "summary": {"covered_lines": 59, "num_statements": 59, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [1, 3, 5, 6, 8, 15, 18, 21, 22, 24, 28, 29, 32, 82, 94, 107, 111, 119, 127], "summary": {"covered_lines": 16, "num_statements": 16, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 2}, "missing_lines": [], "excluded_lines": [15, 16]}}}, "src/accessiweather/config/import_export.py": {"executed_lines": [1, 3, 5, 6, 7, 8, 9, 10, 12, 14, 17, 20, 21, 23, 25, 27, 28, 29, 31, 33, 35, 36, 37, 38, 40, 41, 42, 47, 49, 50, 51, 52, 54, 55, 56, 57, 58, 63, 65, 66, 67, 79, 80, 82, 83, 84, 85, 86, 88, 90, 91, 92, 94, 95, 96, 98, 99, 104, 105, 106, 108, 109, 110, 113, 115, 116, 117, 125, 126, 127, 129, 132, 133, 135, 136, 137, 138, 139, 141, 147, 148, 149, 150], "summary": {"covered_lines": 80, "num_statements": 93, "percent_covered": 86.02150537634408, "percent_covered_display": "86", "missing_lines": 13, "excluded_lines": 2}, "missing_lines": [43, 44, 45, 59, 60, 61, 100, 101, 102, 118, 119, 120, 123], "excluded_lines": [14, 15], "functions": {"ImportExportOperations.__init__": {"executed_lines": [25], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "ImportExportOperations.logger": {"executed_lines": [29], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "ImportExportOperations.backup_config": {"executed_lines": [33, 35, 36, 37, 38, 40, 41, 42], "summary": {"covered_lines": 8, "num_statements": 11, "percent_covered": 72.72727272727273, "percent_covered_display": "73", "missing_lines": 3, "excluded_lines": 0}, "missing_lines": [43, 44, 45], "excluded_lines": []}, "ImportExportOperations.restore_config": {"executed_lines": [49, 50, 51, 52, 54, 55, 56, 57, 58], "summary": {"covered_lines": 9, "num_statements": 12, "percent_covered": 75.0, "percent_covered_display": "75", "missing_lines": 3, "excluded_lines": 0}, "missing_lines": [59, 60, 61], "excluded_lines": []}, "ImportExportOperations.export_locations": {"executed_lines": [65, 66, 67, 79, 80, 82, 83, 84, 85, 86], "summary": {"covered_lines": 10, "num_statements": 10, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "ImportExportOperations.import_locations": {"executed_lines": [90, 91, 92, 94, 95, 96, 98, 99, 104, 105, 106, 108, 109, 110, 113, 115, 116, 117, 125, 126, 127, 129, 132, 133, 135, 136, 137, 138, 139, 141, 147, 148, 149, 150], "summary": {"covered_lines": 34, "num_statements": 41, "percent_covered": 82.92682926829268, "percent_covered_display": "83", "missing_lines": 7, "excluded_lines": 0}, "missing_lines": [100, 101, 102, 118, 119, 120, 123], "excluded_lines": []}, "": {"executed_lines": [1, 3, 5, 6, 7, 8, 9, 10, 12, 14, 17, 20, 21, 23, 27, 28, 31, 47, 63, 88], "summary": {"covered_lines": 17, "num_statements": 17, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 2}, "missing_lines": [], "excluded_lines": [14, 15]}}, "classes": {"ImportExportOperations": {"executed_lines": [25, 29, 33, 35, 36, 37, 38, 40, 41, 42, 49, 50, 51, 52, 54, 55, 56, 57, 58, 65, 66, 67, 79, 80, 82, 83, 84, 85, 86, 90, 91, 92, 94, 95, 96, 98, 99, 104, 105, 106, 108, 109, 110, 113, 115, 116, 117, 125, 126, 127, 129, 132, 133, 135, 136, 137, 138, 139, 141, 147, 148, 149, 150], "summary": {"covered_lines": 63, "num_statements": 76, "percent_covered": 82.89473684210526, "percent_covered_display": "83", "missing_lines": 13, "excluded_lines": 0}, "missing_lines": [43, 44, 45, 59, 60, 61, 100, 101, 102, 118, 119, 120, 123], "excluded_lines": []}, "": {"executed_lines": [1, 3, 5, 6, 7, 8, 9, 10, 12, 14, 17, 20, 21, 23, 27, 28, 31, 47, 63, 88], "summary": {"covered_lines": 17, "num_statements": 17, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 2}, "missing_lines": [], "excluded_lines": [14, 15]}}}, "src/accessiweather/config/locations.py": {"executed_lines": [1, 3, 5, 6, 8, 10, 13, 16, 17, 19, 21, 23, 24, 25, 27, 35, 37, 38, 39, 40, 42, 48, 50, 51, 52, 54, 55, 57, 59, 61, 62, 63, 65, 66, 67, 68, 69, 73, 74, 76, 77, 79, 81, 83, 84, 85, 86, 87, 89, 90, 92, 94, 96, 98, 100, 102, 104, 106], "summary": {"covered_lines": 55, "num_statements": 55, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 2}, "missing_lines": [], "excluded_lines": [10, 11], "functions": {"LocationOperations.__init__": {"executed_lines": [21], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "LocationOperations.logger": {"executed_lines": [25], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "LocationOperations.add_location": {"executed_lines": [35, 37, 38, 39, 40, 42, 48, 50, 51, 52, 54, 55], "summary": {"covered_lines": 12, "num_statements": 12, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "LocationOperations.remove_location": {"executed_lines": [59, 61, 62, 63, 65, 66, 67, 68, 69, 73, 74, 76, 77], "summary": {"covered_lines": 13, "num_statements": 13, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "LocationOperations.set_current_location": {"executed_lines": [81, 83, 84, 85, 86, 87, 89, 90], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "LocationOperations.get_current_location": {"executed_lines": [94], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "LocationOperations.get_all_locations": {"executed_lines": [98], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "LocationOperations.get_location_names": {"executed_lines": [102], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "LocationOperations.has_locations": {"executed_lines": [106], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [1, 3, 5, 6, 8, 10, 13, 16, 17, 19, 23, 24, 27, 57, 79, 92, 96, 100, 104], "summary": {"covered_lines": 16, "num_statements": 16, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 2}, "missing_lines": [], "excluded_lines": [10, 11]}}, "classes": {"LocationOperations": {"executed_lines": [21, 25, 35, 37, 38, 39, 40, 42, 48, 50, 51, 52, 54, 55, 59, 61, 62, 63, 65, 66, 67, 68, 69, 73, 74, 76, 77, 81, 83, 84, 85, 86, 87, 89, 90, 94, 98, 102, 106], "summary": {"covered_lines": 39, "num_statements": 39, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [1, 3, 5, 6, 8, 10, 13, 16, 17, 19, 23, 24, 27, 57, 79, 92, 96, 100, 104], "summary": {"covered_lines": 16, "num_statements": 16, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 2}, "missing_lines": [], "excluded_lines": [10, 11]}}}, "src/accessiweather/config/settings.py": {"executed_lines": [1, 3, 5, 6, 7, 9, 15, 17, 20, 23, 24, 26, 28, 30, 31, 32, 34, 36, 37, 40, 41, 43, 44, 45, 48, 49, 51, 52, 53, 56, 57, 59, 60, 63, 64, 66, 67, 76, 77, 111, 112, 123, 124, 125, 127, 129, 130, 132, 133, 134, 135, 136, 138, 140, 142, 144, 146, 148, 149, 150, 152, 154, 155, 157, 158, 159, 160, 162, 166, 167, 168], "summary": {"covered_lines": 68, "num_statements": 105, "percent_covered": 64.76190476190476, "percent_covered_display": "65", "missing_lines": 37, "excluded_lines": 2}, "missing_lines": [38, 68, 69, 70, 71, 72, 73, 74, 78, 79, 80, 81, 82, 84, 85, 92, 93, 94, 95, 96, 98, 99, 102, 103, 107, 113, 114, 115, 116, 117, 118, 119, 163, 164, 169, 170, 171], "excluded_lines": [17, 18], "functions": {"SettingsOperations.__init__": {"executed_lines": [28], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "SettingsOperations.logger": {"executed_lines": [32], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "SettingsOperations._validate_and_fix_config": {"executed_lines": [36, 37, 40, 41, 43, 44, 45, 48, 49, 51, 52, 53, 56, 57, 59, 60, 63, 64, 66, 67, 76, 77, 111, 112, 123, 124, 125], "summary": {"covered_lines": 27, "num_statements": 59, "percent_covered": 45.76271186440678, "percent_covered_display": "46", "missing_lines": 32, "excluded_lines": 0}, "missing_lines": [38, 68, 69, 70, 71, 72, 73, 74, 78, 79, 80, 81, 82, 84, 85, 92, 93, 94, 95, 96, 98, 99, 102, 103, 107, 113, 114, 115, 116, 117, 118, 119], "excluded_lines": []}, "SettingsOperations.update_settings": {"executed_lines": [129, 130, 132, 133, 134, 135, 136, 138, 140], "summary": {"covered_lines": 9, "num_statements": 9, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "SettingsOperations.get_settings": {"executed_lines": [144], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "SettingsOperations.reset_to_defaults": {"executed_lines": [148, 149, 150], "summary": {"covered_lines": 3, "num_statements": 3, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "SettingsOperations.reset_all_data": {"executed_lines": [154, 155, 157, 158, 159, 160, 162, 166, 167, 168], "summary": {"covered_lines": 10, "num_statements": 15, "percent_covered": 66.66666666666667, "percent_covered_display": "67", "missing_lines": 5, "excluded_lines": 0}, "missing_lines": [163, 164, 169, 170, 171], "excluded_lines": []}, "": {"executed_lines": [1, 3, 5, 6, 7, 9, 15, 17, 20, 23, 24, 26, 30, 31, 34, 127, 142, 146, 152], "summary": {"covered_lines": 16, "num_statements": 16, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 2}, "missing_lines": [], "excluded_lines": [17, 18]}}, "classes": {"SettingsOperations": {"executed_lines": [28, 32, 36, 37, 40, 41, 43, 44, 45, 48, 49, 51, 52, 53, 56, 57, 59, 60, 63, 64, 66, 67, 76, 77, 111, 112, 123, 124, 125, 129, 130, 132, 133, 134, 135, 136, 138, 140, 144, 148, 149, 150, 154, 155, 157, 158, 159, 160, 162, 166, 167, 168], "summary": {"covered_lines": 52, "num_statements": 89, "percent_covered": 58.42696629213483, "percent_covered_display": "58", "missing_lines": 37, "excluded_lines": 0}, "missing_lines": [38, 68, 69, 70, 71, 72, 73, 74, 78, 79, 80, 81, 82, 84, 85, 92, 93, 94, 95, 96, 98, 99, 102, 103, 107, 113, 114, 115, 116, 117, 118, 119, 163, 164, 169, 170, 171], "excluded_lines": []}, "": {"executed_lines": [1, 3, 5, 6, 7, 9, 15, 17, 20, 23, 24, 26, 30, 31, 34, 127, 142, 146, 152], "summary": {"covered_lines": 16, "num_statements": 16, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 2}, "missing_lines": [], "excluded_lines": [17, 18]}}}, "src/accessiweather/config_utils.py": {"executed_lines": [1, 7, 8, 9, 10, 11, 12, 15, 18, 34, 35, 36, 37, 40, 41, 42, 46, 47, 49, 51, 52, 57, 58, 62, 65, 69, 72, 73, 74, 75, 76, 78, 79, 80, 81, 84, 85, 86, 87, 88, 89, 90, 91, 93, 94, 97, 110, 111, 112, 115, 116, 118, 120, 125, 126, 127, 128, 129, 130, 131, 134, 135, 136, 139, 141, 142, 143, 144, 147, 150, 151, 152, 155, 172, 175, 176, 178, 181, 182, 184, 185, 188, 197, 198, 199, 201, 202, 205, 207, 208, 209, 212, 213, 214, 217, 218, 219, 221], "summary": {"covered_lines": 91, "num_statements": 94, "percent_covered": 96.80851063829788, "percent_covered_display": "97", "missing_lines": 3, "excluded_lines": 6}, "missing_lines": [54, 60, 121], "excluded_lines": [139, 141, 142, 143, 144, 147], "functions": {"is_portable_mode": {"executed_lines": [34, 35, 36, 37, 40, 41, 42, 46, 47, 49, 51, 52, 57, 58, 62, 65, 69, 72, 73, 74, 75, 76, 78, 79, 80, 81, 84, 85, 86, 87, 88, 89, 90, 91, 93, 94], "summary": {"covered_lines": 36, "num_statements": 38, "percent_covered": 94.73684210526316, "percent_covered_display": "95", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [54, 60], "excluded_lines": []}, "get_config_dir": {"executed_lines": [110, 111, 112, 115, 116, 118, 120, 125, 126, 127, 128, 129, 130, 131, 134, 135, 136, 139, 141, 142, 143, 144, 147, 150, 151, 152], "summary": {"covered_lines": 20, "num_statements": 21, "percent_covered": 95.23809523809524, "percent_covered_display": "95", "missing_lines": 1, "excluded_lines": 6}, "missing_lines": [121], "excluded_lines": [139, 141, 142, 143, 144, 147]}, "ensure_config_defaults": {"executed_lines": [172, 175, 176, 178, 181, 182, 184, 185, 188, 197, 198, 199, 201, 202, 205, 207, 208, 209, 212, 213, 214, 217, 218, 219, 221], "summary": {"covered_lines": 25, "num_statements": 25, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [1, 7, 8, 9, 10, 11, 12, 15, 18, 97, 155], "summary": {"covered_lines": 10, "num_statements": 10, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [1, 7, 8, 9, 10, 11, 12, 15, 18, 34, 35, 36, 37, 40, 41, 42, 46, 47, 49, 51, 52, 57, 58, 62, 65, 69, 72, 73, 74, 75, 76, 78, 79, 80, 81, 84, 85, 86, 87, 88, 89, 90, 91, 93, 94, 97, 110, 111, 112, 115, 116, 118, 120, 125, 126, 127, 128, 129, 130, 131, 134, 135, 136, 139, 141, 142, 143, 144, 147, 150, 151, 152, 155, 172, 175, 176, 178, 181, 182, 184, 185, 188, 197, 198, 199, 201, 202, 205, 207, 208, 209, 212, 213, 214, 217, 218, 219, 221], "summary": {"covered_lines": 91, "num_statements": 94, "percent_covered": 96.80851063829788, "percent_covered_display": "97", "missing_lines": 3, "excluded_lines": 6}, "missing_lines": [54, 60, 121], "excluded_lines": [139, 141, 142, 143, 144, 147]}}}, "src/accessiweather/constants.py": {"executed_lines": [1, 8, 11, 12, 13, 14, 15, 18, 19, 22, 23, 26, 27, 28, 31, 32, 33, 36, 37, 38, 39, 40, 43, 44, 47, 48, 49, 50, 51, 59, 62, 65, 68, 69, 70, 71, 72, 75, 76, 77, 78, 82, 83, 84, 85, 86, 87, 88, 91, 92, 93, 94, 95, 98, 99], "summary": {"covered_lines": 54, "num_statements": 54, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"": {"executed_lines": [1, 8, 11, 12, 13, 14, 15, 18, 19, 22, 23, 26, 27, 28, 31, 32, 33, 36, 37, 38, 39, 40, 43, 44, 47, 48, 49, 50, 51, 59, 62, 65, 68, 69, 70, 71, 72, 75, 76, 77, 78, 82, 83, 84, 85, 86, 87, 88, 91, 92, 93, 94, 95, 98, 99], "summary": {"covered_lines": 54, "num_statements": 54, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [1, 8, 11, 12, 13, 14, 15, 18, 19, 22, 23, 26, 27, 28, 31, 32, 33, 36, 37, 38, 39, 40, 43, 44, 47, 48, 49, 50, 51, 59, 62, 65, 68, 69, 70, 71, 72, 75, 76, 77, 78, 82, 83, 84, 85, 86, 87, 88, 91, 92, 93, 94, 95, 98, 99], "summary": {"covered_lines": 54, "num_statements": 54, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "src/accessiweather/dialogs/__init__.py": {"executed_lines": [1, 8, 9, 10, 11, 13], "summary": {"covered_lines": 5, "num_statements": 5, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"": {"executed_lines": [1, 8, 9, 10, 11, 13], "summary": {"covered_lines": 5, "num_statements": 5, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [1, 8, 9, 10, 11, 13], "summary": {"covered_lines": 5, "num_statements": 5, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "src/accessiweather/dialogs/settings_handlers.py": {"executed_lines": [1, 3, 5, 6, 8, 10, 11, 14, 16, 17, 19, 20, 25, 26, 28, 29, 31, 32, 34, 35, 37, 38, 40, 41, 45, 46, 48, 49, 50, 56, 57, 60, 61, 63, 64, 68, 69, 71, 72, 74, 75, 76, 77, 78, 79, 80, 82, 85, 86, 88, 92, 93, 95, 96, 97, 101, 104, 106, 107, 109, 110, 114, 115, 117, 118, 119, 120, 125, 126, 128, 129, 134, 135, 139, 140, 144, 145, 147, 148, 152, 153, 155, 156, 160, 161, 165, 166, 170, 171, 179, 181, 183, 185, 188, 190, 192, 193, 194, 196, 197, 201, 202, 203, 208, 209, 210, 215, 216, 217, 221, 223, 226, 227, 231, 234, 235, 236, 242, 244, 245, 248, 249, 251, 252, 253, 255, 257, 264, 271, 278, 285, 292, 300, 301, 302, 303, 304, 306, 310, 314, 318, 323, 329, 331, 332, 333, 334, 337, 339, 342, 345, 348, 352], "summary": {"covered_lines": 152, "num_statements": 170, "percent_covered": 89.41176470588235, "percent_covered_display": "89", "missing_lines": 18, "excluded_lines": 15}, "missing_lines": [83, 98, 102, 182, 184, 195, 218, 219, 229, 237, 238, 240, 324, 325, 326, 327, 335, 336], "excluded_lines": [53, 54, 121, 122, 123, 175, 176, 198, 199, 204, 205, 206, 211, 212, 213], "functions": {"apply_settings_to_ui": {"executed_lines": [16, 17, 19, 20, 25, 26, 28, 29, 31, 32, 34, 35, 37, 38, 40, 41, 45, 46, 48, 49, 50, 56, 57, 60, 61, 63, 64, 68, 69, 71, 72, 74, 75, 76, 77, 78, 79, 80, 82, 85, 86, 88, 92, 93, 95, 96, 97, 101, 104, 106, 107, 109, 110, 114, 115, 117, 118, 119, 120, 125, 126, 128, 129, 134, 135, 139, 140, 144, 145, 147, 148, 152, 153, 155, 156, 160, 161, 165, 166, 170, 171], "summary": {"covered_lines": 81, "num_statements": 84, "percent_covered": 96.42857142857143, "percent_covered_display": "96", "missing_lines": 3, "excluded_lines": 7}, "missing_lines": [83, 98, 102], "excluded_lines": [53, 54, 121, 122, 123, 175, 176]}, "map_channel_display_to_value": {"executed_lines": [181, 183, 185], "summary": {"covered_lines": 3, "num_statements": 5, "percent_covered": 60.0, "percent_covered_display": "60", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [182, 184], "excluded_lines": []}, "collect_settings_from_ui": {"executed_lines": [190, 192, 201, 202, 203, 208, 209, 210, 215, 216, 217, 221, 223, 226, 227, 231, 234, 235, 236, 242, 244, 245, 248, 249, 251, 252, 253, 255, 257, 264, 271, 278, 285, 292, 300, 306, 310, 314, 318, 323, 329, 331, 332, 333, 334, 337, 339, 342, 345, 348, 352], "summary": {"covered_lines": 51, "num_statements": 63, "percent_covered": 80.95238095238095, "percent_covered_display": "81", "missing_lines": 12, "excluded_lines": 6}, "missing_lines": [218, 219, 229, 237, 238, 240, 324, 325, 326, 327, 335, 336], "excluded_lines": [204, 205, 206, 211, 212, 213]}, "collect_settings_from_ui._switch_value": {"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": 2}, "missing_lines": [195], "excluded_lines": [198, 199]}, "collect_settings_from_ui._as_int": {"executed_lines": [301, 302, 303, 304], "summary": {"covered_lines": 4, "num_statements": 4, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [1, 3, 5, 6, 8, 10, 11, 14, 179, 188], "summary": {"covered_lines": 9, "num_statements": 9, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [1, 3, 5, 6, 8, 10, 11, 14, 16, 17, 19, 20, 25, 26, 28, 29, 31, 32, 34, 35, 37, 38, 40, 41, 45, 46, 48, 49, 50, 56, 57, 60, 61, 63, 64, 68, 69, 71, 72, 74, 75, 76, 77, 78, 79, 80, 82, 85, 86, 88, 92, 93, 95, 96, 97, 101, 104, 106, 107, 109, 110, 114, 115, 117, 118, 119, 120, 125, 126, 128, 129, 134, 135, 139, 140, 144, 145, 147, 148, 152, 153, 155, 156, 160, 161, 165, 166, 170, 171, 179, 181, 183, 185, 188, 190, 192, 193, 194, 196, 197, 201, 202, 203, 208, 209, 210, 215, 216, 217, 221, 223, 226, 227, 231, 234, 235, 236, 242, 244, 245, 248, 249, 251, 252, 253, 255, 257, 264, 271, 278, 285, 292, 300, 301, 302, 303, 304, 306, 310, 314, 318, 323, 329, 331, 332, 333, 334, 337, 339, 342, 345, 348, 352], "summary": {"covered_lines": 152, "num_statements": 170, "percent_covered": 89.41176470588235, "percent_covered_display": "89", "missing_lines": 18, "excluded_lines": 15}, "missing_lines": [83, 98, 102, 182, 184, 195, 218, 219, 229, 237, 238, 240, 324, 325, 326, 327, 335, 336], "excluded_lines": [53, 54, 121, 122, 123, 175, 176, 198, 199, 204, 205, 206, 211, 212, 213]}}}, "src/accessiweather/dialogs/settings_tabs.py": {"executed_lines": [1, 3, 5, 6, 7, 9, 10, 11, 13, 16, 18, 19, 21, 22, 26, 27, 30, 32, 33, 34, 38, 41, 46, 47, 50, 52, 55, 57, 58, 60, 62, 67, 72, 76, 81, 82, 86, 87, 88, 92, 97, 99, 105, 112, 118, 119, 122, 124, 130, 131, 134, 136, 142, 143, 146, 148, 154, 155, 158, 160, 166, 167, 168, 170, 173, 175, 176, 177, 179, 181, 187, 193, 197, 203, 204, 207, 209, 210, 211, 215, 220, 222, 229, 230, 237, 238, 241, 243, 245, 251, 253, 259, 261, 263, 265, 267, 270, 272, 273, 275, 277, 284, 286, 287, 289, 294, 295, 298, 300, 301, 305, 306, 307, 309, 314, 316, 319, 321, 322, 324, 330, 331, 334, 336, 338, 343, 349, 350, 354, 355, 357, 360, 362, 364, 368, 370, 372, 373, 378, 380, 386, 388, 392, 394, 398, 400, 403, 405, 406, 408, 414, 416, 422, 424, 430, 431, 432, 434, 440, 442, 448, 454, 460, 462, 463, 469, 475, 477, 480, 486, 492, 494, 495, 501, 507, 509, 512, 514, 515, 517, 519, 520, 521, 522, 523, 524, 525, 530, 531, 532, 536, 541, 543, 544, 547, 553, 561, 567, 568, 571, 574, 580, 581, 584, 587, 593, 601, 607, 608, 609, 612, 618, 619, 622, 625, 631, 632, 635, 638, 644, 645, 648, 651, 657, 658, 661, 664, 670, 678, 684, 690, 697, 700, 706, 712, 719, 722, 728, 734, 741, 744], "summary": {"covered_lines": 240, "num_statements": 244, "percent_covered": 98.36065573770492, "percent_covered_display": "98", "missing_lines": 4, "excluded_lines": 13}, "missing_lines": [356, 358, 537, 538], "excluded_lines": [35, 36, 93, 94, 95, 216, 217, 218, 526, 527, 528, 533, 534], "functions": {"create_general_tab": {"executed_lines": [18, 19, 21, 22, 26, 27, 30, 32, 33, 34, 38, 41, 46, 47, 50, 52], "summary": {"covered_lines": 16, "num_statements": 16, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 2}, "missing_lines": [], "excluded_lines": [35, 36]}, "create_display_tab": {"executed_lines": [57, 58, 60, 62, 67, 72, 76, 81, 82, 86, 87, 88, 92, 97, 99, 105, 112, 118, 119, 122, 124, 130, 131, 134, 136, 142, 143, 146, 148, 154, 155, 158, 160, 166, 167, 168, 170], "summary": {"covered_lines": 37, "num_statements": 37, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 3}, "missing_lines": [], "excluded_lines": [93, 94, 95]}, "create_data_sources_tab": {"executed_lines": [175, 176, 177, 179, 181, 187, 193, 197, 203, 204, 207, 209, 210, 211, 215, 220, 222, 229, 230, 237, 238, 241, 243, 245, 251, 253, 259, 261, 263, 265, 267], "summary": {"covered_lines": 31, "num_statements": 31, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 3}, "missing_lines": [], "excluded_lines": [216, 217, 218]}, "create_audio_tab": {"executed_lines": [272, 273, 275, 277, 284, 286, 287, 289, 294, 295, 298, 300, 301, 305, 306, 307, 309, 314, 316], "summary": {"covered_lines": 19, "num_statements": 19, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "create_updates_tab": {"executed_lines": [321, 322, 324, 330, 331, 334, 336, 338, 343, 349, 350, 354, 355, 357, 360, 362, 364, 368, 370, 372, 373, 378, 380, 386, 388, 392, 394, 398, 400], "summary": {"covered_lines": 29, "num_statements": 31, "percent_covered": 93.54838709677419, "percent_covered_display": "94", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [356, 358], "excluded_lines": []}, "create_advanced_tab": {"executed_lines": [405, 406, 408, 414, 416, 422, 424, 430, 431, 432, 434, 440, 442, 448, 454, 460, 462, 463, 469, 475, 477, 480, 486, 492, 494, 495, 501, 507, 509], "summary": {"covered_lines": 29, "num_statements": 29, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "load_sound_packs": {"executed_lines": [514, 515, 517, 519, 520, 521, 522, 523, 524, 525, 530, 531, 532, 536], "summary": {"covered_lines": 14, "num_statements": 16, "percent_covered": 87.5, "percent_covered_display": "88", "missing_lines": 2, "excluded_lines": 5}, "missing_lines": [537, 538], "excluded_lines": [526, 527, 528, 533, 534]}, "create_notifications_tab": {"executed_lines": [543, 544, 547, 553, 561, 567, 568, 571, 574, 580, 581, 584, 587, 593, 601, 607, 608, 609, 612, 618, 619, 622, 625, 631, 632, 635, 638, 644, 645, 648, 651, 657, 658, 661, 664, 670, 678, 684, 690, 697, 700, 706, 712, 719, 722, 728, 734, 741, 744], "summary": {"covered_lines": 49, "num_statements": 49, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [1, 3, 5, 6, 7, 9, 10, 11, 13, 16, 55, 173, 270, 319, 403, 512, 541], "summary": {"covered_lines": 16, "num_statements": 16, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [1, 3, 5, 6, 7, 9, 10, 11, 13, 16, 18, 19, 21, 22, 26, 27, 30, 32, 33, 34, 38, 41, 46, 47, 50, 52, 55, 57, 58, 60, 62, 67, 72, 76, 81, 82, 86, 87, 88, 92, 97, 99, 105, 112, 118, 119, 122, 124, 130, 131, 134, 136, 142, 143, 146, 148, 154, 155, 158, 160, 166, 167, 168, 170, 173, 175, 176, 177, 179, 181, 187, 193, 197, 203, 204, 207, 209, 210, 211, 215, 220, 222, 229, 230, 237, 238, 241, 243, 245, 251, 253, 259, 261, 263, 265, 267, 270, 272, 273, 275, 277, 284, 286, 287, 289, 294, 295, 298, 300, 301, 305, 306, 307, 309, 314, 316, 319, 321, 322, 324, 330, 331, 334, 336, 338, 343, 349, 350, 354, 355, 357, 360, 362, 364, 368, 370, 372, 373, 378, 380, 386, 388, 392, 394, 398, 400, 403, 405, 406, 408, 414, 416, 422, 424, 430, 431, 432, 434, 440, 442, 448, 454, 460, 462, 463, 469, 475, 477, 480, 486, 492, 494, 495, 501, 507, 509, 512, 514, 515, 517, 519, 520, 521, 522, 523, 524, 525, 530, 531, 532, 536, 541, 543, 544, 547, 553, 561, 567, 568, 571, 574, 580, 581, 584, 587, 593, 601, 607, 608, 609, 612, 618, 619, 622, 625, 631, 632, 635, 638, 644, 645, 648, 651, 657, 658, 661, 664, 670, 678, 684, 690, 697, 700, 706, 712, 719, 722, 728, 734, 741, 744], "summary": {"covered_lines": 240, "num_statements": 244, "percent_covered": 98.36065573770492, "percent_covered_display": "98", "missing_lines": 4, "excluded_lines": 13}, "missing_lines": [356, 358, 537, 538], "excluded_lines": [35, 36, 93, 94, 95, 216, 217, 218, 526, 527, 528, 533, 534]}}}, "src/accessiweather/dialogs/soundpack_manager/__init__.py": {"executed_lines": [1, 3], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"": {"executed_lines": [1, 3], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [1, 3], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "src/accessiweather/dialogs/soundpack_manager/community.py": {"executed_lines": [1, 3, 4, 6, 10, 11, 13, 17, 21, 29], "summary": {"covered_lines": 8, "num_statements": 15, "percent_covered": 53.333333333333336, "percent_covered_display": "53", "missing_lines": 7, "excluded_lines": 2}, "missing_lines": [15, 19, 22, 23, 24, 25, 26], "excluded_lines": [6, 7], "functions": {"CommunityIntegration.__init__": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 1, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [15], "excluded_lines": []}, "CommunityIntegration.on_installed": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 1, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [19], "excluded_lines": []}, "CommunityIntegration.on_close": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 5, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 5, "excluded_lines": 0}, "missing_lines": [22, 23, 24, 25, 26], "excluded_lines": []}, "": {"executed_lines": [1, 3, 4, 6, 10, 11, 13, 17, 21, 29], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 2}, "missing_lines": [], "excluded_lines": [6, 7]}}, "classes": {"CommunityIntegration": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 7, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 7, "excluded_lines": 0}, "missing_lines": [15, 19, 22, 23, 24, 25, 26], "excluded_lines": []}, "": {"executed_lines": [1, 3, 4, 6, 10, 11, 13, 17, 21, 29], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 2}, "missing_lines": [], "excluded_lines": [6, 7]}}}, "src/accessiweather/dialogs/soundpack_manager/constants.py": {"executed_lines": [1, 3, 6, 7, 8, 10, 11, 13, 16, 22], "summary": {"covered_lines": 8, "num_statements": 9, "percent_covered": 88.88888888888889, "percent_covered_display": "89", "missing_lines": 1, "excluded_lines": 2}, "missing_lines": [14], "excluded_lines": [16, 17], "functions": {"AlertCategoryItem.__str__": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 1, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [14], "excluded_lines": []}, "AlertCategoryItem.__repr__": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 1}, "missing_lines": [], "excluded_lines": [17]}, "": {"executed_lines": [1, 3, 6, 7, 8, 10, 11, 13, 16, 22], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 1}, "missing_lines": [], "excluded_lines": [16]}}, "classes": {"AlertCategoryItem": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 1, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 1, "excluded_lines": 1}, "missing_lines": [14], "excluded_lines": [17]}, "": {"executed_lines": [1, 3, 6, 7, 8, 10, 11, 13, 16, 22], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 1}, "missing_lines": [], "excluded_lines": [16]}}}, "src/accessiweather/display/__init__.py": {"executed_lines": [1, 9, 11], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"": {"executed_lines": [1, 9, 11], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [1, 9, 11], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "src/accessiweather/display/presentation/__init__.py": {"executed_lines": [1, 6], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"": {"executed_lines": [1, 6], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [1, 6], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "src/accessiweather/display/presentation/current_conditions.py": {"executed_lines": [1, 3, 5, 7, 16, 17, 18, 19, 32, 44, 45, 46, 48, 49, 50, 51, 53, 56, 57, 59, 60, 63, 64, 66, 67, 69, 70, 71, 73, 74, 75, 77, 78, 79, 81, 82, 85, 86, 87, 89, 90, 93, 94, 97, 98, 100, 101, 102, 104, 105, 106, 108, 111, 112, 113, 114, 115, 116, 123, 124, 125, 126, 127, 128, 129, 130, 135, 136, 141, 142, 147, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 163, 164, 165, 166, 168, 169, 170, 171, 172, 174, 181, 190, 198, 199, 201, 202, 203, 204, 206, 207, 208, 209, 210, 211, 212, 215, 216, 217, 218, 219, 220, 222, 225, 244, 249, 250, 252, 253, 256, 257, 258, 260, 261, 262, 264, 267, 268, 269, 270, 272, 273, 274, 276, 277, 278, 279, 285, 288, 289, 290, 291, 292, 294, 297, 299, 300, 310, 312, 314, 315, 316], "summary": {"covered_lines": 152, "num_statements": 197, "percent_covered": 77.15736040609137, "percent_covered_display": "77", "missing_lines": 45, "excluded_lines": 0}, "missing_lines": [83, 91, 95, 109, 117, 118, 119, 120, 121, 122, 154, 161, 205, 213, 227, 228, 229, 230, 231, 232, 233, 234, 236, 237, 238, 239, 240, 241, 254, 259, 265, 280, 281, 282, 283, 286, 301, 302, 303, 304, 305, 306, 307, 313, 317], "excluded_lines": [], "functions": {"build_current_conditions": {"executed_lines": [44, 45, 46, 48, 49, 50, 51, 53, 56, 57, 59, 60, 63, 64, 66, 67, 69, 70, 71, 73, 74, 75, 77, 78, 79, 81, 82, 85, 86, 87, 89, 90, 93, 94, 97, 98, 100, 101, 102, 104, 105, 106, 108, 111, 112, 113, 114, 115, 116, 123, 124, 125, 126, 127, 128, 129, 130, 135, 136, 141, 142, 147, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 163, 164, 165, 166, 168, 169, 170, 171, 172, 174, 181], "summary": {"covered_lines": 84, "num_statements": 96, "percent_covered": 87.5, "percent_covered_display": "88", "missing_lines": 12, "excluded_lines": 0}, "missing_lines": [83, 91, 95, 109, 117, 118, 119, 120, 121, 122, 154, 161], "excluded_lines": []}, "format_trend_lines": {"executed_lines": [198, 199, 201, 202, 203, 204, 206, 207, 208, 209, 210, 211, 212, 215, 216, 217, 218, 219, 220, 222], "summary": {"covered_lines": 20, "num_statements": 22, "percent_covered": 90.9090909090909, "percent_covered_display": "91", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [205, 213], "excluded_lines": []}, "describe_trend": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 14, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 14, "excluded_lines": 0}, "missing_lines": [227, 228, 229, 230, 231, 232, 233, 234, 236, 237, 238, 239, 240, 241], "excluded_lines": []}, "compute_pressure_trend_from_hourly": {"executed_lines": [249, 250, 252, 253, 256, 257, 258, 260, 261, 262, 264, 267, 268, 269, 270, 272, 273, 274, 276, 277, 278, 279, 285, 288, 289, 290, 291, 292, 294], "summary": {"covered_lines": 29, "num_statements": 37, "percent_covered": 78.37837837837837, "percent_covered_display": "78", "missing_lines": 8, "excluded_lines": 0}, "missing_lines": [254, 259, 265, 280, 281, 282, 283, 286], "excluded_lines": []}, "direction_descriptor": {"executed_lines": [299, 300], "summary": {"covered_lines": 2, "num_statements": 9, "percent_covered": 22.22222222222222, "percent_covered_display": "22", "missing_lines": 7, "excluded_lines": 0}, "missing_lines": [301, 302, 303, 304, 305, 306, 307], "excluded_lines": []}, "split_direction_descriptor": {"executed_lines": [312, 314, 315, 316], "summary": {"covered_lines": 4, "num_statements": 6, "percent_covered": 66.66666666666667, "percent_covered_display": "67", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [313, 317], "excluded_lines": []}, "": {"executed_lines": [1, 3, 5, 7, 16, 17, 18, 19, 32, 190, 225, 244, 297, 310], "summary": {"covered_lines": 13, "num_statements": 13, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [1, 3, 5, 7, 16, 17, 18, 19, 32, 44, 45, 46, 48, 49, 50, 51, 53, 56, 57, 59, 60, 63, 64, 66, 67, 69, 70, 71, 73, 74, 75, 77, 78, 79, 81, 82, 85, 86, 87, 89, 90, 93, 94, 97, 98, 100, 101, 102, 104, 105, 106, 108, 111, 112, 113, 114, 115, 116, 123, 124, 125, 126, 127, 128, 129, 130, 135, 136, 141, 142, 147, 149, 150, 151, 152, 153, 155, 156, 157, 158, 159, 160, 163, 164, 165, 166, 168, 169, 170, 171, 172, 174, 181, 190, 198, 199, 201, 202, 203, 204, 206, 207, 208, 209, 210, 211, 212, 215, 216, 217, 218, 219, 220, 222, 225, 244, 249, 250, 252, 253, 256, 257, 258, 260, 261, 262, 264, 267, 268, 269, 270, 272, 273, 274, 276, 277, 278, 279, 285, 288, 289, 290, 291, 292, 294, 297, 299, 300, 310, 312, 314, 315, 316], "summary": {"covered_lines": 152, "num_statements": 197, "percent_covered": 77.15736040609137, "percent_covered_display": "77", "missing_lines": 45, "excluded_lines": 0}, "missing_lines": [83, 91, 95, 109, 117, 118, 119, 120, 121, 122, 154, 161, 205, 213, 227, 228, 229, 230, 231, 232, 233, 234, 236, 237, 238, 239, 240, 241, 254, 259, 265, 280, 281, 282, 283, 286, 301, 302, 303, 304, 305, 306, 307, 313, 317], "excluded_lines": []}}}, "src/accessiweather/display/presentation/environmental.py": {"executed_lines": [1, 3, 5, 6, 8, 9, 11, 29, 31, 41, 42, 43, 45, 46, 47, 48, 49, 50, 51, 54, 59, 60, 61, 63, 64, 66, 67, 68, 69, 70, 72, 73, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 87, 88, 90, 92, 93, 94, 96, 107, 108, 111, 112, 113, 114, 115, 116, 117, 119, 122, 123, 126, 127, 128, 129, 130, 133, 134, 135, 136], "summary": {"covered_lines": 69, "num_statements": 71, "percent_covered": 97.1830985915493, "percent_covered_display": "97", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [109, 124], "excluded_lines": [], "functions": {"build_air_quality_panel": {"executed_lines": [59, 60, 61, 63, 64, 66, 67, 68, 69, 70, 72, 73, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 87, 88, 90, 92, 93, 94, 96], "summary": {"covered_lines": 30, "num_statements": 30, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "_build_summary_line": {"executed_lines": [108, 111, 112, 113, 114, 115, 116, 117, 119], "summary": {"covered_lines": 9, "num_statements": 10, "percent_covered": 90.0, "percent_covered_display": "90", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [109], "excluded_lines": []}, "_build_pollutant_line": {"executed_lines": [123, 126, 127, 128, 129, 130], "summary": {"covered_lines": 6, "num_statements": 7, "percent_covered": 85.71428571428571, "percent_covered_display": "86", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [124], "excluded_lines": []}, "_build_updated_line": {"executed_lines": [134, 135, 136], "summary": {"covered_lines": 3, "num_statements": 3, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [1, 3, 5, 6, 8, 9, 11, 29, 31, 41, 42, 43, 45, 46, 47, 48, 49, 50, 51, 54, 107, 122, 133], "summary": {"covered_lines": 21, "num_statements": 21, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"AirQualityPresentation": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [1, 3, 5, 6, 8, 9, 11, 29, 31, 41, 42, 43, 45, 46, 47, 48, 49, 50, 51, 54, 59, 60, 61, 63, 64, 66, 67, 68, 69, 70, 72, 73, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 87, 88, 90, 92, 93, 94, 96, 107, 108, 111, 112, 113, 114, 115, 116, 117, 119, 122, 123, 126, 127, 128, 129, 130, 133, 134, 135, 136], "summary": {"covered_lines": 69, "num_statements": 71, "percent_covered": 97.1830985915493, "percent_covered_display": "97", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [109, 124], "excluded_lines": []}}}, "src/accessiweather/display/weather_presenter.py": {"executed_lines": [1, 8, 10, 11, 12, 13, 15, 27, 28, 31, 32, 33, 35, 36, 39, 40, 41, 43, 44, 45, 46, 49, 50, 51, 53, 54, 55, 56, 57, 60, 61, 62, 64, 65, 66, 67, 68, 70, 71, 73, 76, 77, 78, 80, 81, 82, 83, 84, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 101, 102, 103, 105, 106, 107, 108, 109, 110, 111, 112, 113, 116, 117, 118, 120, 121, 122, 125, 126, 127, 129, 130, 131, 132, 133, 134, 135, 136, 137, 139, 140, 144, 145, 151, 152, 154, 156, 162, 164, 166, 172, 186, 196, 201, 202, 203, 209, 211, 223, 232, 234, 235, 238, 249, 260, 271, 283, 294, 303, 306, 309, 310, 312, 313, 317, 318, 320, 321, 326, 328, 329, 330, 332, 337, 343, 344, 345, 346, 347, 348, 349, 356, 359, 363, 378, 388, 439, 480, 481, 482, 484, 486, 487, 488, 494, 495, 496, 497, 499, 504, 509, 510, 512, 513, 514, 515, 516, 517, 519, 520, 521, 522, 527, 528, 529, 532, 534, 535, 536, 537, 538, 540, 542, 543, 544, 547, 548, 552, 553], "summary": {"covered_lines": 171, "num_statements": 258, "percent_covered": 66.27906976744185, "percent_covered_display": "66", "missing_lines": 87, "excluded_lines": 13}, "missing_lines": [233, 255, 256, 257, 258, 263, 264, 265, 301, 304, 350, 351, 352, 354, 357, 358, 360, 361, 379, 380, 381, 382, 383, 384, 385, 386, 389, 390, 392, 399, 400, 401, 402, 404, 410, 416, 418, 419, 420, 421, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 436, 437, 440, 441, 443, 450, 451, 452, 453, 455, 456, 457, 459, 460, 461, 462, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 477, 478, 500, 501, 502, 531, 539], "excluded_lines": [70, 71, 72, 73, 139, 140, 141, 142, 144, 145, 146, 147, 148], "functions": {"CurrentConditionsPresentation.trend_summary": {"executed_lines": [73], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 2}, "missing_lines": [], "excluded_lines": [72, 73]}, "WeatherPresentation.current": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 1}, "missing_lines": [], "excluded_lines": [148]}, "WeatherPresenter.__init__": {"executed_lines": [156], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "WeatherPresenter.present": {"executed_lines": [164, 166, 172, 186, 196, 201, 202, 203, 209, 211], "summary": {"covered_lines": 10, "num_statements": 10, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "WeatherPresenter.present_current": {"executed_lines": [232, 234, 235, 238], "summary": {"covered_lines": 4, "num_statements": 5, "percent_covered": 80.0, "percent_covered_display": "80", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [233], "excluded_lines": []}, "WeatherPresenter.present_forecast": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 4, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 4, "excluded_lines": 0}, "missing_lines": [255, 256, 257, 258], "excluded_lines": []}, "WeatherPresenter.present_alerts": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 3, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 3, "excluded_lines": 0}, "missing_lines": [263, 264, 265], "excluded_lines": []}, "WeatherPresenter._build_current_conditions": {"executed_lines": [283], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "WeatherPresenter._build_forecast": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 1, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [301], "excluded_lines": []}, "WeatherPresenter._build_alerts": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 1, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [304], "excluded_lines": []}, "WeatherPresenter._build_aviation": {"executed_lines": [309, 310, 312, 313, 317, 318, 320, 321, 326, 328, 329, 330, 332, 337, 343, 344, 345, 346, 347, 348, 349, 356, 359, 363], "summary": {"covered_lines": 24, "num_statements": 32, "percent_covered": 75.0, "percent_covered_display": "75", "missing_lines": 8, "excluded_lines": 0}, "missing_lines": [350, 351, 352, 354, 357, 358, 360, 361], "excluded_lines": []}, "WeatherPresenter._format_aviation_time": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 8, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 8, "excluded_lines": 0}, "missing_lines": [379, 380, 381, 382, 383, 384, 385, 386], "excluded_lines": []}, "WeatherPresenter._summarize_sigmet": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 28, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 28, "excluded_lines": 0}, "missing_lines": [389, 390, 392, 399, 400, 401, 402, 404, 410, 416, 418, 419, 420, 421, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 436, 437], "excluded_lines": []}, "WeatherPresenter._summarize_cwa": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 28, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 28, "excluded_lines": 0}, "missing_lines": [440, 441, 443, 450, 451, 452, 453, 455, 456, 457, 459, 460, 461, 462, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 477, 478], "excluded_lines": []}, "WeatherPresenter._build_summary": {"executed_lines": [481, 482, 484, 486, 487, 488, 494, 495, 496, 497, 499, 504, 509, 510, 512, 513, 514, 515, 516, 517], "summary": {"covered_lines": 20, "num_statements": 23, "percent_covered": 86.95652173913044, "percent_covered_display": "87", "missing_lines": 3, "excluded_lines": 0}, "missing_lines": [500, 501, 502], "excluded_lines": []}, "WeatherPresenter._build_status_messages": {"executed_lines": [520, 521, 522, 527, 528, 529, 532], "summary": {"covered_lines": 7, "num_statements": 8, "percent_covered": 87.5, "percent_covered_display": "88", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [531], "excluded_lines": []}, "WeatherPresenter._get_temperature_unit_preference": {"executed_lines": [535, 536, 537, 538, 540], "summary": {"covered_lines": 5, "num_statements": 6, "percent_covered": 83.33333333333333, "percent_covered_display": "83", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [539], "excluded_lines": []}, "WeatherPresenter._format_timestamp": {"executed_lines": [543, 544], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [1, 8, 10, 11, 12, 13, 15, 27, 28, 31, 32, 33, 35, 36, 39, 40, 41, 43, 44, 45, 46, 49, 50, 51, 53, 54, 55, 56, 57, 60, 61, 62, 64, 65, 66, 67, 68, 70, 71, 76, 77, 78, 80, 81, 82, 83, 84, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 101, 102, 103, 105, 106, 107, 108, 109, 110, 111, 112, 113, 116, 117, 118, 120, 121, 122, 125, 126, 127, 129, 130, 131, 132, 133, 134, 135, 136, 137, 139, 140, 144, 145, 151, 152, 154, 162, 223, 249, 260, 271, 294, 303, 306, 378, 388, 439, 480, 519, 534, 542, 547, 548, 552, 553], "summary": {"covered_lines": 97, "num_statements": 97, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 8}, "missing_lines": [], "excluded_lines": [70, 71, 139, 140, 144, 145, 146, 147]}}, "classes": {"Metric": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "HourlyPeriodPresentation": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "ForecastPeriodPresentation": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "CurrentConditionsPresentation": {"executed_lines": [73], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 2}, "missing_lines": [], "excluded_lines": [72, 73]}, "ForecastPresentation": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "AviationPresentation": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "AlertPresentation": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "AlertsPresentation": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "WeatherPresentation": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 3}, "missing_lines": [], "excluded_lines": [141, 142, 148]}, "WeatherPresenter": {"executed_lines": [156, 164, 166, 172, 186, 196, 201, 202, 203, 209, 211, 232, 234, 235, 238, 283, 309, 310, 312, 313, 317, 318, 320, 321, 326, 328, 329, 330, 332, 337, 343, 344, 345, 346, 347, 348, 349, 356, 359, 363, 481, 482, 484, 486, 487, 488, 494, 495, 496, 497, 499, 504, 509, 510, 512, 513, 514, 515, 516, 517, 520, 521, 522, 527, 528, 529, 532, 535, 536, 537, 538, 540, 543, 544], "summary": {"covered_lines": 74, "num_statements": 161, "percent_covered": 45.962732919254655, "percent_covered_display": "46", "missing_lines": 87, "excluded_lines": 0}, "missing_lines": [233, 255, 256, 257, 258, 263, 264, 265, 301, 304, 350, 351, 352, 354, 357, 358, 360, 361, 379, 380, 381, 382, 383, 384, 385, 386, 389, 390, 392, 399, 400, 401, 402, 404, 410, 416, 418, 419, 420, 421, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 436, 437, 440, 441, 443, 450, 451, 452, 453, 455, 456, 457, 459, 460, 461, 462, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 477, 478, 500, 501, 502, 531, 539], "excluded_lines": []}, "": {"executed_lines": [1, 8, 10, 11, 12, 13, 15, 27, 28, 31, 32, 33, 35, 36, 39, 40, 41, 43, 44, 45, 46, 49, 50, 51, 53, 54, 55, 56, 57, 60, 61, 62, 64, 65, 66, 67, 68, 70, 71, 76, 77, 78, 80, 81, 82, 83, 84, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 101, 102, 103, 105, 106, 107, 108, 109, 110, 111, 112, 113, 116, 117, 118, 120, 121, 122, 125, 126, 127, 129, 130, 131, 132, 133, 134, 135, 136, 137, 139, 140, 144, 145, 151, 152, 154, 162, 223, 249, 260, 271, 294, 303, 306, 378, 388, 439, 480, 519, 534, 542, 547, 548, 552, 553], "summary": {"covered_lines": 97, "num_statements": 97, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 8}, "missing_lines": [], "excluded_lines": [70, 71, 139, 140, 144, 145, 146, 147]}}}, "src/accessiweather/format_string_parser.py": {"executed_lines": [1, 8, 9, 10, 12, 15, 16, 24, 44, 47, 49, 62, 63, 66, 68, 84, 85, 88, 89, 92, 93, 95, 96, 102, 104, 118, 119, 122, 123, 124, 127, 130, 131, 133, 136, 138, 140, 141, 150, 151, 152, 153], "summary": {"covered_lines": 40, "num_statements": 40, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"FormatStringParser.__init__": {"executed_lines": [47], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "FormatStringParser.get_placeholders": {"executed_lines": [62, 63, 66], "summary": {"covered_lines": 3, "num_statements": 3, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "FormatStringParser.validate_format_string": {"executed_lines": [84, 85, 88, 89, 92, 93, 95, 96, 102], "summary": {"covered_lines": 9, "num_statements": 9, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "FormatStringParser.format_string": {"executed_lines": [118, 119, 122, 123, 124, 127, 130, 131, 133, 136, 138], "summary": {"covered_lines": 11, "num_statements": 11, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "FormatStringParser.get_supported_placeholders_help": {"executed_lines": [150, 151, 152, 153], "summary": {"covered_lines": 4, "num_statements": 4, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [1, 8, 9, 10, 12, 15, 16, 24, 44, 49, 68, 104, 140, 141], "summary": {"covered_lines": 12, "num_statements": 12, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"FormatStringParser": {"executed_lines": [47, 62, 63, 66, 84, 85, 88, 89, 92, 93, 95, 96, 102, 118, 119, 122, 123, 124, 127, 130, 131, 133, 136, 138, 150, 151, 152, 153], "summary": {"covered_lines": 28, "num_statements": 28, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [1, 8, 9, 10, 12, 15, 16, 24, 44, 49, 68, 104, 140, 141], "summary": {"covered_lines": 12, "num_statements": 12, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "src/accessiweather/geocoding.py": {"executed_lines": [1, 7, 8, 10, 11, 13, 16, 17, 20, 23, 25, 38, 39, 41, 54, 56, 70, 71, 74, 76, 90, 92, 93, 96, 97, 98, 99, 102, 104, 106, 107, 108, 111, 112, 113, 116, 117, 122, 125, 129, 137, 138, 139, 140, 141, 142, 144, 168, 169, 171, 172, 176, 179, 180, 181, 183, 184, 186, 188, 189, 190, 193, 194, 195, 197, 198, 201, 202, 206, 214, 215, 218, 224, 238, 240, 242, 243, 246, 247, 248, 249, 254, 256, 260, 261, 262, 265, 267, 269, 270, 271, 272, 274, 275, 276, 277, 279, 281, 282, 285, 289, 290, 291, 294, 296, 297, 298], "summary": {"covered_lines": 105, "num_statements": 117, "percent_covered": 89.74358974358974, "percent_covered_display": "90", "missing_lines": 12, "excluded_lines": 0}, "missing_lines": [130, 135, 207, 212, 219, 220, 222, 286, 287, 299, 300, 301], "excluded_lines": [], "functions": {"GeocodingService.__init__": {"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}, "missing_lines": [], "excluded_lines": []}, "GeocodingService.is_zip_code": {"executed_lines": [54], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "GeocodingService.format_zip_code": {"executed_lines": [70, 71, 74], "summary": {"covered_lines": 3, "num_statements": 3, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "GeocodingService.geocode_address": {"executed_lines": [90, 92, 93, 96, 97, 98, 99, 102, 104, 106, 107, 108, 111, 112, 113, 116, 117, 122, 125, 129, 137, 138, 139, 140, 141, 142], "summary": {"covered_lines": 26, "num_statements": 28, "percent_covered": 92.85714285714286, "percent_covered_display": "93", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [130, 135], "excluded_lines": []}, "GeocodingService.validate_coordinates": {"executed_lines": [168, 169, 171, 172, 176, 179, 180, 181, 183, 184, 186, 188, 189, 190, 193, 194, 195, 197, 198, 201, 202, 206, 214, 215, 218], "summary": {"covered_lines": 25, "num_statements": 30, "percent_covered": 83.33333333333333, "percent_covered_display": "83", "missing_lines": 5, "excluded_lines": 0}, "missing_lines": [207, 212, 219, 220, 222], "excluded_lines": []}, "GeocodingService.suggest_locations": {"executed_lines": [238, 240, 242, 243, 246, 247, 248, 249, 254, 256, 260, 261, 262, 265, 267, 269, 270, 271, 272, 274, 275, 276, 277, 279, 281, 282, 285, 289, 290, 291, 294, 296, 297, 298], "summary": {"covered_lines": 34, "num_statements": 39, "percent_covered": 87.17948717948718, "percent_covered_display": "87", "missing_lines": 5, "excluded_lines": 0}, "missing_lines": [286, 287, 299, 300, 301], "excluded_lines": []}, "": {"executed_lines": [1, 7, 8, 10, 11, 13, 16, 17, 20, 23, 25, 41, 56, 76, 144, 224], "summary": {"covered_lines": 14, "num_statements": 14, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"GeocodingService": {"executed_lines": [38, 39, 54, 70, 71, 74, 90, 92, 93, 96, 97, 98, 99, 102, 104, 106, 107, 108, 111, 112, 113, 116, 117, 122, 125, 129, 137, 138, 139, 140, 141, 142, 168, 169, 171, 172, 176, 179, 180, 181, 183, 184, 186, 188, 189, 190, 193, 194, 195, 197, 198, 201, 202, 206, 214, 215, 218, 238, 240, 242, 243, 246, 247, 248, 249, 254, 256, 260, 261, 262, 265, 267, 269, 270, 271, 272, 274, 275, 276, 277, 279, 281, 282, 285, 289, 290, 291, 294, 296, 297, 298], "summary": {"covered_lines": 91, "num_statements": 103, "percent_covered": 88.3495145631068, "percent_covered_display": "88", "missing_lines": 12, "excluded_lines": 0}, "missing_lines": [130, 135, 207, 212, 219, 220, 222, 286, 287, 299, 300, 301], "excluded_lines": []}, "": {"executed_lines": [1, 7, 8, 10, 11, 13, 16, 17, 20, 23, 25, 41, 56, 76, 144, 224], "summary": {"covered_lines": 14, "num_statements": 14, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "src/accessiweather/handlers/__init__.py": {"executed_lines": [1, 3, 5, 10, 11, 17, 22, 33, 42], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"": {"executed_lines": [1, 3, 5, 10, 11, 17, 22, 33, 42], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [1, 3, 5, 10, 11, 17, 22, 33, 42], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "src/accessiweather/handlers/location_handlers.py": {"executed_lines": [1, 3, 5, 6, 8, 10, 11, 12, 14, 18, 21, 23, 24, 26, 28, 29, 30, 31, 32, 33, 36, 38, 40, 41, 42, 44, 45, 46, 47, 49, 50, 51, 52, 57, 59, 61, 62, 63, 66, 68, 70, 71, 72, 76, 78, 79, 80, 81, 83, 84, 86, 87, 89, 90, 91, 96, 98, 99, 103, 104, 105, 109], "summary": {"covered_lines": 47, "num_statements": 47, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 15}, "missing_lines": [], "excluded_lines": [14, 15, 31, 32, 33, 50, 51, 52, 89, 90, 91, 103, 104, 105, 109], "functions": {"on_location_changed": {"executed_lines": [23, 24, 26, 28, 29, 30, 31, 32, 33], "summary": {"covered_lines": 6, "num_statements": 6, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 3}, "missing_lines": [], "excluded_lines": [31, 32, 33]}, "on_add_location_pressed": {"executed_lines": [38, 40, 41, 42, 44, 45, 46, 47, 49, 50, 51, 52], "summary": {"covered_lines": 9, "num_statements": 9, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 3}, "missing_lines": [], "excluded_lines": [50, 51, 52]}, "on_remove_location_pressed": {"executed_lines": [59, 61, 62, 63, 66, 68, 70, 71, 72, 76, 78, 79, 80, 81, 83, 84, 86, 87, 89, 90, 91], "summary": {"covered_lines": 18, "num_statements": 18, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 3}, "missing_lines": [], "excluded_lines": [89, 90, 91]}, "show_remove_confirmation_dialog": {"executed_lines": [98, 99, 103, 104, 105, 109], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 4}, "missing_lines": [], "excluded_lines": [103, 104, 105, 109]}, "": {"executed_lines": [1, 3, 5, 6, 8, 10, 11, 12, 14, 18, 21, 36, 57, 96], "summary": {"covered_lines": 12, "num_statements": 12, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 2}, "missing_lines": [], "excluded_lines": [14, 15]}}, "classes": {"": {"executed_lines": [1, 3, 5, 6, 8, 10, 11, 12, 14, 18, 21, 23, 24, 26, 28, 29, 30, 31, 32, 33, 36, 38, 40, 41, 42, 44, 45, 46, 47, 49, 50, 51, 52, 57, 59, 61, 62, 63, 66, 68, 70, 71, 72, 76, 78, 79, 80, 81, 83, 84, 86, 87, 89, 90, 91, 96, 98, 99, 103, 104, 105, 109], "summary": {"covered_lines": 47, "num_statements": 47, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 15}, "missing_lines": [], "excluded_lines": [14, 15, 31, 32, 33, 50, 51, 52, 89, 90, 91, 103, 104, 105, 109]}}}, "src/accessiweather/location_manager.py": {"executed_lines": [1, 8, 10, 12, 13, 19, 22, 23, 25, 27, 28, 30, 31, 33, 35, 36, 37, 45, 49, 50, 51, 52, 54, 55, 56, 57, 58, 59, 60, 63, 65, 70, 71, 72, 74, 75, 76, 77, 78, 79, 82, 84, 88, 89, 90, 92, 93, 94, 95, 98, 99, 101, 103, 104, 105, 112, 116, 117, 118, 119, 121, 122, 123, 124, 128, 129, 130, 131, 134, 136, 138, 139, 142, 143, 146, 149, 150, 151, 152, 153, 154, 157, 161, 162, 163, 164, 167, 168, 171, 172, 176, 177, 184, 190, 197, 198, 199, 201, 217, 220, 222, 226, 227, 229, 233, 234, 237, 240, 241, 244, 247, 250, 252, 256, 281, 304, 319, 326, 364, 384, 385, 387, 389, 391, 392, 393, 394, 396, 397, 398, 399, 402, 403, 406, 408, 415, 416, 418, 419, 420, 421], "summary": {"covered_lines": 139, "num_statements": 210, "percent_covered": 66.19047619047619, "percent_covered_display": "66", "missing_lines": 71, "excluded_lines": 0}, "missing_lines": [61, 66, 67, 80, 85, 86, 96, 125, 126, 132, 158, 169, 173, 180, 181, 182, 186, 187, 188, 221, 223, 228, 230, 235, 236, 242, 243, 248, 254, 258, 261, 262, 263, 264, 267, 268, 270, 274, 277, 279, 286, 295, 296, 300, 302, 307, 314, 321, 322, 324, 328, 330, 333, 342, 343, 344, 346, 347, 350, 351, 352, 353, 356, 357, 358, 360, 361, 362, 366, 404, 423], "excluded_lines": [], "functions": {"LocationManager.__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}, "missing_lines": [], "excluded_lines": []}, "LocationManager.search_locations": {"executed_lines": [33, 35, 36, 37, 45, 49, 50, 51, 52, 54, 55, 56, 57, 58, 59, 60, 63, 65, 70, 71, 72, 74, 82, 84, 88, 89, 90, 92, 93, 94, 95], "summary": {"covered_lines": 31, "num_statements": 37, "percent_covered": 83.78378378378379, "percent_covered_display": "84", "missing_lines": 6, "excluded_lines": 0}, "missing_lines": [61, 66, 67, 85, 86, 96], "excluded_lines": []}, "LocationManager.search_locations.add_from_pool": {"executed_lines": [75, 76, 77, 78, 79], "summary": {"covered_lines": 5, "num_statements": 6, "percent_covered": 83.33333333333333, "percent_covered_display": "83", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [80], "excluded_lines": []}, "LocationManager.reverse_geocode": {"executed_lines": [101, 103, 104, 105, 112, 116, 117, 118, 119, 121, 122, 123, 124, 128, 129, 130, 131], "summary": {"covered_lines": 17, "num_statements": 20, "percent_covered": 85.0, "percent_covered_display": "85", "missing_lines": 3, "excluded_lines": 0}, "missing_lines": [125, 126, 132], "excluded_lines": []}, "LocationManager._parse_geocoding_result": {"executed_lines": [136, 138, 139, 142, 143, 146, 149, 150, 151, 152, 153, 154, 157, 161, 162, 163, 164, 167, 168, 171, 172, 176, 177, 184], "summary": {"covered_lines": 24, "num_statements": 33, "percent_covered": 72.72727272727273, "percent_covered_display": "73", "missing_lines": 9, "excluded_lines": 0}, "missing_lines": [158, 169, 173, 180, 181, 182, 186, 187, 188], "excluded_lines": []}, "LocationManager._score_geocoding_result": {"executed_lines": [197, 198, 199, 201, 217, 220, 222, 226, 227, 229, 233, 234, 237, 240, 241, 244, 247, 250], "summary": {"covered_lines": 18, "num_statements": 27, "percent_covered": 66.66666666666667, "percent_covered_display": "67", "missing_lines": 9, "excluded_lines": 0}, "missing_lines": [221, 223, 228, 230, 235, 236, 242, 243, 248], "excluded_lines": []}, "LocationManager.validate_coordinates": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 1, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [254], "excluded_lines": []}, "LocationManager.calculate_distance": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 11, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 11, "excluded_lines": 0}, "missing_lines": [258, 261, 262, 263, 264, 267, 268, 270, 274, 277, 279], "excluded_lines": []}, "LocationManager.get_us_state_from_coordinates": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 5, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 5, "excluded_lines": 0}, "missing_lines": [286, 295, 296, 300, 302], "excluded_lines": []}, "LocationManager.is_us_location": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 2, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [307, 314], "excluded_lines": []}, "LocationManager.format_coordinates": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 3, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 3, "excluded_lines": 0}, "missing_lines": [321, 322, 324], "excluded_lines": []}, "LocationManager.parse_coordinates": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 18, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 18, "excluded_lines": 0}, "missing_lines": [328, 330, 333, 342, 343, 344, 346, 347, 350, 351, 352, 353, 356, 357, 358, 360, 361, 362], "excluded_lines": []}, "LocationManager.get_common_locations": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 1, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [366], "excluded_lines": []}, "LocationManager.get_current_location_from_ip": {"executed_lines": [387, 389, 391, 392, 393, 394, 396, 397, 398, 399, 402, 403, 406, 408, 415, 416, 418, 419, 420, 421], "summary": {"covered_lines": 20, "num_statements": 22, "percent_covered": 90.9090909090909, "percent_covered_display": "91", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [404, 423], "excluded_lines": []}, "": {"executed_lines": [1, 8, 10, 12, 13, 19, 22, 23, 25, 30, 31, 98, 99, 134, 190, 252, 256, 281, 304, 319, 326, 364, 384, 385], "summary": {"covered_lines": 22, "num_statements": 22, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"LocationManager": {"executed_lines": [27, 28, 33, 35, 36, 37, 45, 49, 50, 51, 52, 54, 55, 56, 57, 58, 59, 60, 63, 65, 70, 71, 72, 74, 75, 76, 77, 78, 79, 82, 84, 88, 89, 90, 92, 93, 94, 95, 101, 103, 104, 105, 112, 116, 117, 118, 119, 121, 122, 123, 124, 128, 129, 130, 131, 136, 138, 139, 142, 143, 146, 149, 150, 151, 152, 153, 154, 157, 161, 162, 163, 164, 167, 168, 171, 172, 176, 177, 184, 197, 198, 199, 201, 217, 220, 222, 226, 227, 229, 233, 234, 237, 240, 241, 244, 247, 250, 387, 389, 391, 392, 393, 394, 396, 397, 398, 399, 402, 403, 406, 408, 415, 416, 418, 419, 420, 421], "summary": {"covered_lines": 117, "num_statements": 188, "percent_covered": 62.234042553191486, "percent_covered_display": "62", "missing_lines": 71, "excluded_lines": 0}, "missing_lines": [61, 66, 67, 80, 85, 86, 96, 125, 126, 132, 158, 169, 173, 180, 181, 182, 186, 187, 188, 221, 223, 228, 230, 235, 236, 242, 243, 248, 254, 258, 261, 262, 263, 264, 267, 268, 270, 274, 277, 279, 286, 295, 296, 300, 302, 307, 314, 321, 322, 324, 328, 330, 333, 342, 343, 344, 346, 347, 350, 351, 352, 353, 356, 357, 358, 360, 361, 362, 366, 404, 423], "excluded_lines": []}, "": {"executed_lines": [1, 8, 10, 12, 13, 19, 22, 23, 25, 30, 31, 98, 99, 134, 190, 252, 256, 281, 304, 319, 326, 364, 384, 385], "summary": {"covered_lines": 22, "num_statements": 22, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "src/accessiweather/logging_config.py": {"executed_lines": [1, 7, 8, 9, 10, 13, 23, 24, 27, 28, 31, 32, 35, 38, 43, 44, 45, 46, 49, 50, 55, 56, 57, 60, 61, 63], "summary": {"covered_lines": 25, "num_statements": 25, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"setup_logging": {"executed_lines": [23, 24, 27, 28, 31, 32, 35, 38, 43, 44, 45, 46, 49, 50, 55, 56, 57, 60, 61, 63], "summary": {"covered_lines": 20, "num_statements": 20, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [1, 7, 8, 9, 10, 13], "summary": {"covered_lines": 5, "num_statements": 5, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [1, 7, 8, 9, 10, 13, 23, 24, 27, 28, 31, 32, 35, 38, 43, 44, 45, 46, 49, 50, 55, 56, 57, 60, 61, 63], "summary": {"covered_lines": 25, "num_statements": 25, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "src/accessiweather/models/__init__.py": {"executed_lines": [1, 9, 12, 15, 16, 29], "summary": {"covered_lines": 5, "num_statements": 5, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"": {"executed_lines": [1, 9, 12, 15, 16, 29], "summary": {"covered_lines": 5, "num_statements": 5, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [1, 9, 12, 15, 16, 29], "summary": {"covered_lines": 5, "num_statements": 5, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "src/accessiweather/models/alerts.py": {"executed_lines": [1, 3, 5, 6, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 28, 31, 33, 34, 36, 41, 42, 43, 45, 47, 49, 58, 59, 61, 63, 64, 66, 67, 69, 72, 74, 76, 77, 80, 81, 82, 84, 86, 88, 90, 92, 93, 95, 96, 97, 99, 100, 103, 104, 106], "summary": {"covered_lines": 58, "num_statements": 61, "percent_covered": 95.08196721311475, "percent_covered_display": "95", "missing_lines": 3, "excluded_lines": 0}, "missing_lines": [29, 70, 101], "excluded_lines": [], "functions": {"WeatherAlert.__post_init__": {"executed_lines": [28], "summary": {"covered_lines": 1, "num_statements": 2, "percent_covered": 50.0, "percent_covered_display": "50", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [29], "excluded_lines": []}, "WeatherAlert.get_unique_id": {"executed_lines": [33, 34, 36, 41, 42, 43], "summary": {"covered_lines": 6, "num_statements": 6, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "WeatherAlert.get_content_hash": {"executed_lines": [47, 49, 58, 59], "summary": {"covered_lines": 4, "num_statements": 4, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "WeatherAlert.is_expired": {"executed_lines": [63, 64, 66, 67, 69, 72], "summary": {"covered_lines": 6, "num_statements": 7, "percent_covered": 85.71428571428571, "percent_covered_display": "86", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [70], "excluded_lines": []}, "WeatherAlert.get_severity_priority": {"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}, "missing_lines": [], "excluded_lines": []}, "WeatherAlerts.has_alerts": {"executed_lines": [88], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "WeatherAlerts.get_active_alerts": {"executed_lines": [92, 93, 95, 96, 97, 99, 100, 103, 104, 106], "summary": {"covered_lines": 10, "num_statements": 11, "percent_covered": 90.9090909090909, "percent_covered_display": "91", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [101], "excluded_lines": []}, "": {"executed_lines": [1, 3, 5, 6, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 31, 45, 61, 74, 80, 81, 82, 84, 86, 90], "summary": {"covered_lines": 28, "num_statements": 28, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"WeatherAlert": {"executed_lines": [28, 33, 34, 36, 41, 42, 43, 47, 49, 58, 59, 63, 64, 66, 67, 69, 72, 76, 77], "summary": {"covered_lines": 19, "num_statements": 21, "percent_covered": 90.47619047619048, "percent_covered_display": "90", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [29, 70], "excluded_lines": []}, "WeatherAlerts": {"executed_lines": [88, 92, 93, 95, 96, 97, 99, 100, 103, 104, 106], "summary": {"covered_lines": 11, "num_statements": 12, "percent_covered": 91.66666666666667, "percent_covered_display": "92", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [101], "excluded_lines": []}, "": {"executed_lines": [1, 3, 5, 6, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 31, 45, 61, 74, 80, 81, 82, 84, 86, 90], "summary": {"covered_lines": 28, "num_statements": 28, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "src/accessiweather/models/config.py": {"executed_lines": [1, 3, 5, 7, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 55, 56, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 72, 74, 117, 118, 120, 165, 167, 169, 170, 171, 172, 173, 174, 175, 176, 178, 180, 182, 183, 191, 194, 195, 196, 198, 199, 200, 202, 204, 229, 230, 232, 234, 235, 236, 245, 246, 247, 248, 255, 261, 262, 264], "summary": {"covered_lines": 100, "num_statements": 108, "percent_covered": 92.5925925925926, "percent_covered_display": "93", "missing_lines": 8, "excluded_lines": 0}, "missing_lines": [70, 179, 181, 184, 185, 186, 187, 189], "excluded_lines": [], "functions": {"AppSettings._as_bool": {"executed_lines": [58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69], "summary": {"covered_lines": 12, "num_statements": 13, "percent_covered": 92.3076923076923, "percent_covered_display": "92", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [70], "excluded_lines": []}, "AppSettings.to_dict": {"executed_lines": [74], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "AppSettings.from_dict": {"executed_lines": [120], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "AppSettings.to_alert_settings": {"executed_lines": [167, 169, 170, 171, 172, 173, 174, 175, 176, 178, 180, 182, 183, 191], "summary": {"covered_lines": 14, "num_statements": 21, "percent_covered": 66.66666666666667, "percent_covered_display": "67", "missing_lines": 7, "excluded_lines": 0}, "missing_lines": [179, 181, 184, 185, 186, 187, 189], "excluded_lines": []}, "AppConfig.to_dict": {"executed_lines": [204], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "AppConfig.from_dict": {"executed_lines": [232, 234, 235, 236, 245, 246, 247, 248, 255], "summary": {"covered_lines": 9, "num_statements": 9, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "AppConfig.default": {"executed_lines": [264], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [1, 3, 5, 7, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 55, 56, 72, 117, 118, 165, 194, 195, 196, 198, 199, 200, 202, 229, 230, 261, 262], "summary": {"covered_lines": 61, "num_statements": 61, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"AppSettings": {"executed_lines": [58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 74, 120, 167, 169, 170, 171, 172, 173, 174, 175, 176, 178, 180, 182, 183, 191], "summary": {"covered_lines": 28, "num_statements": 36, "percent_covered": 77.77777777777777, "percent_covered_display": "78", "missing_lines": 8, "excluded_lines": 0}, "missing_lines": [70, 179, 181, 184, 185, 186, 187, 189], "excluded_lines": []}, "AppConfig": {"executed_lines": [204, 232, 234, 235, 236, 245, 246, 247, 248, 255, 264], "summary": {"covered_lines": 11, "num_statements": 11, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [1, 3, 5, 7, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 55, 56, 72, 117, 118, 165, 194, 195, 196, 198, 199, 200, 202, 229, 230, 261, 262], "summary": {"covered_lines": 61, "num_statements": 61, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "src/accessiweather/models/errors.py": {"executed_lines": [1, 3, 5, 6, 9, 10, 11, 13, 14, 15, 16, 18, 19, 20], "summary": {"covered_lines": 12, "num_statements": 12, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"ApiError.__post_init__": {"executed_lines": [19, 20], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [1, 3, 5, 6, 9, 10, 11, 13, 14, 15, 16, 18], "summary": {"covered_lines": 10, "num_statements": 10, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"ApiError": {"executed_lines": [19, 20], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [1, 3, 5, 6, 9, 10, 11, 13, 14, 15, 16, 18], "summary": {"covered_lines": 10, "num_statements": 10, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "src/accessiweather/models/weather.py": {"executed_lines": [1, 3, 5, 6, 8, 11, 12, 13, 15, 16, 17, 18, 19, 21, 22, 24, 25, 26, 29, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 59, 61, 70, 72, 73, 74, 75, 76, 78, 79, 80, 81, 84, 85, 86, 87, 88, 91, 92, 93, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 107, 108, 109, 111, 112, 114, 116, 119, 120, 121, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 136, 146, 147, 148, 150, 151, 153, 155, 157, 170, 173, 174, 176, 177, 178, 179, 181, 183, 186, 187, 188, 189, 191, 192, 193, 194, 195, 198, 200, 202, 203, 204, 205, 206, 207, 209, 210, 216, 217, 218, 220, 221, 222, 223, 224, 225, 226, 229, 230, 231, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 245, 246, 257, 258, 259, 261, 262, 263, 264, 265, 266, 268, 270, 278, 279, 280, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 296, 297, 299, 301, 302, 303, 305, 307], "summary": {"covered_lines": 184, "num_statements": 191, "percent_covered": 96.33507853403141, "percent_covered_display": "96", "missing_lines": 7, "excluded_lines": 0}, "missing_lines": [82, 171, 175, 180, 196, 212, 213], "excluded_lines": [], "functions": {"Location.__str__": {"executed_lines": [22], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "Location.__post_init__": {"executed_lines": [25, 26], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "CurrentConditions.has_data": {"executed_lines": [61], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "CurrentConditions.__post_init__": {"executed_lines": [72, 73, 74, 75, 76, 78, 79, 80, 81, 84, 85, 86, 87, 88], "summary": {"covered_lines": 14, "num_statements": 15, "percent_covered": 93.33333333333333, "percent_covered_display": "93", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [82], "excluded_lines": []}, "Forecast.has_data": {"executed_lines": [116], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "HourlyForecastPeriod.has_data": {"executed_lines": [136], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "HourlyForecast.has_data": {"executed_lines": [155], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "HourlyForecast.get_next_hours": {"executed_lines": [170, 173, 183, 186, 187, 188, 189, 191, 192, 193, 194, 195, 198, 200, 202, 203, 204, 205, 206, 207, 209, 210], "summary": {"covered_lines": 22, "num_statements": 26, "percent_covered": 84.61538461538461, "percent_covered_display": "85", "missing_lines": 4, "excluded_lines": 0}, "missing_lines": [171, 196, 212, 213], "excluded_lines": []}, "HourlyForecast.get_next_hours._to_timestamp": {"executed_lines": [174, 176, 177, 178, 179, 181], "summary": {"covered_lines": 6, "num_statements": 8, "percent_covered": 75.0, "percent_covered_display": "75", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [175, 180], "excluded_lines": []}, "EnvironmentalConditions.has_data": {"executed_lines": [246], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "AviationData.has_taf": {"executed_lines": [270], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "WeatherData.current_conditions": {"executed_lines": [303], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "WeatherData.has_any_data": {"executed_lines": [307], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [1, 3, 5, 6, 8, 11, 12, 13, 15, 16, 17, 18, 19, 21, 24, 29, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 59, 70, 91, 92, 93, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 107, 108, 109, 111, 112, 114, 119, 120, 121, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 146, 147, 148, 150, 151, 153, 157, 216, 217, 218, 220, 221, 222, 223, 224, 225, 226, 229, 230, 231, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 245, 257, 258, 259, 261, 262, 263, 264, 265, 266, 268, 278, 279, 280, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 296, 297, 301, 302, 305], "summary": {"covered_lines": 130, "num_statements": 130, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"Location": {"executed_lines": [22, 25, 26], "summary": {"covered_lines": 3, "num_statements": 3, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "CurrentConditions": {"executed_lines": [61, 72, 73, 74, 75, 76, 78, 79, 80, 81, 84, 85, 86, 87, 88], "summary": {"covered_lines": 15, "num_statements": 16, "percent_covered": 93.75, "percent_covered_display": "94", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [82], "excluded_lines": []}, "ForecastPeriod": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "Forecast": {"executed_lines": [116], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "HourlyForecastPeriod": {"executed_lines": [136], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "HourlyForecast": {"executed_lines": [155, 170, 173, 174, 176, 177, 178, 179, 181, 183, 186, 187, 188, 189, 191, 192, 193, 194, 195, 198, 200, 202, 203, 204, 205, 206, 207, 209, 210], "summary": {"covered_lines": 29, "num_statements": 35, "percent_covered": 82.85714285714286, "percent_covered_display": "83", "missing_lines": 6, "excluded_lines": 0}, "missing_lines": [171, 175, 180, 196, 212, 213], "excluded_lines": []}, "TrendInsight": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "EnvironmentalConditions": {"executed_lines": [246], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "AviationData": {"executed_lines": [270], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "WeatherData": {"executed_lines": [299, 303, 307], "summary": {"covered_lines": 3, "num_statements": 3, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [1, 3, 5, 6, 8, 11, 12, 13, 15, 16, 17, 18, 19, 21, 24, 29, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 59, 70, 91, 92, 93, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 107, 108, 109, 111, 112, 114, 119, 120, 121, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 134, 146, 147, 148, 150, 151, 153, 157, 216, 217, 218, 220, 221, 222, 223, 224, 225, 226, 229, 230, 231, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 245, 257, 258, 259, 261, 262, 263, 264, 265, 266, 268, 278, 279, 280, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 296, 297, 301, 302, 305], "summary": {"covered_lines": 130, "num_statements": 130, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "src/accessiweather/notifications/__init__.py": {"executed_lines": [1, 8, 9, 10, 12], "summary": {"covered_lines": 4, "num_statements": 4, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"": {"executed_lines": [1, 8, 9, 10, 12], "summary": {"covered_lines": 4, "num_statements": 4, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [1, 8, 9, 10, 12], "summary": {"covered_lines": 4, "num_statements": 4, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "src/accessiweather/notifications/alert_sound_mapper.py": {"executed_lines": [1, 11, 13, 15, 20, 27, 35, 38, 39, 40, 41, 44, 46, 47, 52, 56, 57, 59, 60, 61, 73, 91, 92, 100, 101, 102, 103, 107, 113, 115, 117, 119, 121, 123, 124, 127, 140, 143, 144, 145, 147, 148, 149, 152, 153, 154, 155, 156, 157, 158, 159, 162, 163, 164, 165, 167, 168, 169, 171, 174], "summary": {"covered_lines": 59, "num_statements": 66, "percent_covered": 89.39393939393939, "percent_covered_display": "89", "missing_lines": 7, "excluded_lines": 0}, "missing_lines": [53, 58, 64, 70, 104, 114, 176], "excluded_lines": [], "functions": {"_contains_token": {"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}, "missing_lines": [], "excluded_lines": []}, "_extract_alert_type": {"executed_lines": [46, 47, 52], "summary": {"covered_lines": 3, "num_statements": 4, "percent_covered": 75.0, "percent_covered_display": "75", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [53], "excluded_lines": []}, "_normalize_severity": {"executed_lines": [57, 59, 60, 61], "summary": {"covered_lines": 4, "num_statements": 7, "percent_covered": 57.142857142857146, "percent_covered_display": "57", "missing_lines": 3, "excluded_lines": 0}, "missing_lines": [58, 64, 70], "excluded_lines": []}, "_extract_hazard": {"executed_lines": [92, 100, 101, 102, 103], "summary": {"covered_lines": 5, "num_statements": 6, "percent_covered": 83.33333333333333, "percent_covered_display": "83", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [104], "excluded_lines": []}, "_normalize_event_to_key": {"executed_lines": [113, 115, 117, 119, 121, 123, 124], "summary": {"covered_lines": 7, "num_statements": 8, "percent_covered": 87.5, "percent_covered_display": "88", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [114], "excluded_lines": []}, "get_candidate_sound_events": {"executed_lines": [140, 143, 144, 145, 147, 148, 149, 152, 153, 154, 155, 156, 157, 158, 159, 162, 163, 164, 165, 167, 168, 169, 171], "summary": {"covered_lines": 23, "num_statements": 23, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "choose_sound_event": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 1, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [176], "excluded_lines": []}, "": {"executed_lines": [1, 11, 13, 15, 20, 27, 35, 38, 44, 56, 73, 91, 107, 127, 174], "summary": {"covered_lines": 14, "num_statements": 14, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [1, 11, 13, 15, 20, 27, 35, 38, 39, 40, 41, 44, 46, 47, 52, 56, 57, 59, 60, 61, 73, 91, 92, 100, 101, 102, 103, 107, 113, 115, 117, 119, 121, 123, 124, 127, 140, 143, 144, 145, 147, 148, 149, 152, 153, 154, 155, 156, 157, 158, 159, 162, 163, 164, 165, 167, 168, 169, 171, 174], "summary": {"covered_lines": 59, "num_statements": 66, "percent_covered": 89.39393939393939, "percent_covered_display": "89", "missing_lines": 7, "excluded_lines": 0}, "missing_lines": [53, 58, 64, 70, 104, 114, 176], "excluded_lines": []}}}, "src/accessiweather/notifications/sound_pack_installer.py": {"executed_lines": [1, 3, 4, 5, 6, 7, 8, 10, 13, 14, 16, 25, 26, 28, 42, 43, 45, 46, 49, 50, 52, 54, 55, 58, 59, 60, 62, 63, 66, 67, 68, 71, 72, 73, 75, 78, 79, 81, 82, 92, 105, 106, 108, 109, 110, 112, 113, 114, 119, 133, 134, 135, 137, 138, 139, 140, 142, 143, 145, 150, 159, 161, 164, 165, 168, 169, 172, 173, 174, 176, 184, 189, 191, 204, 205, 206, 208, 209, 210, 213, 214, 216, 220, 221, 223, 224, 225, 226, 228, 229, 231, 233, 234, 238, 252, 253, 254, 256, 257, 260, 275, 276, 279, 280, 282], "summary": {"covered_lines": 103, "num_statements": 127, "percent_covered": 81.10236220472441, "percent_covered_display": "81", "missing_lines": 24, "excluded_lines": 0}, "missing_lines": [84, 85, 86, 87, 88, 89, 90, 115, 116, 117, 146, 147, 148, 162, 166, 170, 186, 187, 217, 235, 236, 284, 285, 286], "excluded_lines": [], "functions": {"SoundPackInstaller.__init__": {"executed_lines": [25, 26], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "SoundPackInstaller.install_from_zip": {"executed_lines": [42, 43, 45, 46, 49, 50, 52, 54, 55, 58, 59, 60, 62, 63, 66, 67, 68, 71, 72, 73, 75, 78, 79, 81, 82], "summary": {"covered_lines": 25, "num_statements": 32, "percent_covered": 78.125, "percent_covered_display": "78", "missing_lines": 7, "excluded_lines": 0}, "missing_lines": [84, 85, 86, 87, 88, 89, 90], "excluded_lines": []}, "SoundPackInstaller.uninstall_pack": {"executed_lines": [105, 106, 108, 109, 110, 112, 113, 114], "summary": {"covered_lines": 8, "num_statements": 11, "percent_covered": 72.72727272727273, "percent_covered_display": "73", "missing_lines": 3, "excluded_lines": 0}, "missing_lines": [115, 116, 117], "excluded_lines": []}, "SoundPackInstaller.export_pack": {"executed_lines": [133, 134, 135, 137, 138, 139, 140, 142, 143, 145], "summary": {"covered_lines": 10, "num_statements": 13, "percent_covered": 76.92307692307692, "percent_covered_display": "77", "missing_lines": 3, "excluded_lines": 0}, "missing_lines": [146, 147, 148], "excluded_lines": []}, "SoundPackInstaller.list_installed_packs": {"executed_lines": [159, 161, 164, 165, 168, 169, 172, 173, 174, 176, 184, 189], "summary": {"covered_lines": 12, "num_statements": 17, "percent_covered": 70.58823529411765, "percent_covered_display": "71", "missing_lines": 5, "excluded_lines": 0}, "missing_lines": [162, 166, 170, 186, 187], "excluded_lines": []}, "SoundPackInstaller._validate_extracted_pack": {"executed_lines": [204, 205, 206, 208, 209, 210, 213, 214, 216, 220, 221, 223, 224, 225, 226, 228, 229, 231, 233, 234], "summary": {"covered_lines": 20, "num_statements": 23, "percent_covered": 86.95652173913044, "percent_covered_display": "87", "missing_lines": 3, "excluded_lines": 0}, "missing_lines": [217, 235, 236], "excluded_lines": []}, "SoundPackInstaller.create_pack_template": {"executed_lines": [252, 253, 254, 256, 257, 260, 275, 276, 279, 280, 282], "summary": {"covered_lines": 11, "num_statements": 14, "percent_covered": 78.57142857142857, "percent_covered_display": "79", "missing_lines": 3, "excluded_lines": 0}, "missing_lines": [284, 285, 286], "excluded_lines": []}, "": {"executed_lines": [1, 3, 4, 5, 6, 7, 8, 10, 13, 14, 16, 28, 92, 119, 150, 191, 238], "summary": {"covered_lines": 15, "num_statements": 15, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"SoundPackInstaller": {"executed_lines": [25, 26, 42, 43, 45, 46, 49, 50, 52, 54, 55, 58, 59, 60, 62, 63, 66, 67, 68, 71, 72, 73, 75, 78, 79, 81, 82, 105, 106, 108, 109, 110, 112, 113, 114, 133, 134, 135, 137, 138, 139, 140, 142, 143, 145, 159, 161, 164, 165, 168, 169, 172, 173, 174, 176, 184, 189, 204, 205, 206, 208, 209, 210, 213, 214, 216, 220, 221, 223, 224, 225, 226, 228, 229, 231, 233, 234, 252, 253, 254, 256, 257, 260, 275, 276, 279, 280, 282], "summary": {"covered_lines": 88, "num_statements": 112, "percent_covered": 78.57142857142857, "percent_covered_display": "79", "missing_lines": 24, "excluded_lines": 0}, "missing_lines": [84, 85, 86, 87, 88, 89, 90, 115, 116, 117, 146, 147, 148, 162, 166, 170, 186, 187, 217, 235, 236, 284, 285, 286], "excluded_lines": []}, "": {"executed_lines": [1, 3, 4, 5, 6, 7, 8, 10, 13, 14, 16, 28, 92, 119, 150, 191, 238], "summary": {"covered_lines": 15, "num_statements": 15, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "src/accessiweather/openmeteo_client.py": {"executed_lines": [1, 13, 14, 15, 17, 19, 21, 24, 25, 28, 29, 32, 33, 36, 37, 44, 46, 64, 65, 66, 67, 70, 76, 78, 79, 81, 100, 102, 103, 104, 105, 108, 109, 110, 111, 112, 113, 114, 115, 117, 120, 121, 122, 124, 125, 126, 129, 130, 131, 135, 136, 137, 140, 141, 142, 146, 147, 148, 154, 178, 206, 208, 234, 258, 260, 286, 311, 313, 314, 327, 328, 329, 331, 332, 333, 335, 337], "summary": {"covered_lines": 69, "num_statements": 73, "percent_covered": 94.52054794520548, "percent_covered_display": "95", "missing_lines": 4, "excluded_lines": 4}, "missing_lines": [149, 152, 339, 340], "excluded_lines": [76, 77, 78, 79], "functions": {"OpenMeteoApiClient.__init__": {"executed_lines": [64, 65, 66, 67, 70], "summary": {"covered_lines": 5, "num_statements": 5, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "OpenMeteoApiClient.__del__": {"executed_lines": [78, 79], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 3}, "missing_lines": [], "excluded_lines": [77, 78, 79]}, "OpenMeteoApiClient._make_request": {"executed_lines": [100, 102, 103, 104, 105, 108, 109, 110, 111, 112, 113, 114, 115, 117, 120, 121, 122, 124, 125, 126, 129, 130, 131, 135, 136, 137, 140, 141, 142, 146, 147, 148], "summary": {"covered_lines": 32, "num_statements": 34, "percent_covered": 94.11764705882354, "percent_covered_display": "94", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [149, 152], "excluded_lines": []}, "OpenMeteoApiClient.get_current_weather": {"executed_lines": [178, 206], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "OpenMeteoApiClient.get_forecast": {"executed_lines": [234, 258], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "OpenMeteoApiClient.get_hourly_forecast": {"executed_lines": [286, 311], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "OpenMeteoApiClient.get_weather_description": {"executed_lines": [327, 328, 329, 331, 332, 333, 335], "summary": {"covered_lines": 7, "num_statements": 7, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "OpenMeteoApiClient.close": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 2, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [339, 340], "excluded_lines": []}, "": {"executed_lines": [1, 13, 14, 15, 17, 19, 21, 24, 25, 28, 29, 32, 33, 36, 37, 44, 46, 76, 81, 154, 208, 260, 313, 314, 337], "summary": {"covered_lines": 19, "num_statements": 19, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 1}, "missing_lines": [], "excluded_lines": [76]}}, "classes": {"OpenMeteoError": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "OpenMeteoApiError": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "OpenMeteoNetworkError": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "OpenMeteoApiClient": {"executed_lines": [64, 65, 66, 67, 70, 78, 79, 100, 102, 103, 104, 105, 108, 109, 110, 111, 112, 113, 114, 115, 117, 120, 121, 122, 124, 125, 126, 129, 130, 131, 135, 136, 137, 140, 141, 142, 146, 147, 148, 178, 206, 234, 258, 286, 311, 327, 328, 329, 331, 332, 333, 335], "summary": {"covered_lines": 50, "num_statements": 54, "percent_covered": 92.5925925925926, "percent_covered_display": "93", "missing_lines": 4, "excluded_lines": 3}, "missing_lines": [149, 152, 339, 340], "excluded_lines": [77, 78, 79]}, "": {"executed_lines": [1, 13, 14, 15, 17, 19, 21, 24, 25, 28, 29, 32, 33, 36, 37, 44, 46, 76, 81, 154, 208, 260, 313, 314, 337], "summary": {"covered_lines": 19, "num_statements": 19, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 1}, "missing_lines": [], "excluded_lines": [76]}}}, "src/accessiweather/services/__init__.py": {"executed_lines": [1, 8, 9, 10, 11, 12, 14], "summary": {"covered_lines": 6, "num_statements": 6, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"": {"executed_lines": [1, 8, 9, 10, 11, 12, 14], "summary": {"covered_lines": 6, "num_statements": 6, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [1, 8, 9, 10, 11, 12, 14], "summary": {"covered_lines": 6, "num_statements": 6, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "src/accessiweather/services/community_soundpack_service.py": {"executed_lines": [1, 15, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 32, 34, 36, 39, 40, 41, 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 55, 56, 57, 59, 63, 64, 66, 86, 87, 88, 89, 94, 95, 96, 98, 99, 100, 102, 103, 113, 114, 122, 125, 126, 127, 128, 161, 162, 163, 164, 165, 166, 167, 212, 213, 214, 215, 222, 223, 224, 226, 227, 229, 230, 231, 232, 236, 237, 238, 239, 241, 242, 243, 245, 249, 250, 251, 254, 259, 260, 280, 282, 283, 284, 286, 287, 288, 289, 291, 292, 293, 294, 295, 296, 297, 304, 327, 330, 331, 333, 339, 347, 348, 356, 420, 426, 432, 433, 434, 437, 440, 442, 443, 444, 445, 447, 448, 449, 450, 454, 455, 459, 460, 461, 463, 464, 465, 478, 479, 480, 481, 482, 489, 491, 497, 498, 499, 501, 502, 503, 511, 512], "summary": {"covered_lines": 151, "num_statements": 283, "percent_covered": 53.35689045936396, "percent_covered_display": "53", "missing_lines": 132, "excluded_lines": 0}, "missing_lines": [60, 120, 129, 130, 131, 132, 133, 134, 135, 136, 152, 153, 155, 156, 157, 158, 168, 169, 170, 171, 172, 176, 177, 178, 179, 180, 181, 182, 183, 185, 186, 187, 201, 203, 205, 206, 207, 208, 209, 216, 217, 218, 219, 233, 234, 240, 252, 253, 255, 256, 257, 285, 290, 298, 299, 300, 301, 302, 334, 335, 336, 337, 340, 354, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 375, 376, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 395, 396, 397, 398, 399, 400, 402, 403, 404, 405, 406, 407, 408, 410, 411, 412, 413, 414, 415, 418, 435, 446, 456, 462, 466, 467, 468, 469, 470, 471, 472, 475, 476, 483, 484, 485, 486, 487, 500, 504, 510], "excluded_lines": [], "functions": {"CommunityPack.__str__": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 1, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [60], "excluded_lines": []}, "CommunitySoundPackService.__init__": {"executed_lines": [86, 87, 88, 89, 94, 95, 96], "summary": {"covered_lines": 7, "num_statements": 7, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "CommunitySoundPackService.aclose": {"executed_lines": [99, 100], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "CommunitySoundPackService.fetch_available_packs": {"executed_lines": [113, 114, 122, 125, 126, 127, 128, 161, 162, 163, 164, 165, 166, 167, 212, 213, 214, 215, 222, 223, 224], "summary": {"covered_lines": 21, "num_statements": 63, "percent_covered": 33.333333333333336, "percent_covered_display": "33", "missing_lines": 42, "excluded_lines": 0}, "missing_lines": [120, 129, 130, 131, 132, 133, 134, 135, 136, 152, 153, 155, 156, 157, 158, 168, 169, 170, 171, 172, 176, 177, 178, 179, 180, 181, 182, 183, 185, 186, 187, 201, 203, 205, 206, 207, 208, 209, 216, 217, 218, 219], "excluded_lines": []}, "CommunitySoundPackService._fetch_repo_directory_packs": {"executed_lines": [229, 230, 231, 232, 236, 237, 238, 239, 241, 242, 243, 245, 249, 250, 251, 254, 259, 260, 280], "summary": {"covered_lines": 19, "num_statements": 27, "percent_covered": 70.37037037037037, "percent_covered_display": "70", "missing_lines": 8, "excluded_lines": 0}, "missing_lines": [233, 234, 240, 252, 253, 255, 256, 257], "excluded_lines": []}, "CommunitySoundPackService._calculate_tree_size": {"executed_lines": [284, 286, 287, 288, 289, 291, 292, 293, 294, 295, 296, 297], "summary": {"covered_lines": 12, "num_statements": 19, "percent_covered": 63.1578947368421, "percent_covered_display": "63", "missing_lines": 7, "excluded_lines": 0}, "missing_lines": [285, 290, 298, 299, 300, 301, 302], "excluded_lines": []}, "CommunitySoundPackService.download_pack": {"executed_lines": [327, 330, 331, 333, 339, 347, 348], "summary": {"covered_lines": 7, "num_statements": 13, "percent_covered": 53.84615384615385, "percent_covered_display": "54", "missing_lines": 6, "excluded_lines": 0}, "missing_lines": [334, 335, 336, 337, 340, 354], "excluded_lines": []}, "CommunitySoundPackService._download_from_url": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 47, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 47, "excluded_lines": 0}, "missing_lines": [363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 375, 376, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 395, 396, 397, 398, 399, 400, 402, 403, 404, 405, 406, 407, 408, 410, 411, 412, 413, 414, 415, 418], "excluded_lines": []}, "CommunitySoundPackService._download_repo_pack": {"executed_lines": [432, 433, 434, 437, 440, 442, 443, 444, 445, 447, 448, 449, 450, 454, 455, 459, 460, 461, 463, 464, 465, 478, 479, 480, 481, 482, 489], "summary": {"covered_lines": 27, "num_statements": 45, "percent_covered": 60.0, "percent_covered_display": "60", "missing_lines": 18, "excluded_lines": 0}, "missing_lines": [435, 446, 456, 462, 466, 467, 468, 469, 470, 471, 472, 475, 476, 483, 484, 485, 486, 487], "excluded_lines": []}, "CommunitySoundPackService._fetch_tree_entries": {"executed_lines": [498, 499, 501, 502, 503, 511, 512], "summary": {"covered_lines": 7, "num_statements": 10, "percent_covered": 70.0, "percent_covered_display": "70", "missing_lines": 3, "excluded_lines": 0}, "missing_lines": [500, 504, 510], "excluded_lines": []}, "": {"executed_lines": [1, 15, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 32, 34, 36, 39, 40, 41, 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 55, 56, 57, 59, 63, 64, 66, 98, 102, 103, 226, 227, 282, 283, 304, 356, 420, 426, 491, 497], "summary": {"covered_lines": 49, "num_statements": 49, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"CommunityPack": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 1, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [60], "excluded_lines": []}, "CommunitySoundPackService": {"executed_lines": [86, 87, 88, 89, 94, 95, 96, 99, 100, 113, 114, 122, 125, 126, 127, 128, 161, 162, 163, 164, 165, 166, 167, 212, 213, 214, 215, 222, 223, 224, 229, 230, 231, 232, 236, 237, 238, 239, 241, 242, 243, 245, 249, 250, 251, 254, 259, 260, 280, 284, 286, 287, 288, 289, 291, 292, 293, 294, 295, 296, 297, 327, 330, 331, 333, 339, 347, 348, 432, 433, 434, 437, 440, 442, 443, 444, 445, 447, 448, 449, 450, 454, 455, 459, 460, 461, 463, 464, 465, 478, 479, 480, 481, 482, 489, 498, 499, 501, 502, 503, 511, 512], "summary": {"covered_lines": 102, "num_statements": 233, "percent_covered": 43.776824034334766, "percent_covered_display": "44", "missing_lines": 131, "excluded_lines": 0}, "missing_lines": [120, 129, 130, 131, 132, 133, 134, 135, 136, 152, 153, 155, 156, 157, 158, 168, 169, 170, 171, 172, 176, 177, 178, 179, 180, 181, 182, 183, 185, 186, 187, 201, 203, 205, 206, 207, 208, 209, 216, 217, 218, 219, 233, 234, 240, 252, 253, 255, 256, 257, 285, 290, 298, 299, 300, 301, 302, 334, 335, 336, 337, 340, 354, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 375, 376, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 395, 396, 397, 398, 399, 400, 402, 403, 404, 405, 406, 407, 408, 410, 411, 412, 413, 414, 415, 418, 435, 446, 456, 462, 466, 467, 468, 469, 470, 471, 472, 475, 476, 483, 484, 485, 486, 487, 500, 504, 510], "excluded_lines": []}, "": {"executed_lines": [1, 15, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 32, 34, 36, 39, 40, 41, 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 54, 55, 56, 57, 59, 63, 64, 66, 98, 102, 103, 226, 227, 282, 283, 304, 356, 420, 426, 491, 497], "summary": {"covered_lines": 49, "num_statements": 49, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "src/accessiweather/services/github_backend_client.py": {"executed_lines": [1, 8, 9, 10, 12, 14, 15, 17, 20, 21, 29, 46, 47, 48, 50, 56, 77, 78, 80, 81, 82, 84, 85, 86, 89, 90, 92, 95, 96, 97, 98, 99, 103, 107, 109, 111, 113, 114, 115, 116, 118, 124, 131, 134, 135, 137, 138, 139, 140, 142, 143, 144, 145, 146, 149, 152, 153, 155, 157, 158, 159, 160, 162, 168], "summary": {"covered_lines": 62, "num_statements": 92, "percent_covered": 67.3913043478261, "percent_covered_display": "67", "missing_lines": 30, "excluded_lines": 0}, "missing_lines": [87, 93, 100, 101, 110, 112, 132, 141, 147, 148, 154, 156, 181, 182, 184, 185, 186, 188, 189, 190, 191, 192, 194, 195, 196, 197, 198, 199, 200, 201], "excluded_lines": [], "functions": {"GitHubBackendClient.__init__": {"executed_lines": [46, 47, 48], "summary": {"covered_lines": 3, "num_statements": 3, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "GitHubBackendClient.upload_zip": {"executed_lines": [77, 78, 80, 81, 82, 84, 85, 86, 89, 90, 92, 95, 96, 97, 98, 99, 103, 107, 109, 111, 113, 114, 115, 116], "summary": {"covered_lines": 24, "num_statements": 30, "percent_covered": 80.0, "percent_covered_display": "80", "missing_lines": 6, "excluded_lines": 0}, "missing_lines": [87, 93, 100, 101, 110, 112], "excluded_lines": []}, "GitHubBackendClient.upload_pack_json_only": {"executed_lines": [131, 134, 135, 137, 138, 139, 140, 142, 143, 144, 145, 146, 149, 152, 153, 155, 157, 158, 159, 160], "summary": {"covered_lines": 20, "num_statements": 26, "percent_covered": 76.92307692307692, "percent_covered_display": "77", "missing_lines": 6, "excluded_lines": 0}, "missing_lines": [132, 141, 147, 148, 154, 156], "excluded_lines": []}, "GitHubBackendClient.health_check": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 18, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 18, "excluded_lines": 0}, "missing_lines": [181, 182, 184, 185, 186, 188, 189, 190, 191, 192, 194, 195, 196, 197, 198, 199, 200, 201], "excluded_lines": []}, "": {"executed_lines": [1, 8, 9, 10, 12, 14, 15, 17, 20, 21, 29, 50, 56, 118, 124, 162, 168], "summary": {"covered_lines": 15, "num_statements": 15, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"GitHubBackendClient": {"executed_lines": [46, 47, 48, 77, 78, 80, 81, 82, 84, 85, 86, 89, 90, 92, 95, 96, 97, 98, 99, 103, 107, 109, 111, 113, 114, 115, 116, 131, 134, 135, 137, 138, 139, 140, 142, 143, 144, 145, 146, 149, 152, 153, 155, 157, 158, 159, 160], "summary": {"covered_lines": 47, "num_statements": 77, "percent_covered": 61.03896103896104, "percent_covered_display": "61", "missing_lines": 30, "excluded_lines": 0}, "missing_lines": [87, 93, 100, 101, 110, 112, 132, 141, 147, 148, 154, 156, 181, 182, 184, 185, 186, 188, 189, 190, 191, 192, 194, 195, 196, 197, 198, 199, 200, 201], "excluded_lines": []}, "": {"executed_lines": [1, 8, 9, 10, 12, 14, 15, 17, 20, 21, 29, 50, 56, 118, 124, 162, 168], "summary": {"covered_lines": 15, "num_statements": 15, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "src/accessiweather/services/github_update_service.py": {"executed_lines": [1, 6, 8], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"": {"executed_lines": [1, 6, 8], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [1, 6, 8], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "src/accessiweather/services/location_service.py": {"executed_lines": [1, 8, 10, 12, 15, 16, 18, 27, 29, 38, 40, 49, 51, 60, 62, 71, 73, 88, 89, 91, 104, 105, 107, 116, 117, 119, 133, 134, 135, 136, 137, 139, 141, 143, 145, 158], "summary": {"covered_lines": 34, "num_statements": 34, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"LocationService.__init__": {"executed_lines": [27], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "LocationService.update_data_source": {"executed_lines": [38], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "LocationService.get_current_location": {"executed_lines": [49], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "LocationService.get_current_location_name": {"executed_lines": [60], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "LocationService.get_all_locations": {"executed_lines": [71], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "LocationService.add_location": {"executed_lines": [88, 89], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "LocationService.remove_location": {"executed_lines": [104, 105], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "LocationService.set_current_location": {"executed_lines": [116, 117], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "LocationService.get_location_coordinates": {"executed_lines": [133, 134, 135, 136, 137], "summary": {"covered_lines": 5, "num_statements": 5, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "LocationService.get_nationwide_location": {"executed_lines": [141, 143], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "LocationService.is_nationwide_location": {"executed_lines": [158], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [1, 8, 10, 12, 15, 16, 18, 29, 40, 51, 62, 73, 91, 107, 119, 139, 145], "summary": {"covered_lines": 15, "num_statements": 15, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"LocationService": {"executed_lines": [27, 38, 49, 60, 71, 88, 89, 104, 105, 116, 117, 133, 134, 135, 136, 137, 141, 143, 158], "summary": {"covered_lines": 19, "num_statements": 19, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [1, 8, 10, 12, 15, 16, 18, 29, 40, 51, 62, 73, 91, 107, 119, 139, 145], "summary": {"covered_lines": 15, "num_statements": 15, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "src/accessiweather/services/update_service/__init__.py": {"executed_lines": [1, 7, 9], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"": {"executed_lines": [1, 7, 9], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [1, 7, 9], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "src/accessiweather/services/update_service/downloads.py": {"executed_lines": [1, 3, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 20, 21, 24, 25, 27, 31, 34, 35, 37, 39, 40, 41, 43, 54, 55, 57, 61, 62, 66, 67, 76, 77, 78, 80, 81, 95, 99, 100, 102, 103, 117, 118, 128, 132, 134, 138, 140, 141, 142, 143, 144, 145, 146, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 166, 168, 169, 171, 176, 178, 179, 182, 183, 184, 185, 186, 188, 189, 190, 191, 192, 193, 194, 195, 196, 201, 202, 205, 206, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 234, 235, 236], "summary": {"covered_lines": 112, "num_statements": 145, "percent_covered": 77.24137931034483, "percent_covered_display": "77", "missing_lines": 33, "excluded_lines": 5}, "missing_lines": [58, 59, 63, 64, 68, 69, 71, 72, 73, 74, 90, 91, 92, 93, 96, 97, 112, 113, 114, 115, 129, 130, 135, 136, 164, 165, 180, 181, 203, 237, 238, 239, 240], "excluded_lines": [24, 25, 26, 27, 28], "functions": {"_looks_like_update_info": {"executed_lines": [21], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "CancelEvent.is_set": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 1}, "missing_lines": [], "excluded_lines": [28]}, "DownloadManager.__init__": {"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}, "missing_lines": [], "excluded_lines": []}, "DownloadManager.download_update": {"executed_lines": [54, 55, 57, 61, 62, 66, 67, 76, 77, 78, 80, 81, 95, 99, 100, 102, 103], "summary": {"covered_lines": 17, "num_statements": 37, "percent_covered": 45.945945945945944, "percent_covered_display": "46", "missing_lines": 20, "excluded_lines": 0}, "missing_lines": [58, 59, 63, 64, 68, 69, 71, 72, 73, 74, 90, 91, 92, 93, 96, 97, 112, 113, 114, 115], "excluded_lines": []}, "DownloadManager._download_asset": {"executed_lines": [128, 132, 134, 138, 140, 141, 142, 143, 144, 145, 146, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 166, 168, 169, 171, 176, 178, 179, 182, 183, 184, 185, 186], "summary": {"covered_lines": 39, "num_statements": 47, "percent_covered": 82.97872340425532, "percent_covered_display": "83", "missing_lines": 8, "excluded_lines": 0}, "missing_lines": [129, 130, 135, 136, 164, 165, 180, 181], "excluded_lines": []}, "DownloadManager._verify_sha256": {"executed_lines": [190, 191, 192, 193, 194, 195, 196, 201, 202], "summary": {"covered_lines": 9, "num_statements": 10, "percent_covered": 90.0, "percent_covered_display": "90", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [203], "excluded_lines": []}, "DownloadManager._verify_checksums_txt": {"executed_lines": [212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 234, 235, 236], "summary": {"covered_lines": 21, "num_statements": 25, "percent_covered": 84.0, "percent_covered_display": "84", "missing_lines": 4, "excluded_lines": 0}, "missing_lines": [237, 238, 239, 240], "excluded_lines": []}, "": {"executed_lines": [1, 3, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 20, 24, 25, 27, 31, 34, 35, 37, 43, 117, 118, 188, 189, 205, 206], "summary": {"covered_lines": 22, "num_statements": 22, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 4}, "missing_lines": [], "excluded_lines": [24, 25, 26, 27]}}, "classes": {"CancelEvent": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 1}, "missing_lines": [], "excluded_lines": [28]}, "DownloadManager": {"executed_lines": [39, 40, 41, 54, 55, 57, 61, 62, 66, 67, 76, 77, 78, 80, 81, 95, 99, 100, 102, 103, 128, 132, 134, 138, 140, 141, 142, 143, 144, 145, 146, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 166, 168, 169, 171, 176, 178, 179, 182, 183, 184, 185, 186, 190, 191, 192, 193, 194, 195, 196, 201, 202, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 234, 235, 236], "summary": {"covered_lines": 89, "num_statements": 122, "percent_covered": 72.95081967213115, "percent_covered_display": "73", "missing_lines": 33, "excluded_lines": 0}, "missing_lines": [58, 59, 63, 64, 68, 69, 71, 72, 73, 74, 90, 91, 92, 93, 96, 97, 112, 113, 114, 115, 129, 130, 135, 136, 164, 165, 180, 181, 203, 237, 238, 239, 240], "excluded_lines": []}, "": {"executed_lines": [1, 3, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 20, 21, 24, 25, 27, 31, 34, 35, 37, 43, 117, 118, 188, 189, 205, 206], "summary": {"covered_lines": 23, "num_statements": 23, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 4}, "missing_lines": [], "excluded_lines": [24, 25, 26, 27]}}}, "src/accessiweather/services/update_service/github_update_service.py": {"executed_lines": [1, 3, 5, 6, 7, 8, 9, 10, 11, 13, 15, 16, 17, 25, 27, 30, 31, 32, 34, 35, 36, 37, 38, 39, 42, 43, 45, 53, 54, 55, 56, 57, 58, 59, 61, 62, 66, 67, 72, 73, 74, 75, 76, 78, 85, 87, 88, 89, 91, 92, 93, 94, 95, 96, 97, 99, 100, 101, 103, 104, 105, 106, 107, 109, 110, 111, 113, 114, 115, 116, 117, 119, 120, 122, 124, 125, 126, 128, 133, 140, 141, 142, 143, 144, 145, 147, 148, 149, 150, 152, 161, 162, 164, 166, 167, 168, 170, 171, 172, 173, 174, 175, 176, 178, 181, 183, 186, 188, 189, 191, 194, 219, 220, 222, 223, 224, 225, 226, 234, 237, 238, 239, 246, 247, 248, 249, 252, 254, 255, 257, 258, 259, 260, 261, 262, 263, 264], "summary": {"covered_lines": 126, "num_statements": 144, "percent_covered": 87.5, "percent_covered_display": "88", "missing_lines": 18, "excluded_lines": 11}, "missing_lines": [63, 64, 134, 135, 136, 137, 138, 169, 192, 204, 205, 214, 215, 216, 217, 235, 250, 251], "excluded_lines": [257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267], "functions": {"GitHubUpdateService.__init__": {"executed_lines": [53, 54, 55, 56, 57, 58, 59, 61, 62, 66, 67, 72, 73, 74, 75, 76, 78, 85], "summary": {"covered_lines": 18, "num_statements": 20, "percent_covered": 90.0, "percent_covered_display": "90", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [63, 64], "excluded_lines": []}, "GitHubUpdateService.http_client": {"executed_lines": [93, 94, 95, 96, 97], "summary": {"covered_lines": 5, "num_statements": 5, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "GitHubUpdateService.owner": {"executed_lines": [105, 106, 107], "summary": {"covered_lines": 3, "num_statements": 3, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "GitHubUpdateService.repo": {"executed_lines": [115, 116, 117], "summary": {"covered_lines": 3, "num_statements": 3, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "GitHubUpdateService._cache": {"executed_lines": [126], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "GitHubUpdateService.check_for_updates": {"executed_lines": [133, 140, 141, 142, 143, 144, 145, 147, 148, 149, 150, 152], "summary": {"covered_lines": 12, "num_statements": 17, "percent_covered": 70.58823529411765, "percent_covered_display": "71", "missing_lines": 5, "excluded_lines": 0}, "missing_lines": [134, 135, 136, 137, 138], "excluded_lines": []}, "GitHubUpdateService.download_update": {"executed_lines": [162], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "GitHubUpdateService._get_releases": {"executed_lines": [166, 167, 168, 170, 171, 172, 173, 174, 175, 176], "summary": {"covered_lines": 10, "num_statements": 11, "percent_covered": 90.9090909090909, "percent_covered_display": "91", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [169], "excluded_lines": []}, "GitHubUpdateService._filter_releases_by_channel": {"executed_lines": [181], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "GitHubUpdateService._find_latest_release": {"executed_lines": [186], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "GitHubUpdateService._find_platform_asset": {"executed_lines": [189], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "GitHubUpdateService._is_newer_version": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 1, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [192], "excluded_lines": []}, "GitHubUpdateService._download_asset": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 6, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 6, "excluded_lines": 0}, "missing_lines": [204, 205, 214, 215, 216, 217], "excluded_lines": []}, "GitHubUpdateService._load_settings": {"executed_lines": [220], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "GitHubUpdateService.save_settings": {"executed_lines": [223, 224, 225, 226], "summary": {"covered_lines": 4, "num_statements": 4, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "GitHubUpdateService.get_settings_dict": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 1, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [235], "excluded_lines": []}, "GitHubUpdateService.get_github_diagnostics": {"executed_lines": [238, 239, 246, 247, 248, 249, 252], "summary": {"covered_lines": 7, "num_statements": 9, "percent_covered": 77.77777777777777, "percent_covered_display": "78", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [250, 251], "excluded_lines": []}, "GitHubUpdateService.cleanup": {"executed_lines": [255], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "GitHubUpdateService.__del__": {"executed_lines": [258, 259, 260, 261, 262, 263, 264], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 10}, "missing_lines": [], "excluded_lines": [258, 259, 260, 261, 262, 263, 264, 265, 266, 267]}, "": {"executed_lines": [1, 3, 5, 6, 7, 8, 9, 10, 11, 13, 15, 16, 17, 25, 27, 30, 31, 32, 34, 35, 36, 37, 38, 39, 42, 43, 45, 87, 88, 91, 92, 99, 100, 103, 104, 109, 110, 113, 114, 119, 120, 124, 125, 128, 161, 164, 178, 183, 188, 191, 194, 219, 222, 234, 237, 254, 257], "summary": {"covered_lines": 53, "num_statements": 53, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 1}, "missing_lines": [], "excluded_lines": [257]}}, "classes": {"UpdateInfo": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "GitHubUpdateService": {"executed_lines": [53, 54, 55, 56, 57, 58, 59, 61, 62, 66, 67, 72, 73, 74, 75, 76, 78, 85, 89, 93, 94, 95, 96, 97, 101, 105, 106, 107, 111, 115, 116, 117, 122, 126, 133, 140, 141, 142, 143, 144, 145, 147, 148, 149, 150, 152, 162, 166, 167, 168, 170, 171, 172, 173, 174, 175, 176, 181, 186, 189, 220, 223, 224, 225, 226, 238, 239, 246, 247, 248, 249, 252, 255, 258, 259, 260, 261, 262, 263, 264], "summary": {"covered_lines": 73, "num_statements": 91, "percent_covered": 80.21978021978022, "percent_covered_display": "80", "missing_lines": 18, "excluded_lines": 10}, "missing_lines": [63, 64, 134, 135, 136, 137, 138, 169, 192, 204, 205, 214, 215, 216, 217, 235, 250, 251], "excluded_lines": [258, 259, 260, 261, 262, 263, 264, 265, 266, 267]}, "": {"executed_lines": [1, 3, 5, 6, 7, 8, 9, 10, 11, 13, 15, 16, 17, 25, 27, 30, 31, 32, 34, 35, 36, 37, 38, 39, 42, 43, 45, 87, 88, 91, 92, 99, 100, 103, 104, 109, 110, 113, 114, 119, 120, 124, 125, 128, 161, 164, 178, 183, 188, 191, 194, 219, 222, 234, 237, 254, 257], "summary": {"covered_lines": 53, "num_statements": 53, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 1}, "missing_lines": [], "excluded_lines": [257]}}}, "src/accessiweather/services/update_service/releases.py": {"executed_lines": [1, 3, 5, 6, 7, 8, 9, 10, 12, 13, 15, 16, 18, 20, 21, 24, 25, 27, 36, 37, 38, 39, 40, 41, 43, 44, 46, 53, 54, 56, 57, 58, 59, 60, 66, 67, 68, 69, 71, 72, 73, 74, 75, 77, 78, 79, 80, 82, 83, 84, 87, 89, 90, 91, 95, 97, 98, 99, 100, 102, 103, 104, 105, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 133, 134, 142, 143, 145, 146, 148, 149, 150, 154, 155, 159, 160, 162, 163, 164, 166, 167, 168, 169, 170, 171, 172, 174, 176, 177, 181, 182, 183, 184, 185, 186, 188, 189, 190, 192, 193, 195, 196, 198, 199, 201, 202, 203, 204, 205, 206, 207, 208, 209, 211, 222, 224, 225, 226, 227, 228, 229, 231, 233, 234, 235, 236, 237, 239, 244, 246], "summary": {"covered_lines": 144, "num_statements": 160, "percent_covered": 90.0, "percent_covered_display": "90", "missing_lines": 16, "excluded_lines": 0}, "missing_lines": [107, 108, 126, 127, 128, 129, 130, 131, 147, 151, 152, 230, 240, 241, 242, 245], "excluded_lines": [], "functions": {"ReleaseManager.__init__": {"executed_lines": [36, 37, 38, 39, 40, 41], "summary": {"covered_lines": 6, "num_statements": 6, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "ReleaseManager.get_releases": {"executed_lines": [46, 53, 54, 56, 57, 58, 59, 60, 66, 67, 68, 69, 71, 72, 73, 74, 75, 77, 78, 79, 80, 82, 83, 84, 87, 89, 90, 91, 95, 97, 98, 99, 100, 102, 103, 104, 105, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 133, 134, 142, 143], "summary": {"covered_lines": 57, "num_statements": 65, "percent_covered": 87.6923076923077, "percent_covered_display": "88", "missing_lines": 8, "excluded_lines": 0}, "missing_lines": [107, 108, 126, 127, 128, 129, 130, 131], "excluded_lines": []}, "ReleaseManager._save_cache": {"executed_lines": [146, 148, 149, 150], "summary": {"covered_lines": 4, "num_statements": 7, "percent_covered": 57.142857142857146, "percent_covered_display": "57", "missing_lines": 3, "excluded_lines": 0}, "missing_lines": [147, 151, 152], "excluded_lines": []}, "ReleaseManager.filter_releases_by_channel": {"executed_lines": [159, 160, 162, 163, 164, 166, 167, 168, 169, 170, 171, 172, 174], "summary": {"covered_lines": 13, "num_statements": 13, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "ReleaseManager.find_latest_release": {"executed_lines": [181, 182, 183, 184, 185, 186], "summary": {"covered_lines": 6, "num_statements": 6, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "ReleaseManager._is_newer_version": {"executed_lines": [190], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "ReleaseManager.find_platform_asset": {"executed_lines": [195, 196, 198, 199, 201, 202, 203, 204, 205, 206, 207, 208, 209, 211, 222, 224, 225, 226, 227, 228, 229, 231, 233, 234, 235, 236, 237, 239, 244, 246], "summary": {"covered_lines": 30, "num_statements": 35, "percent_covered": 85.71428571428571, "percent_covered_display": "86", "missing_lines": 5, "excluded_lines": 0}, "missing_lines": [230, 240, 241, 242, 245], "excluded_lines": []}, "": {"executed_lines": [1, 3, 5, 6, 7, 8, 9, 10, 12, 13, 15, 16, 18, 20, 21, 24, 25, 27, 43, 44, 145, 154, 155, 176, 177, 188, 189, 192, 193], "summary": {"covered_lines": 27, "num_statements": 27, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"ReleaseManager": {"executed_lines": [36, 37, 38, 39, 40, 41, 46, 53, 54, 56, 57, 58, 59, 60, 66, 67, 68, 69, 71, 72, 73, 74, 75, 77, 78, 79, 80, 82, 83, 84, 87, 89, 90, 91, 95, 97, 98, 99, 100, 102, 103, 104, 105, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 133, 134, 142, 143, 146, 148, 149, 150, 159, 160, 162, 163, 164, 166, 167, 168, 169, 170, 171, 172, 174, 181, 182, 183, 184, 185, 186, 190, 195, 196, 198, 199, 201, 202, 203, 204, 205, 206, 207, 208, 209, 211, 222, 224, 225, 226, 227, 228, 229, 231, 233, 234, 235, 236, 237, 239, 244, 246], "summary": {"covered_lines": 117, "num_statements": 133, "percent_covered": 87.96992481203007, "percent_covered_display": "88", "missing_lines": 16, "excluded_lines": 0}, "missing_lines": [107, 108, 126, 127, 128, 129, 130, 131, 147, 151, 152, 230, 240, 241, 242, 245], "excluded_lines": []}, "": {"executed_lines": [1, 3, 5, 6, 7, 8, 9, 10, 12, 13, 15, 16, 18, 20, 21, 24, 25, 27, 43, 44, 145, 154, 155, 176, 177, 188, 189, 192, 193], "summary": {"covered_lines": 27, "num_statements": 27, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "src/accessiweather/services/update_service/settings.py": {"executed_lines": [1, 3, 5, 6, 7, 8, 10, 12, 13, 14, 17, 18, 19, 21, 22, 23, 26, 27, 29, 31, 33, 35, 36, 37, 38, 40, 48, 56, 57, 58, 59, 61, 69, 71, 73, 74, 75, 79, 80], "summary": {"covered_lines": 36, "num_statements": 49, "percent_covered": 73.46938775510205, "percent_covered_display": "73", "missing_lines": 13, "excluded_lines": 0}, "missing_lines": [44, 45, 46, 62, 63, 64, 65, 66, 67, 68, 76, 77, 82], "excluded_lines": [], "functions": {"SettingsManager.__init__": {"executed_lines": [31], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "SettingsManager.load_settings": {"executed_lines": [35, 36, 37, 38, 40, 48, 56, 57, 58, 59, 61, 69], "summary": {"covered_lines": 12, "num_statements": 22, "percent_covered": 54.54545454545455, "percent_covered_display": "55", "missing_lines": 10, "excluded_lines": 0}, "missing_lines": [44, 45, 46, 62, 63, 64, 65, 66, 67, 68], "excluded_lines": []}, "SettingsManager.save_settings": {"executed_lines": [73, 74, 75], "summary": {"covered_lines": 3, "num_statements": 5, "percent_covered": 60.0, "percent_covered_display": "60", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [76, 77], "excluded_lines": []}, "SettingsManager.get_settings_dict": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 1, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [82], "excluded_lines": []}, "": {"executed_lines": [1, 3, 5, 6, 7, 8, 10, 12, 13, 14, 17, 18, 19, 21, 22, 23, 26, 27, 29, 33, 71, 79, 80], "summary": {"covered_lines": 20, "num_statements": 20, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"UpdateSettings": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "SettingsManager": {"executed_lines": [31, 35, 36, 37, 38, 40, 48, 56, 57, 58, 59, 61, 69, 73, 74, 75], "summary": {"covered_lines": 16, "num_statements": 29, "percent_covered": 55.172413793103445, "percent_covered_display": "55", "missing_lines": 13, "excluded_lines": 0}, "missing_lines": [44, 45, 46, 62, 63, 64, 65, 66, 67, 68, 76, 77, 82], "excluded_lines": []}, "": {"executed_lines": [1, 3, 5, 6, 7, 8, 10, 12, 13, 14, 17, 18, 19, 21, 22, 23, 26, 27, 29, 33, 71, 79, 80], "summary": {"covered_lines": 20, "num_statements": 20, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "src/accessiweather/services/weather_service/__init__.py": {"executed_lines": [1, 8, 10], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"": {"executed_lines": [1, 8, 10], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [1, 8, 10], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "src/accessiweather/utils/__init__.py": {"executed_lines": [1, 8, 14, 15, 23, 32], "summary": {"covered_lines": 5, "num_statements": 5, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"": {"executed_lines": [1, 8, 14, 15, 23, 32], "summary": {"covered_lines": 5, "num_statements": 5, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [1, 8, 14, 15, 23, 32], "summary": {"covered_lines": 5, "num_statements": 5, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "src/accessiweather/utils/retry_utils.py": {"executed_lines": [1, 3, 5, 6, 7, 8, 9, 10, 12, 15, 17, 18, 20, 26, 34, 36, 38, 41, 42, 43, 45, 46, 47, 48, 55, 56, 57, 59, 62, 73, 74, 78, 79, 81, 83, 84, 85, 86, 88, 91, 92, 95, 96, 98, 99, 100, 102, 103, 106, 109, 120, 122, 125, 127, 129, 130, 131, 132, 134, 135, 136, 137, 142, 143, 149, 150, 151, 154, 156, 157, 163, 165, 172, 181, 186, 188], "summary": {"covered_lines": 74, "num_statements": 88, "percent_covered": 84.0909090909091, "percent_covered_display": "84", "missing_lines": 14, "excluded_lines": 4}, "missing_lines": [35, 37, 39, 49, 50, 51, 53, 93, 104, 121, 123, 152, 183, 184], "excluded_lines": [12, 13, 75, 76], "functions": {"calculate_backoff_delay": {"executed_lines": [34, 36, 38, 41, 42, 43, 45, 46, 47, 48, 55, 56, 57, 59], "summary": {"covered_lines": 14, "num_statements": 21, "percent_covered": 66.66666666666667, "percent_covered_display": "67", "missing_lines": 7, "excluded_lines": 0}, "missing_lines": [35, 37, 39, 49, 50, 51, 53], "excluded_lines": []}, "is_retryable_http_error": {"executed_lines": [73, 74, 78, 79, 81, 83, 84, 85, 86, 88], "summary": {"covered_lines": 10, "num_statements": 10, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 2}, "missing_lines": [], "excluded_lines": [75, 76]}, "_should_retry": {"executed_lines": [92, 95, 96, 98, 99, 100, 102, 103, 106], "summary": {"covered_lines": 9, "num_statements": 11, "percent_covered": 81.81818181818181, "percent_covered_display": "82", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [93, 104], "excluded_lines": []}, "async_retry_with_backoff": {"executed_lines": [120, 122, 125, 127, 129, 130, 188], "summary": {"covered_lines": 7, "num_statements": 9, "percent_covered": 77.77777777777777, "percent_covered_display": "78", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [121, 123], "excluded_lines": []}, "async_retry_with_backoff.decorator": {"executed_lines": [131, 186], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "async_retry_with_backoff.decorator.wrapper": {"executed_lines": [132, 134, 135, 136, 137, 142, 143, 149, 150, 151, 154, 156, 157, 163, 165, 172, 181], "summary": {"covered_lines": 17, "num_statements": 20, "percent_covered": 85.0, "percent_covered_display": "85", "missing_lines": 3, "excluded_lines": 0}, "missing_lines": [152, 183, 184], "excluded_lines": []}, "": {"executed_lines": [1, 3, 5, 6, 7, 8, 9, 10, 12, 15, 17, 18, 20, 26, 62, 91, 109], "summary": {"covered_lines": 15, "num_statements": 15, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 2}, "missing_lines": [], "excluded_lines": [12, 13]}}, "classes": {"": {"executed_lines": [1, 3, 5, 6, 7, 8, 9, 10, 12, 15, 17, 18, 20, 26, 34, 36, 38, 41, 42, 43, 45, 46, 47, 48, 55, 56, 57, 59, 62, 73, 74, 78, 79, 81, 83, 84, 85, 86, 88, 91, 92, 95, 96, 98, 99, 100, 102, 103, 106, 109, 120, 122, 125, 127, 129, 130, 131, 132, 134, 135, 136, 137, 142, 143, 149, 150, 151, 154, 156, 157, 163, 165, 172, 181, 186, 188], "summary": {"covered_lines": 74, "num_statements": 88, "percent_covered": 84.0909090909091, "percent_covered_display": "84", "missing_lines": 14, "excluded_lines": 4}, "missing_lines": [35, 37, 39, 49, 50, 51, 53, 93, 104, 121, 123, 152, 183, 184], "excluded_lines": [12, 13, 75, 76]}}}, "src/accessiweather/utils/taf_decoder.py": {"executed_lines": [1, 3, 5, 6, 7, 8, 10, 12, 13, 14, 15, 16, 17, 18, 21, 23, 35, 62, 65, 67, 70, 71, 74, 75, 78, 79, 85, 86, 87, 88, 89, 91, 92, 95, 99, 100, 102, 104, 105, 106, 110, 111, 112, 113, 115, 116, 117, 118, 119, 120, 124, 127, 130, 136, 137, 138, 140, 141, 142, 143, 145, 149, 150, 156, 157, 167, 168, 178, 179, 211, 212, 214, 215, 218, 221, 222, 223, 224, 255, 256, 257, 260, 261, 262, 263, 264, 266, 267, 268, 269, 271, 281, 282, 283, 284, 285, 287, 288, 289, 290, 291, 293, 294, 299, 300, 301, 302, 303, 321, 322, 323, 324, 325, 326, 328, 329, 330, 333, 336, 337, 338, 339, 341, 342, 343, 344, 346, 352, 353, 355, 358, 360, 364, 367, 368, 369, 372, 373, 374, 375, 376, 377, 379, 380, 381, 385, 390, 391, 393, 400, 408, 409, 410, 414, 415, 416, 420, 421, 422, 426, 428, 435, 438, 439, 442, 443, 444, 445, 447, 451, 455, 456, 458, 459, 460, 464, 468, 470, 471, 486, 487, 490, 492, 495, 496, 499, 500, 501, 503, 511, 515, 516, 517, 518, 520, 521, 523, 526, 529, 530, 531, 532, 533, 536, 537, 539, 540, 541, 542, 543, 544, 550, 559, 560, 561, 564], "summary": {"covered_lines": 215, "num_statements": 394, "percent_covered": 54.568527918781726, "percent_covered_display": "55", "missing_lines": 179, "excluded_lines": 0}, "missing_lines": [68, 72, 76, 80, 81, 82, 93, 96, 97, 108, 122, 125, 131, 132, 133, 146, 147, 151, 152, 153, 154, 158, 159, 160, 161, 162, 163, 164, 165, 169, 170, 171, 172, 173, 174, 175, 176, 180, 181, 182, 183, 184, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 200, 207, 208, 209, 216, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 247, 248, 249, 250, 251, 252, 258, 272, 273, 274, 275, 276, 277, 278, 279, 295, 296, 297, 305, 306, 307, 309, 310, 311, 313, 314, 315, 316, 318, 319, 327, 331, 354, 356, 361, 362, 370, 382, 383, 384, 386, 387, 388, 394, 395, 396, 397, 398, 399, 401, 402, 403, 404, 405, 406, 411, 412, 417, 418, 424, 429, 430, 431, 432, 433, 440, 448, 449, 452, 453, 461, 462, 463, 465, 466, 467, 473, 474, 476, 477, 478, 480, 481, 483, 488, 491, 493, 497, 512, 513, 522, 524, 538, 551, 552, 553, 554, 555, 556], "excluded_lines": [], "functions": {"decode_taf_text": {"executed_lines": [67, 70, 71, 74, 75, 78, 79], "summary": {"covered_lines": 7, "num_statements": 13, "percent_covered": 53.84615384615385, "percent_covered_display": "54", "missing_lines": 6, "excluded_lines": 0}, "missing_lines": [68, 72, 76, 80, 81, 82], "excluded_lines": []}, "_decode_tokens": {"executed_lines": [86, 87, 88, 89, 91, 92, 95, 99, 100, 102, 104, 105, 106, 110, 111, 112, 113, 115, 116, 117, 118, 119, 120, 124, 127], "summary": {"covered_lines": 25, "num_statements": 31, "percent_covered": 80.64516129032258, "percent_covered_display": "81", "missing_lines": 6, "excluded_lines": 0}, "missing_lines": [93, 96, 97, 108, 122, 125], "excluded_lines": []}, "_format_header_only": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 3, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 3, "excluded_lines": 0}, "missing_lines": [131, 132, 133], "excluded_lines": []}, "_split_segments": {"executed_lines": [137, 138, 140, 141, 142, 143, 145, 149, 150, 156, 157, 167, 168, 178, 179, 211, 212, 214, 215, 218], "summary": {"covered_lines": 20, "num_statements": 65, "percent_covered": 30.76923076923077, "percent_covered_display": "31", "missing_lines": 45, "excluded_lines": 0}, "missing_lines": [146, 147, 151, 152, 153, 154, 158, 159, 160, 161, 162, 163, 164, 165, 169, 170, 171, 172, 173, 174, 175, 176, 180, 181, 182, 183, 184, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 200, 207, 208, 209, 216], "excluded_lines": []}, "_segment_intro": {"executed_lines": [222, 223, 224], "summary": {"covered_lines": 3, "num_statements": 29, "percent_covered": 10.344827586206897, "percent_covered_display": "10", "missing_lines": 26, "excluded_lines": 0}, "missing_lines": [225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 247, 248, 249, 250, 251, 252], "excluded_lines": []}, "_describe_segment": {"executed_lines": [256, 257, 260, 261, 262, 263, 264, 266, 267, 268, 269, 271, 281, 282, 283, 284, 285, 287, 288, 289, 290, 291, 293, 294, 299, 300, 301, 302, 303, 321, 322, 323, 324, 325, 326, 328, 329, 330, 333], "summary": {"covered_lines": 39, "num_statements": 65, "percent_covered": 60.0, "percent_covered_display": "60", "missing_lines": 26, "excluded_lines": 0}, "missing_lines": [258, 272, 273, 274, 275, 276, 277, 278, 279, 295, 296, 297, 305, 306, 307, 309, 310, 311, 313, 314, 315, 316, 318, 319, 327, 331], "excluded_lines": []}, "_decode_wind": {"executed_lines": [337, 338, 339, 341, 342, 343, 344, 346, 352, 353, 355, 358, 360, 364], "summary": {"covered_lines": 14, "num_statements": 18, "percent_covered": 77.77777777777777, "percent_covered_display": "78", "missing_lines": 4, "excluded_lines": 0}, "missing_lines": [354, 356, 361, 362], "excluded_lines": []}, "_decode_visibility": {"executed_lines": [368, 369, 372, 373, 374, 375, 376, 377, 379, 380, 381, 385, 390, 391, 393, 400, 408, 409, 410, 414, 415, 416, 420, 421, 422, 426, 428, 435], "summary": {"covered_lines": 28, "num_statements": 57, "percent_covered": 49.12280701754386, "percent_covered_display": "49", "missing_lines": 29, "excluded_lines": 0}, "missing_lines": [370, 382, 383, 384, 386, 387, 388, 394, 395, 396, 397, 398, 399, 401, 402, 403, 404, 405, 406, 411, 412, 417, 418, 424, 429, 430, 431, 432, 433], "excluded_lines": []}, "_decode_weather": {"executed_lines": [439, 442, 443, 444, 445, 447, 451, 455, 456, 458, 459, 460, 464, 468, 470, 471], "summary": {"covered_lines": 16, "num_statements": 35, "percent_covered": 45.714285714285715, "percent_covered_display": "46", "missing_lines": 19, "excluded_lines": 0}, "missing_lines": [440, 448, 449, 452, 453, 461, 462, 463, 465, 466, 467, 473, 474, 476, 477, 478, 480, 481, 483], "excluded_lines": []}, "_decode_cloud": {"executed_lines": [487, 490, 492, 495, 496, 499, 500, 501, 503, 511, 515, 516, 517, 518, 520, 521, 523, 526], "summary": {"covered_lines": 18, "num_statements": 26, "percent_covered": 69.23076923076923, "percent_covered_display": "69", "missing_lines": 8, "excluded_lines": 0}, "missing_lines": [488, 491, 493, 497, 512, 513, 522, 524], "excluded_lines": []}, "_format_issue_time": {"executed_lines": [530, 531, 532, 533], "summary": {"covered_lines": 4, "num_statements": 4, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "_format_time_range": {"executed_lines": [537, 539, 540, 541, 542, 543, 544], "summary": {"covered_lines": 7, "num_statements": 8, "percent_covered": 87.5, "percent_covered_display": "88", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [538], "excluded_lines": []}, "_format_from_time": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 6, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 6, "excluded_lines": 0}, "missing_lines": [551, 552, 553, 554, 555, 556], "excluded_lines": []}, "_format_day": {"executed_lines": [560, 561], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [1, 3, 5, 6, 7, 8, 10, 12, 13, 14, 15, 16, 17, 18, 21, 23, 35, 62, 65, 85, 130, 136, 221, 255, 336, 367, 438, 486, 529, 536, 550, 559, 564], "summary": {"covered_lines": 32, "num_statements": 32, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [1, 3, 5, 6, 7, 8, 10, 12, 13, 14, 15, 16, 17, 18, 21, 23, 35, 62, 65, 67, 70, 71, 74, 75, 78, 79, 85, 86, 87, 88, 89, 91, 92, 95, 99, 100, 102, 104, 105, 106, 110, 111, 112, 113, 115, 116, 117, 118, 119, 120, 124, 127, 130, 136, 137, 138, 140, 141, 142, 143, 145, 149, 150, 156, 157, 167, 168, 178, 179, 211, 212, 214, 215, 218, 221, 222, 223, 224, 255, 256, 257, 260, 261, 262, 263, 264, 266, 267, 268, 269, 271, 281, 282, 283, 284, 285, 287, 288, 289, 290, 291, 293, 294, 299, 300, 301, 302, 303, 321, 322, 323, 324, 325, 326, 328, 329, 330, 333, 336, 337, 338, 339, 341, 342, 343, 344, 346, 352, 353, 355, 358, 360, 364, 367, 368, 369, 372, 373, 374, 375, 376, 377, 379, 380, 381, 385, 390, 391, 393, 400, 408, 409, 410, 414, 415, 416, 420, 421, 422, 426, 428, 435, 438, 439, 442, 443, 444, 445, 447, 451, 455, 456, 458, 459, 460, 464, 468, 470, 471, 486, 487, 490, 492, 495, 496, 499, 500, 501, 503, 511, 515, 516, 517, 518, 520, 521, 523, 526, 529, 530, 531, 532, 533, 536, 537, 539, 540, 541, 542, 543, 544, 550, 559, 560, 561, 564], "summary": {"covered_lines": 215, "num_statements": 394, "percent_covered": 54.568527918781726, "percent_covered_display": "55", "missing_lines": 179, "excluded_lines": 0}, "missing_lines": [68, 72, 76, 80, 81, 82, 93, 96, 97, 108, 122, 125, 131, 132, 133, 146, 147, 151, 152, 153, 154, 158, 159, 160, 161, 162, 163, 164, 165, 169, 170, 171, 172, 173, 174, 175, 176, 180, 181, 182, 183, 184, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 200, 207, 208, 209, 216, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 247, 248, 249, 250, 251, 252, 258, 272, 273, 274, 275, 276, 277, 278, 279, 295, 296, 297, 305, 306, 307, 309, 310, 311, 313, 314, 315, 316, 318, 319, 327, 331, 354, 356, 361, 362, 370, 382, 383, 384, 386, 387, 388, 394, 395, 396, 397, 398, 399, 401, 402, 403, 404, 405, 406, 411, 412, 417, 418, 424, 429, 430, 431, 432, 433, 440, 448, 449, 452, 453, 461, 462, 463, 465, 466, 467, 473, 474, 476, 477, 478, 480, 481, 483, 488, 491, 493, 497, 512, 513, 522, 524, 538, 551, 552, 553, 554, 555, 556], "excluded_lines": []}}}, "src/accessiweather/utils/temperature_utils.py": {"executed_lines": [1, 8, 9, 10, 12, 15, 16, 18, 19, 20, 22, 23, 27, 28, 31, 44, 47, 60, 63, 65, 66, 82, 102, 103, 105, 106, 107, 112, 114, 117, 118, 121, 127, 128, 130, 131, 135, 137, 138, 140, 143, 166, 167, 170, 171, 172, 173, 176, 177, 180, 184, 185, 188, 189, 190, 191, 193, 196, 212, 213, 216, 217, 218, 219, 221], "summary": {"covered_lines": 63, "num_statements": 75, "percent_covered": 84.0, "percent_covered_display": "84", "missing_lines": 12, "excluded_lines": 0}, "missing_lines": [72, 73, 74, 75, 76, 77, 79, 108, 109, 110, 132, 133], "excluded_lines": [], "functions": {"TemperatureUnit.__str__": {"executed_lines": [23], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "celsius_to_fahrenheit": {"executed_lines": [44], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "fahrenheit_to_celsius": {"executed_lines": [60], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "_normalize_dewpoint_unit": {"executed_lines": [65, 66], "summary": {"covered_lines": 2, "num_statements": 9, "percent_covered": 22.22222222222222, "percent_covered_display": "22", "missing_lines": 7, "excluded_lines": 0}, "missing_lines": [72, 73, 74, 75, 76, 77, 79], "excluded_lines": []}, "calculate_dewpoint": {"executed_lines": [102, 103, 105, 106, 107, 112, 114, 117, 118, 121, 127, 128, 130, 131, 135, 137, 138, 140], "summary": {"covered_lines": 18, "num_statements": 23, "percent_covered": 78.26086956521739, "percent_covered_display": "78", "missing_lines": 5, "excluded_lines": 0}, "missing_lines": [108, 109, 110, 132, 133], "excluded_lines": []}, "format_temperature": {"executed_lines": [166, 167, 170, 171, 172, 173, 176, 177, 180, 184, 185, 188, 189, 190, 191, 193], "summary": {"covered_lines": 16, "num_statements": 16, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "get_temperature_values": {"executed_lines": [212, 213, 216, 217, 218, 219, 221], "summary": {"covered_lines": 7, "num_statements": 7, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [1, 8, 9, 10, 12, 15, 16, 18, 19, 20, 22, 27, 28, 31, 47, 63, 82, 143, 196], "summary": {"covered_lines": 17, "num_statements": 17, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"TemperatureUnit": {"executed_lines": [23], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [1, 8, 9, 10, 12, 15, 16, 18, 19, 20, 22, 27, 28, 31, 44, 47, 60, 63, 65, 66, 82, 102, 103, 105, 106, 107, 112, 114, 117, 118, 121, 127, 128, 130, 131, 135, 137, 138, 140, 143, 166, 167, 170, 171, 172, 173, 176, 177, 180, 184, 185, 188, 189, 190, 191, 193, 196, 212, 213, 216, 217, 218, 219, 221], "summary": {"covered_lines": 62, "num_statements": 74, "percent_covered": 83.78378378378379, "percent_covered_display": "84", "missing_lines": 12, "excluded_lines": 0}, "missing_lines": [72, 73, 74, 75, 76, 77, 79, 108, 109, 110, 132, 133], "excluded_lines": []}}}, "src/accessiweather/utils/unit_utils.py": {"executed_lines": [1, 8, 10, 12, 15, 36, 37, 40, 41, 42, 43, 46, 47, 48, 49, 51, 54, 75, 76, 79, 80, 81, 82, 85, 86, 87, 88, 90, 93, 114, 115, 118, 119, 120, 121, 124, 125, 126, 127, 129, 132, 153, 154, 157, 158, 159, 160, 163, 164, 165, 166, 168, 171, 184, 185, 187, 205, 206, 209, 226, 227, 229, 230, 232, 233, 236, 239, 240, 242, 244, 245], "summary": {"covered_lines": 70, "num_statements": 73, "percent_covered": 95.89041095890411, "percent_covered_display": "96", "missing_lines": 3, "excluded_lines": 0}, "missing_lines": [246, 248, 249], "excluded_lines": [], "functions": {"format_wind_speed": {"executed_lines": [36, 37, 40, 41, 42, 43, 46, 47, 48, 49, 51], "summary": {"covered_lines": 11, "num_statements": 11, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "format_pressure": {"executed_lines": [75, 76, 79, 80, 81, 82, 85, 86, 87, 88, 90], "summary": {"covered_lines": 11, "num_statements": 11, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "format_visibility": {"executed_lines": [114, 115, 118, 119, 120, 121, 124, 125, 126, 127, 129], "summary": {"covered_lines": 11, "num_statements": 11, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "format_precipitation": {"executed_lines": [153, 154, 157, 158, 159, 160, 163, 164, 165, 166, 168], "summary": {"covered_lines": 11, "num_statements": 11, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "convert_wind_direction_to_cardinal": {"executed_lines": [184, 185, 187, 205, 206], "summary": {"covered_lines": 5, "num_statements": 5, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "format_combined_wind": {"executed_lines": [226, 227, 229, 230, 232, 233, 236, 239, 240, 242, 244, 245], "summary": {"covered_lines": 12, "num_statements": 15, "percent_covered": 80.0, "percent_covered_display": "80", "missing_lines": 3, "excluded_lines": 0}, "missing_lines": [246, 248, 249], "excluded_lines": []}, "": {"executed_lines": [1, 8, 10, 12, 15, 54, 93, 132, 171, 209], "summary": {"covered_lines": 9, "num_statements": 9, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [1, 8, 10, 12, 15, 36, 37, 40, 41, 42, 43, 46, 47, 48, 49, 51, 54, 75, 76, 79, 80, 81, 82, 85, 86, 87, 88, 90, 93, 114, 115, 118, 119, 120, 121, 124, 125, 126, 127, 129, 132, 153, 154, 157, 158, 159, 160, 163, 164, 165, 166, 168, 171, 184, 185, 187, 205, 206, 209, 226, 227, 229, 230, 232, 233, 236, 239, 240, 242, 244, 245], "summary": {"covered_lines": 70, "num_statements": 73, "percent_covered": 95.89041095890411, "percent_covered_display": "96", "missing_lines": 3, "excluded_lines": 0}, "missing_lines": [246, 248, 249], "excluded_lines": []}}}, "src/accessiweather/visual_crossing_client.py": {"executed_lines": [1, 8, 9, 11, 13, 23, 24, 25, 27, 30, 31, 33, 35, 36, 37, 40, 41, 43, 45, 46, 47, 50, 52, 53, 55, 57, 58, 65, 66, 67, 69, 71, 73, 78, 79, 81, 84, 85, 86, 91, 92, 129, 130, 167, 168, 205, 207, 209, 210, 212, 213, 215, 216, 217, 222, 223, 225, 227, 228, 230, 231, 233, 234, 236, 237, 238, 239, 240, 249, 250, 251, 252, 253, 254, 255, 256, 258, 259, 260, 261, 264, 270, 271, 272, 273, 276, 282, 283, 284, 285, 288, 294, 295, 296, 297, 300, 306, 308, 332, 334, 335, 337, 339, 340, 341, 342, 343, 351, 363, 365, 367, 369, 370, 373, 374, 375, 377, 378, 379, 380, 382, 383, 384, 391, 402, 404, 406, 408, 412, 415, 416, 419, 420, 421, 425, 428, 430, 431, 434, 435, 440, 443, 446, 449, 450, 453, 454, 459, 462, 477, 478, 480, 481, 483, 485, 488, 491, 507, 509, 511, 514, 516, 518, 524, 526, 528, 530, 533, 551, 552], "summary": {"covered_lines": 167, "num_statements": 299, "percent_covered": 55.852842809364546, "percent_covered_display": "56", "missing_lines": 132, "excluded_lines": 0}, "missing_lines": [70, 72, 74, 82, 83, 87, 88, 89, 94, 95, 96, 103, 104, 105, 107, 108, 109, 110, 111, 112, 116, 117, 119, 120, 121, 122, 123, 124, 125, 126, 127, 132, 133, 134, 141, 142, 143, 145, 146, 147, 148, 149, 150, 154, 155, 157, 158, 159, 160, 161, 162, 163, 164, 165, 170, 171, 172, 178, 179, 180, 182, 183, 184, 185, 186, 187, 191, 192, 194, 195, 196, 197, 198, 199, 200, 201, 203, 218, 219, 220, 241, 242, 243, 244, 245, 246, 247, 262, 263, 265, 266, 267, 268, 274, 275, 277, 278, 279, 280, 286, 287, 289, 290, 291, 292, 298, 299, 301, 302, 303, 304, 345, 346, 347, 348, 349, 385, 386, 389, 422, 426, 455, 456, 457, 458, 460, 486, 512, 519, 520, 521, 531], "excluded_lines": [], "functions": {"VisualCrossingApiError.__init__": {"executed_lines": [35, 36, 37], "summary": {"covered_lines": 3, "num_statements": 3, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "VisualCrossingClient.__init__": {"executed_lines": [45, 46, 47, 50], "summary": {"covered_lines": 4, "num_statements": 4, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "VisualCrossingClient.get_current_conditions": {"executed_lines": [55, 57, 58, 65, 66, 67, 69, 71, 73, 78, 79, 81, 84, 85, 86], "summary": {"covered_lines": 15, "num_statements": 23, "percent_covered": 65.21739130434783, "percent_covered_display": "65", "missing_lines": 8, "excluded_lines": 0}, "missing_lines": [70, 72, 74, 82, 83, 87, 88, 89], "excluded_lines": []}, "VisualCrossingClient.get_forecast": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 23, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 23, "excluded_lines": 0}, "missing_lines": [94, 95, 96, 103, 104, 105, 107, 108, 109, 110, 111, 112, 116, 117, 119, 120, 121, 122, 123, 124, 125, 126, 127], "excluded_lines": []}, "VisualCrossingClient.get_hourly_forecast": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 23, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 23, "excluded_lines": 0}, "missing_lines": [132, 133, 134, 141, 142, 143, 145, 146, 147, 148, 149, 150, 154, 155, 157, 158, 159, 160, 161, 162, 163, 164, 165], "excluded_lines": []}, "VisualCrossingClient.get_alerts": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 23, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 23, "excluded_lines": 0}, "missing_lines": [170, 171, 172, 178, 179, 180, 182, 183, 184, 185, 186, 187, 191, 192, 194, 195, 196, 197, 198, 199, 200, 201, 203], "excluded_lines": []}, "VisualCrossingClient._parse_current_conditions": {"executed_lines": [207, 209, 210, 212, 213, 215, 216, 217, 222, 223, 225, 227, 228, 230, 231, 233, 234, 236, 237, 238, 239, 240, 249, 250, 251, 252, 253, 254, 255, 256, 258, 259, 260, 261, 264, 270, 271, 272, 273, 276, 282, 283, 284, 285, 288, 294, 295, 296, 297, 300, 306, 308], "summary": {"covered_lines": 52, "num_statements": 86, "percent_covered": 60.46511627906977, "percent_covered_display": "60", "missing_lines": 34, "excluded_lines": 0}, "missing_lines": [218, 219, 220, 241, 242, 243, 244, 245, 246, 247, 262, 263, 265, 266, 267, 268, 274, 275, 277, 278, 279, 280, 286, 287, 289, 290, 291, 292, 298, 299, 301, 302, 303, 304], "excluded_lines": []}, "VisualCrossingClient._parse_forecast": {"executed_lines": [334, 335, 337, 339, 340, 341, 342, 343, 351, 363, 365], "summary": {"covered_lines": 11, "num_statements": 16, "percent_covered": 68.75, "percent_covered_display": "69", "missing_lines": 5, "excluded_lines": 0}, "missing_lines": [345, 346, 347, 348, 349], "excluded_lines": []}, "VisualCrossingClient._parse_hourly_forecast": {"executed_lines": [369, 370, 373, 374, 375, 377, 378, 379, 380, 382, 383, 384, 391, 402, 404], "summary": {"covered_lines": 15, "num_statements": 18, "percent_covered": 83.33333333333333, "percent_covered_display": "83", "missing_lines": 3, "excluded_lines": 0}, "missing_lines": [385, 386, 389], "excluded_lines": []}, "VisualCrossingClient._parse_alerts": {"executed_lines": [408, 412, 415, 416, 419, 420, 421, 425, 428, 430, 431, 434, 435, 440, 443, 446, 449, 450, 453, 454, 459, 462, 477, 478, 480, 481], "summary": {"covered_lines": 26, "num_statements": 33, "percent_covered": 78.78787878787878, "percent_covered_display": "79", "missing_lines": 7, "excluded_lines": 0}, "missing_lines": [422, 426, 455, 456, 457, 458, 460], "excluded_lines": []}, "VisualCrossingClient._map_visual_crossing_severity": {"executed_lines": [485, 488, 491, 507], "summary": {"covered_lines": 4, "num_statements": 5, "percent_covered": 80.0, "percent_covered_display": "80", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [486], "excluded_lines": []}, "VisualCrossingClient._parse_alert_time": {"executed_lines": [511, 514, 516, 518], "summary": {"covered_lines": 4, "num_statements": 8, "percent_covered": 50.0, "percent_covered_display": "50", "missing_lines": 4, "excluded_lines": 0}, "missing_lines": [512, 519, 520, 521], "excluded_lines": []}, "VisualCrossingClient._convert_f_to_c": {"executed_lines": [526], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "VisualCrossingClient._degrees_to_cardinal": {"executed_lines": [530, 533, 551, 552], "summary": {"covered_lines": 4, "num_statements": 5, "percent_covered": 80.0, "percent_covered_display": "80", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [531], "excluded_lines": []}, "": {"executed_lines": [1, 8, 9, 11, 13, 23, 24, 25, 27, 30, 31, 33, 40, 41, 43, 52, 53, 91, 92, 129, 130, 167, 168, 205, 332, 367, 406, 483, 509, 524, 528], "summary": {"covered_lines": 28, "num_statements": 28, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"VisualCrossingApiError": {"executed_lines": [35, 36, 37], "summary": {"covered_lines": 3, "num_statements": 3, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "VisualCrossingClient": {"executed_lines": [45, 46, 47, 50, 55, 57, 58, 65, 66, 67, 69, 71, 73, 78, 79, 81, 84, 85, 86, 207, 209, 210, 212, 213, 215, 216, 217, 222, 223, 225, 227, 228, 230, 231, 233, 234, 236, 237, 238, 239, 240, 249, 250, 251, 252, 253, 254, 255, 256, 258, 259, 260, 261, 264, 270, 271, 272, 273, 276, 282, 283, 284, 285, 288, 294, 295, 296, 297, 300, 306, 308, 334, 335, 337, 339, 340, 341, 342, 343, 351, 363, 365, 369, 370, 373, 374, 375, 377, 378, 379, 380, 382, 383, 384, 391, 402, 404, 408, 412, 415, 416, 419, 420, 421, 425, 428, 430, 431, 434, 435, 440, 443, 446, 449, 450, 453, 454, 459, 462, 477, 478, 480, 481, 485, 488, 491, 507, 511, 514, 516, 518, 526, 530, 533, 551, 552], "summary": {"covered_lines": 136, "num_statements": 268, "percent_covered": 50.74626865671642, "percent_covered_display": "51", "missing_lines": 132, "excluded_lines": 0}, "missing_lines": [70, 72, 74, 82, 83, 87, 88, 89, 94, 95, 96, 103, 104, 105, 107, 108, 109, 110, 111, 112, 116, 117, 119, 120, 121, 122, 123, 124, 125, 126, 127, 132, 133, 134, 141, 142, 143, 145, 146, 147, 148, 149, 150, 154, 155, 157, 158, 159, 160, 161, 162, 163, 164, 165, 170, 171, 172, 178, 179, 180, 182, 183, 184, 185, 186, 187, 191, 192, 194, 195, 196, 197, 198, 199, 200, 201, 203, 218, 219, 220, 241, 242, 243, 244, 245, 246, 247, 262, 263, 265, 266, 267, 268, 274, 275, 277, 278, 279, 280, 286, 287, 289, 290, 291, 292, 298, 299, 301, 302, 303, 304, 345, 346, 347, 348, 349, 385, 386, 389, 422, 426, 455, 456, 457, 458, 460, 486, 512, 519, 520, 521, 531], "excluded_lines": []}, "": {"executed_lines": [1, 8, 9, 11, 13, 23, 24, 25, 27, 30, 31, 33, 40, 41, 43, 52, 53, 91, 92, 129, 130, 167, 168, 205, 332, 367, 406, 483, 509, 524, 528], "summary": {"covered_lines": 28, "num_statements": 28, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "src/accessiweather/weather_client.py": {"executed_lines": [1, 3, 5, 12, 14], "summary": {"covered_lines": 4, "num_statements": 4, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"": {"executed_lines": [1, 3, 5, 12, 14], "summary": {"covered_lines": 4, "num_statements": 4, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [1, 3, 5, 12, 14], "summary": {"covered_lines": 4, "num_statements": 4, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "src/accessiweather/weather_client_base.py": {"executed_lines": [1, 3, 4, 5, 6, 7, 9, 11, 12, 16, 24, 25, 39, 40, 42, 45, 46, 48, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 92, 93, 94, 97, 98, 105, 106, 112, 114, 116, 117, 122, 123, 124, 125, 126, 127, 128, 129, 131, 133, 134, 135, 137, 140, 141, 143, 144, 146, 149, 151, 161, 168, 169, 171, 176, 185, 186, 190, 192, 196, 202, 203, 205, 210, 216, 218, 219, 220, 222, 224, 226, 228, 230, 232, 235, 236, 237, 242, 244, 245, 247, 329, 331, 332, 334, 335, 336, 337, 338, 340, 378, 379, 387, 388, 389, 390, 391, 392, 395, 397, 400, 401, 405, 406, 407, 408, 411, 414, 415, 416, 425, 453, 454, 455, 456, 463, 470, 471, 473, 479, 481, 487, 490, 491, 492, 493, 495, 497, 498, 501, 502, 503, 504, 505, 506, 507, 509, 514, 516, 517, 518, 521, 523, 525, 526, 527, 528, 529, 531, 533, 537, 541, 545, 547, 551, 553, 557, 561, 565, 567, 571, 573, 577, 579, 581, 585, 589, 593, 595, 597, 599, 601, 603, 605, 611, 612, 614, 615, 620, 621, 623, 629, 632, 634, 640, 643, 670, 671, 672, 673, 674, 675, 676, 678, 679, 681, 684, 686, 689, 691, 700, 709, 712, 714, 717, 719, 722, 724, 727, 729, 730, 737, 738, 739, 749, 781, 792, 795, 798, 801, 806, 810, 811, 813, 818, 823, 828, 829, 831, 834, 839, 844, 845, 847, 850, 851, 853], "summary": {"covered_lines": 256, "num_statements": 404, "percent_covered": 63.366336633663366, "percent_covered_display": "63", "missing_lines": 148, "excluded_lines": 4}, "missing_lines": [86, 87, 88, 89, 103, 107, 138, 147, 172, 188, 206, 249, 250, 251, 253, 254, 255, 256, 258, 259, 260, 261, 262, 265, 266, 269, 271, 273, 274, 277, 278, 279, 280, 288, 289, 290, 291, 292, 293, 295, 296, 297, 301, 303, 306, 307, 311, 312, 313, 314, 317, 319, 322, 323, 327, 342, 343, 346, 347, 348, 349, 357, 358, 359, 360, 361, 362, 364, 365, 366, 370, 372, 375, 418, 421, 422, 423, 427, 428, 431, 432, 433, 435, 436, 437, 438, 439, 443, 446, 447, 451, 474, 475, 476, 477, 485, 511, 512, 583, 587, 591, 616, 617, 618, 624, 627, 641, 740, 741, 742, 743, 744, 745, 746, 747, 752, 753, 754, 755, 760, 761, 763, 776, 777, 778, 779, 782, 783, 784, 785, 786, 787, 788, 789, 790, 793, 796, 799, 804, 807, 816, 821, 826, 832, 837, 842, 848, 854], "excluded_lines": [11, 12, 13, 14], "functions": {"WeatherClient.__init__": {"executed_lines": [60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 92, 93, 94, 97, 98, 105, 106, 112], "summary": {"covered_lines": 32, "num_statements": 38, "percent_covered": 84.21052631578948, "percent_covered_display": "84", "missing_lines": 6, "excluded_lines": 0}, "missing_lines": [86, 87, 88, 89, 103, 107], "excluded_lines": []}, "WeatherClient._get_http_client": {"executed_lines": [116, 117, 122, 123, 124, 125, 126, 127, 128, 129], "summary": {"covered_lines": 10, "num_statements": 10, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "WeatherClient._methods_overridden": {"executed_lines": [133, 134, 135, 137, 140, 141, 143, 144, 146, 149], "summary": {"covered_lines": 10, "num_statements": 12, "percent_covered": 83.33333333333333, "percent_covered_display": "83", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [138, 147], "excluded_lines": []}, "WeatherClient._fetch_nws_data": {"executed_lines": [161, 168, 169, 171, 176, 185, 186, 190], "summary": {"covered_lines": 8, "num_statements": 10, "percent_covered": 80.0, "percent_covered_display": "80", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [172, 188], "excluded_lines": []}, "WeatherClient._fetch_openmeteo_data": {"executed_lines": [196, 202, 203, 205, 210], "summary": {"covered_lines": 5, "num_statements": 6, "percent_covered": 83.33333333333333, "percent_covered_display": "83", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [206], "excluded_lines": []}, "WeatherClient.close": {"executed_lines": [218, 219, 220], "summary": {"covered_lines": 3, "num_statements": 3, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "WeatherClient.__aenter__": {"executed_lines": [224], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "WeatherClient.__aexit__": {"executed_lines": [228], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "WeatherClient.get_weather_data": {"executed_lines": [232, 235, 236, 237, 242, 244, 245, 247, 329, 331, 332, 334, 335, 336, 337, 338, 340, 378, 379, 387, 388, 389, 390, 391, 392, 395, 397, 400, 401, 405, 406, 407, 408, 411, 414, 415, 416, 425, 453, 454, 455, 456, 463, 470, 471, 473, 479], "summary": {"covered_lines": 47, "num_statements": 131, "percent_covered": 35.87786259541985, "percent_covered_display": "36", "missing_lines": 84, "excluded_lines": 0}, "missing_lines": [249, 250, 251, 253, 254, 255, 256, 258, 259, 260, 261, 262, 265, 266, 269, 271, 273, 274, 277, 278, 279, 280, 288, 289, 290, 291, 292, 293, 295, 296, 297, 301, 303, 306, 307, 311, 312, 313, 314, 317, 319, 322, 323, 327, 342, 343, 346, 347, 348, 349, 357, 358, 359, 360, 361, 362, 364, 365, 366, 370, 372, 375, 418, 421, 422, 423, 427, 428, 431, 432, 433, 435, 436, 437, 438, 439, 443, 446, 447, 451, 474, 475, 476, 477], "excluded_lines": []}, "WeatherClient._process_visual_crossing_alerts": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 1, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [485], "excluded_lines": []}, "WeatherClient._determine_api_choice": {"executed_lines": [490, 491, 492, 493, 495, 497, 498, 501, 502, 503, 504, 505, 506, 507, 509], "summary": {"covered_lines": 15, "num_statements": 17, "percent_covered": 88.23529411764706, "percent_covered_display": "88", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [511, 512], "excluded_lines": []}, "WeatherClient._is_us_location": {"executed_lines": [516, 517, 518, 521], "summary": {"covered_lines": 4, "num_statements": 4, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "WeatherClient._set_empty_weather_data": {"executed_lines": [525, 526, 527, 528, 529], "summary": {"covered_lines": 5, "num_statements": 5, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "WeatherClient._get_nws_current_conditions": {"executed_lines": [533], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "WeatherClient._get_nws_forecast_and_discussion": {"executed_lines": [541], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "WeatherClient._get_nws_alerts": {"executed_lines": [547], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "WeatherClient._get_nws_hourly_forecast": {"executed_lines": [553], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "WeatherClient._get_openmeteo_current_conditions": {"executed_lines": [561], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "WeatherClient._get_openmeteo_forecast": {"executed_lines": [567], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "WeatherClient._get_openmeteo_hourly_forecast": {"executed_lines": [573], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "WeatherClient._parse_nws_current_conditions": {"executed_lines": [579], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "WeatherClient._parse_nws_forecast": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 1, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [583], "excluded_lines": []}, "WeatherClient._parse_nws_alerts": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 1, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [587], "excluded_lines": []}, "WeatherClient._parse_nws_hourly_forecast": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 1, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [591], "excluded_lines": []}, "WeatherClient._parse_openmeteo_current_conditions": {"executed_lines": [595], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "WeatherClient._parse_openmeteo_forecast": {"executed_lines": [599], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "WeatherClient._parse_openmeteo_hourly_forecast": {"executed_lines": [603], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "WeatherClient._augment_current_with_openmeteo": {"executed_lines": [611, 612, 614, 615, 620, 621, 623, 629, 632], "summary": {"covered_lines": 9, "num_statements": 14, "percent_covered": 64.28571428571429, "percent_covered_display": "64", "missing_lines": 5, "excluded_lines": 0}, "missing_lines": [616, 617, 618, 624, 627], "excluded_lines": []}, "WeatherClient._merge_current_conditions": {"executed_lines": [640, 643, 670, 671, 672, 673, 674, 675, 676, 678, 679], "summary": {"covered_lines": 11, "num_statements": 12, "percent_covered": 91.66666666666667, "percent_covered_display": "92", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [641], "excluded_lines": []}, "WeatherClient._enrich_with_nws_discussion": {"executed_lines": [684], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "WeatherClient._enrich_with_aviation_data": {"executed_lines": [689], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "WeatherClient.get_aviation_weather": {"executed_lines": [700], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "WeatherClient._enrich_with_visual_crossing_alerts": {"executed_lines": [712], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "WeatherClient._enrich_with_sunrise_sunset": {"executed_lines": [717], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "WeatherClient._populate_environmental_metrics": {"executed_lines": [722], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "WeatherClient._merge_international_alerts": {"executed_lines": [727], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "WeatherClient._apply_trend_insights": {"executed_lines": [730], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "WeatherClient._persist_weather_data": {"executed_lines": [738, 739], "summary": {"covered_lines": 2, "num_statements": 10, "percent_covered": 20.0, "percent_covered_display": "20", "missing_lines": 8, "excluded_lines": 0}, "missing_lines": [740, 741, 742, 743, 744, 745, 746, 747], "excluded_lines": []}, "WeatherClient._maybe_generate_air_quality_alert": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 11, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 11, "excluded_lines": 0}, "missing_lines": [752, 753, 754, 755, 760, 761, 763, 776, 777, 778, 779], "excluded_lines": []}, "WeatherClient._air_quality_severity": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 9, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 9, "excluded_lines": 0}, "missing_lines": [782, 783, 784, 785, 786, 787, 788, 789, 790], "excluded_lines": []}, "WeatherClient._compute_temperature_trend": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 1, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [793], "excluded_lines": []}, "WeatherClient._compute_pressure_trend": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 1, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [796], "excluded_lines": []}, "WeatherClient._trend_descriptor": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 1, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [799], "excluded_lines": []}, "WeatherClient._period_for_hours_ahead": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 1, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [804], "excluded_lines": []}, "WeatherClient._normalize_datetime": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 1, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [807], "excluded_lines": []}, "WeatherClient._convert_mps_to_mph": {"executed_lines": [811], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "WeatherClient._convert_wind_speed_to_mph": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 1, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [816], "excluded_lines": []}, "WeatherClient._convert_wind_speed_to_kph": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 1, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [821], "excluded_lines": []}, "WeatherClient._convert_wind_speed_to_mph_and_kph": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 1, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [826], "excluded_lines": []}, "WeatherClient._convert_pa_to_inches": {"executed_lines": [829], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "WeatherClient._convert_pa_to_mb": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 1, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [832], "excluded_lines": []}, "WeatherClient._normalize_temperature": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 1, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [837], "excluded_lines": []}, "WeatherClient._normalize_pressure": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 1, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [842], "excluded_lines": []}, "WeatherClient._convert_f_to_c": {"executed_lines": [845], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "WeatherClient._degrees_to_cardinal": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 1, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [848], "excluded_lines": []}, "WeatherClient._weather_code_to_description": {"executed_lines": [851], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "WeatherClient._format_date_name": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 1, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [854], "excluded_lines": []}, "": {"executed_lines": [1, 3, 4, 5, 6, 7, 9, 11, 12, 16, 24, 25, 39, 40, 42, 45, 46, 48, 114, 131, 151, 192, 216, 222, 226, 230, 481, 487, 514, 523, 531, 537, 545, 551, 557, 565, 571, 577, 581, 585, 589, 593, 597, 601, 605, 634, 681, 686, 691, 709, 714, 719, 724, 729, 737, 749, 781, 792, 795, 798, 801, 806, 810, 813, 818, 823, 828, 831, 834, 839, 844, 847, 850, 853], "summary": {"covered_lines": 70, "num_statements": 70, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 4}, "missing_lines": [], "excluded_lines": [11, 12, 13, 14]}}, "classes": {"WeatherClient": {"executed_lines": [60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 92, 93, 94, 97, 98, 105, 106, 112, 116, 117, 122, 123, 124, 125, 126, 127, 128, 129, 133, 134, 135, 137, 140, 141, 143, 144, 146, 149, 161, 168, 169, 171, 176, 185, 186, 190, 196, 202, 203, 205, 210, 218, 219, 220, 224, 228, 232, 235, 236, 237, 242, 244, 245, 247, 329, 331, 332, 334, 335, 336, 337, 338, 340, 378, 379, 387, 388, 389, 390, 391, 392, 395, 397, 400, 401, 405, 406, 407, 408, 411, 414, 415, 416, 425, 453, 454, 455, 456, 463, 470, 471, 473, 479, 490, 491, 492, 493, 495, 497, 498, 501, 502, 503, 504, 505, 506, 507, 509, 516, 517, 518, 521, 525, 526, 527, 528, 529, 533, 541, 547, 553, 561, 567, 573, 579, 595, 599, 603, 611, 612, 614, 615, 620, 621, 623, 629, 632, 640, 643, 670, 671, 672, 673, 674, 675, 676, 678, 679, 684, 689, 700, 712, 717, 722, 727, 730, 738, 739, 811, 829, 845, 851], "summary": {"covered_lines": 186, "num_statements": 334, "percent_covered": 55.68862275449102, "percent_covered_display": "56", "missing_lines": 148, "excluded_lines": 0}, "missing_lines": [86, 87, 88, 89, 103, 107, 138, 147, 172, 188, 206, 249, 250, 251, 253, 254, 255, 256, 258, 259, 260, 261, 262, 265, 266, 269, 271, 273, 274, 277, 278, 279, 280, 288, 289, 290, 291, 292, 293, 295, 296, 297, 301, 303, 306, 307, 311, 312, 313, 314, 317, 319, 322, 323, 327, 342, 343, 346, 347, 348, 349, 357, 358, 359, 360, 361, 362, 364, 365, 366, 370, 372, 375, 418, 421, 422, 423, 427, 428, 431, 432, 433, 435, 436, 437, 438, 439, 443, 446, 447, 451, 474, 475, 476, 477, 485, 511, 512, 583, 587, 591, 616, 617, 618, 624, 627, 641, 740, 741, 742, 743, 744, 745, 746, 747, 752, 753, 754, 755, 760, 761, 763, 776, 777, 778, 779, 782, 783, 784, 785, 786, 787, 788, 789, 790, 793, 796, 799, 804, 807, 816, 821, 826, 832, 837, 842, 848, 854], "excluded_lines": []}, "": {"executed_lines": [1, 3, 4, 5, 6, 7, 9, 11, 12, 16, 24, 25, 39, 40, 42, 45, 46, 48, 114, 131, 151, 192, 216, 222, 226, 230, 481, 487, 514, 523, 531, 537, 545, 551, 557, 565, 571, 577, 581, 585, 589, 593, 597, 601, 605, 634, 681, 686, 691, 709, 714, 719, 724, 729, 737, 749, 781, 792, 795, 798, 801, 806, 810, 813, 818, 823, 828, 831, 834, 839, 844, 847, 850, 853], "summary": {"covered_lines": 70, "num_statements": 70, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 4}, "missing_lines": [], "excluded_lines": [11, 12, 13, 14]}}}, "src/accessiweather/weather_client_enrichment.py": {"executed_lines": [1, 3, 5, 6, 8, 9, 10, 12, 15, 18, 19, 20, 21, 22, 25, 33, 36, 37, 39, 40, 42, 43, 45, 46, 48, 49, 51, 52, 54, 55, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 80, 81, 83, 84, 87, 105, 106, 107, 108, 109, 110, 113, 119, 120, 122, 125, 126, 127, 128, 129, 132, 136, 137, 139, 142, 144, 145, 146, 147, 154, 164, 165, 166, 168, 169, 171, 172, 173, 179, 180, 181, 182, 185, 186, 193, 194, 195, 196, 197, 199, 200, 204, 205, 207, 209, 210, 211, 213, 222, 223, 224, 225, 226, 228, 230, 231, 232, 239, 243, 244, 245, 246, 247, 250, 256, 259, 263, 264, 265, 268, 269, 270, 273, 274, 276, 277, 278, 280, 285, 289, 290, 292, 293, 294, 296, 297, 299, 300, 302, 303, 305, 307, 312, 316, 319, 320, 322, 323, 324, 326, 327, 329, 330, 331, 336, 337, 338, 346, 350, 351, 377, 381, 382, 383, 385, 388, 389, 394, 397, 398, 399, 400, 401], "summary": {"covered_lines": 172, "num_statements": 227, "percent_covered": 75.77092511013215, "percent_covered_display": "76", "missing_lines": 55, "excluded_lines": 2}, "missing_lines": [34, 69, 70, 71, 72, 73, 74, 75, 76, 77, 82, 85, 111, 148, 149, 150, 151, 176, 177, 189, 190, 191, 201, 202, 240, 241, 251, 252, 254, 266, 281, 282, 308, 309, 317, 342, 343, 352, 353, 355, 356, 361, 362, 363, 365, 366, 368, 369, 374, 384, 386, 390, 391, 392, 395], "excluded_lines": [12, 13], "functions": {"_normalize_token": {"executed_lines": [19, 20, 21, 22], "summary": {"covered_lines": 4, "num_statements": 4, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "_taf_indicates_no_data": {"executed_lines": [33, 36, 37, 39, 40, 42, 43, 45, 46, 48, 49, 51, 52, 54, 55], "summary": {"covered_lines": 15, "num_statements": 16, "percent_covered": 93.75, "percent_covered_display": "94", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [34], "excluded_lines": []}, "_extract_strings": {"executed_lines": [59, 60, 61, 62, 63, 64, 65, 66, 67, 68], "summary": {"covered_lines": 10, "num_statements": 19, "percent_covered": 52.63157894736842, "percent_covered_display": "53", "missing_lines": 9, "excluded_lines": 0}, "missing_lines": [69, 70, 71, 72, 73, 74, 75, 76, 77], "excluded_lines": []}, "_filter_advisories": {"executed_lines": [81, 83, 84, 87, 105, 106, 107, 108, 109, 110, 113, 119, 120, 122], "summary": {"covered_lines": 14, "num_statements": 17, "percent_covered": 82.3529411764706, "percent_covered_display": "82", "missing_lines": 3, "excluded_lines": 0}, "missing_lines": [82, 85, 111], "excluded_lines": []}, "_default_atsu": {"executed_lines": [126, 127, 128, 129], "summary": {"covered_lines": 4, "num_statements": 4, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "enrich_with_nws_discussion": {"executed_lines": [136, 137, 139, 142, 144, 145, 146, 147], "summary": {"covered_lines": 8, "num_statements": 12, "percent_covered": 66.66666666666667, "percent_covered_display": "67", "missing_lines": 4, "excluded_lines": 0}, "missing_lines": [148, 149, 150, 151], "excluded_lines": []}, "get_aviation_weather": {"executed_lines": [164, 165, 166, 168, 169, 171, 172, 173, 179, 180, 181, 182, 185, 186, 193, 194, 195, 196, 197, 199, 200, 204, 205, 207, 209, 210, 211, 213, 222, 223, 224, 225, 226, 228, 230, 231, 232, 239, 243, 244, 245, 246, 247, 250, 256], "summary": {"covered_lines": 45, "num_statements": 57, "percent_covered": 78.94736842105263, "percent_covered_display": "79", "missing_lines": 12, "excluded_lines": 0}, "missing_lines": [176, 177, 189, 190, 191, 201, 202, 240, 241, 251, 252, 254], "excluded_lines": []}, "enrich_with_aviation_data": {"executed_lines": [263, 264, 265, 268, 269, 270, 273, 274, 276, 277, 278, 280], "summary": {"covered_lines": 12, "num_statements": 15, "percent_covered": 80.0, "percent_covered_display": "80", "missing_lines": 3, "excluded_lines": 0}, "missing_lines": [266, 281, 282], "excluded_lines": []}, "enrich_with_visual_crossing_alerts": {"executed_lines": [289, 290, 292, 293, 294, 296, 297, 299, 300, 302, 303, 305, 307], "summary": {"covered_lines": 13, "num_statements": 15, "percent_covered": 86.66666666666667, "percent_covered_display": "87", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [308, 309], "excluded_lines": []}, "enrich_with_sunrise_sunset": {"executed_lines": [316, 319, 320, 322, 323, 324, 326, 327, 329, 330, 331, 336, 337, 338], "summary": {"covered_lines": 14, "num_statements": 17, "percent_covered": 82.3529411764706, "percent_covered_display": "82", "missing_lines": 3, "excluded_lines": 0}, "missing_lines": [317, 342, 343], "excluded_lines": []}, "populate_environmental_metrics": {"executed_lines": [350, 351], "summary": {"covered_lines": 2, "num_statements": 14, "percent_covered": 14.285714285714286, "percent_covered_display": "14", "missing_lines": 12, "excluded_lines": 0}, "missing_lines": [352, 353, 355, 356, 361, 362, 363, 365, 366, 368, 369, 374], "excluded_lines": []}, "merge_international_alerts": {"executed_lines": [381, 382, 383, 385, 388, 389, 394, 397, 398, 399, 400, 401], "summary": {"covered_lines": 12, "num_statements": 18, "percent_covered": 66.66666666666667, "percent_covered_display": "67", "missing_lines": 6, "excluded_lines": 0}, "missing_lines": [384, 386, 390, 391, 392, 395], "excluded_lines": []}, "": {"executed_lines": [1, 3, 5, 6, 8, 9, 10, 12, 15, 18, 25, 58, 80, 125, 132, 154, 259, 285, 312, 346, 377], "summary": {"covered_lines": 19, "num_statements": 19, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 2}, "missing_lines": [], "excluded_lines": [12, 13]}}, "classes": {"": {"executed_lines": [1, 3, 5, 6, 8, 9, 10, 12, 15, 18, 19, 20, 21, 22, 25, 33, 36, 37, 39, 40, 42, 43, 45, 46, 48, 49, 51, 52, 54, 55, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 80, 81, 83, 84, 87, 105, 106, 107, 108, 109, 110, 113, 119, 120, 122, 125, 126, 127, 128, 129, 132, 136, 137, 139, 142, 144, 145, 146, 147, 154, 164, 165, 166, 168, 169, 171, 172, 173, 179, 180, 181, 182, 185, 186, 193, 194, 195, 196, 197, 199, 200, 204, 205, 207, 209, 210, 211, 213, 222, 223, 224, 225, 226, 228, 230, 231, 232, 239, 243, 244, 245, 246, 247, 250, 256, 259, 263, 264, 265, 268, 269, 270, 273, 274, 276, 277, 278, 280, 285, 289, 290, 292, 293, 294, 296, 297, 299, 300, 302, 303, 305, 307, 312, 316, 319, 320, 322, 323, 324, 326, 327, 329, 330, 331, 336, 337, 338, 346, 350, 351, 377, 381, 382, 383, 385, 388, 389, 394, 397, 398, 399, 400, 401], "summary": {"covered_lines": 172, "num_statements": 227, "percent_covered": 75.77092511013215, "percent_covered_display": "76", "missing_lines": 55, "excluded_lines": 2}, "missing_lines": [34, 69, 70, 71, 72, 73, 74, 75, 76, 77, 82, 85, 111, 148, 149, 150, 151, 176, 177, 189, 190, 191, 201, 202, 240, 241, 251, 252, 254, 266, 281, 282, 308, 309, 317, 342, 343, 352, 353, 355, 356, 361, 362, 363, 365, 366, 368, 369, 374, 384, 386, 390, 391, 392, 395], "excluded_lines": [12, 13]}}}, "src/accessiweather/weather_client_nws.py": {"executed_lines": [1, 3, 5, 6, 7, 8, 9, 11, 13, 23, 28, 34, 36, 37, 38, 41, 43, 44, 45, 46, 48, 49, 50, 51, 56, 58, 59, 60, 61, 62, 63, 64, 65, 67, 68, 69, 72, 73, 76, 78, 91, 92, 93, 94, 95, 96, 99, 101, 112, 115, 117, 118, 119, 126, 132, 135, 137, 138, 139, 148, 163, 165, 166, 167, 168, 169, 170, 178, 180, 181, 182, 197, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 221, 223, 225, 226, 227, 228, 230, 232, 233, 234, 236, 238, 241, 242, 243, 245, 248, 256, 257, 258, 262, 263, 323, 324, 332, 333, 334, 336, 341, 344, 345, 346, 348, 350, 351, 354, 355, 356, 359, 360, 362, 363, 364, 369, 370, 375, 376, 377, 378, 379, 382, 383, 384, 385, 387, 389, 390, 391, 396, 399, 400, 402, 403, 405, 408, 409, 410, 411, 413, 416, 417, 418, 419, 421, 422, 423, 424, 426, 430, 431, 438, 463, 464, 465, 467, 470, 478, 479, 480, 482, 483, 484, 485, 486, 487, 491, 492, 493, 508, 509, 513, 514, 515, 516, 517, 518, 519, 522, 530, 533, 534, 536, 537, 538, 539, 540, 551, 552, 561, 562, 563, 564, 567, 569, 570, 571, 572, 573, 575, 576, 577, 578, 580, 582, 599, 600, 601, 603, 606, 613, 614, 615, 619, 620, 621, 622, 668, 669, 677, 678, 679, 684, 687, 688, 689, 690, 691, 698, 699, 700, 701, 702, 705, 706, 715, 716, 717, 718, 721, 723, 724, 725, 757, 758, 759, 761, 764, 765, 773, 775, 776, 778, 779, 780, 785, 786, 787, 788, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 804, 810, 811, 815, 817, 818, 819, 826, 827, 828, 829, 830, 832, 833, 834, 840, 841, 842, 843, 844, 845, 851, 852, 881, 882, 909, 910, 935, 936, 962, 964, 966, 967, 969, 970, 972, 973, 975, 976, 977, 979, 980, 981, 987, 988, 989, 990, 994, 996, 997, 999, 1000, 1001, 1002, 1003, 1007, 1028, 1030, 1032, 1033, 1037, 1038, 1040, 1050, 1052, 1055, 1057, 1059, 1106, 1107, 1110, 1112, 1114, 1115, 1116, 1117, 1118, 1119, 1123, 1124, 1125, 1126, 1127, 1131, 1135, 1136, 1138, 1148, 1150], "summary": {"covered_lines": 375, "num_statements": 684, "percent_covered": 54.824561403508774, "percent_covered_display": "55", "missing_lines": 309, "excluded_lines": 0}, "missing_lines": [47, 52, 53, 70, 120, 121, 122, 123, 124, 125, 127, 128, 129, 130, 131, 140, 141, 142, 143, 144, 145, 150, 151, 152, 153, 160, 172, 173, 174, 175, 176, 177, 179, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 216, 217, 218, 229, 231, 239, 259, 281, 283, 284, 285, 286, 288, 289, 290, 293, 296, 301, 304, 309, 310, 311, 312, 314, 316, 317, 318, 319, 320, 342, 352, 357, 365, 366, 367, 371, 372, 373, 380, 392, 393, 394, 406, 427, 428, 432, 439, 440, 441, 442, 444, 445, 446, 447, 449, 450, 451, 453, 454, 455, 461, 466, 488, 489, 495, 496, 497, 498, 499, 500, 501, 502, 504, 505, 506, 510, 511, 531, 542, 543, 544, 545, 546, 547, 548, 583, 585, 586, 587, 588, 590, 591, 592, 593, 595, 597, 602, 616, 617, 624, 625, 627, 628, 630, 631, 632, 634, 636, 637, 638, 640, 641, 642, 643, 644, 646, 647, 649, 650, 651, 653, 654, 656, 657, 658, 660, 661, 663, 664, 665, 692, 693, 694, 695, 696, 726, 727, 729, 730, 731, 732, 734, 735, 736, 738, 739, 741, 742, 743, 744, 746, 747, 748, 749, 751, 752, 753, 755, 760, 781, 782, 783, 789, 790, 791, 820, 821, 822, 823, 824, 835, 836, 837, 838, 847, 848, 861, 863, 864, 865, 867, 868, 869, 870, 871, 872, 873, 874, 876, 877, 878, 890, 892, 893, 895, 896, 897, 898, 899, 900, 901, 902, 904, 905, 906, 918, 920, 921, 923, 924, 925, 926, 927, 928, 929, 930, 932, 945, 947, 948, 950, 951, 952, 953, 954, 955, 956, 957, 959, 982, 983, 984, 985, 1004, 1005, 1060, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1070, 1071, 1073, 1074, 1075, 1076, 1077, 1079, 1080, 1081, 1082, 1083, 1085, 1099, 1101, 1102, 1104, 1120, 1121, 1128, 1129], "excluded_lines": [], "functions": {"_parse_iso_datetime": {"executed_lines": [43, 44, 45, 46, 48, 49, 50, 51], "summary": {"covered_lines": 8, "num_statements": 11, "percent_covered": 72.72727272727273, "percent_covered_display": "73", "missing_lines": 3, "excluded_lines": 0}, "missing_lines": [47, 52, 53], "excluded_lines": []}, "_station_sort_key": {"executed_lines": [58, 59, 60, 61, 62, 63, 64, 65, 67, 68, 69, 72, 73], "summary": {"covered_lines": 13, "num_statements": 14, "percent_covered": 92.85714285714286, "percent_covered_display": "93", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [70], "excluded_lines": []}, "_scrub_measurements": {"executed_lines": [78, 91, 92, 93, 94, 95, 96], "summary": {"covered_lines": 7, "num_statements": 7, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "_current_data_score": {"executed_lines": [101, 112], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "_extract_scalar": {"executed_lines": [117, 118, 119, 126, 132], "summary": {"covered_lines": 5, "num_statements": 16, "percent_covered": 31.25, "percent_covered_display": "31", "missing_lines": 11, "excluded_lines": 0}, "missing_lines": [120, 121, 122, 123, 124, 125, 127, 128, 129, 130, 131], "excluded_lines": []}, "_extract_float": {"executed_lines": [137, 138, 139], "summary": {"covered_lines": 3, "num_statements": 9, "percent_covered": 33.333333333333336, "percent_covered_display": "33", "missing_lines": 6, "excluded_lines": 0}, "missing_lines": [140, 141, 142, 143, 144, 145], "excluded_lines": []}, "_format_unit": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 5, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 5, "excluded_lines": 0}, "missing_lines": [150, 151, 152, 153, 160], "excluded_lines": []}, "_format_wind_speed": {"executed_lines": [165, 166, 167, 168, 169, 170, 178, 180, 181, 182], "summary": {"covered_lines": 10, "num_statements": 29, "percent_covered": 34.48275862068966, "percent_covered_display": "34", "missing_lines": 19, "excluded_lines": 0}, "missing_lines": [172, 173, 174, 175, 176, 177, 179, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194], "excluded_lines": []}, "_normalize_temperature_unit": {"executed_lines": [199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215], "summary": {"covered_lines": 17, "num_statements": 20, "percent_covered": 85.0, "percent_covered_display": "85", "missing_lines": 3, "excluded_lines": 0}, "missing_lines": [216, 217, 218], "excluded_lines": []}, "_extract_temperature": {"executed_lines": [223, 225, 226, 227, 228, 230, 232, 233, 234, 236, 238, 241, 242, 243, 245], "summary": {"covered_lines": 15, "num_statements": 18, "percent_covered": 83.33333333333333, "percent_covered_display": "83", "missing_lines": 3, "excluded_lines": 0}, "missing_lines": [229, 231, 239], "excluded_lines": []}, "_client_get": {"executed_lines": [256, 257, 258], "summary": {"covered_lines": 3, "num_statements": 4, "percent_covered": 75.0, "percent_covered_display": "75", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [259], "excluded_lines": []}, "get_nws_all_data_parallel": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 22, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 22, "excluded_lines": 0}, "missing_lines": [281, 283, 284, 285, 286, 288, 289, 290, 293, 296, 301, 304, 309, 310, 311, 312, 314, 316, 317, 318, 319, 320], "excluded_lines": []}, "get_nws_current_conditions": {"executed_lines": [332, 333, 334, 336, 416, 417, 418, 419, 421, 422, 423, 424, 426, 430, 431, 438, 463, 464, 465, 467], "summary": {"covered_lines": 20, "num_statements": 39, "percent_covered": 51.282051282051285, "percent_covered_display": "51", "missing_lines": 19, "excluded_lines": 0}, "missing_lines": [427, 428, 432, 439, 440, 441, 442, 444, 445, 446, 447, 449, 450, 451, 453, 454, 455, 461, 466], "excluded_lines": []}, "get_nws_current_conditions._select_best_observation": {"executed_lines": [341, 344, 345, 346, 348, 350, 351, 354, 355, 356, 359, 360, 362, 363, 364, 369, 370, 375, 376, 377, 378, 379, 382, 383, 384, 385, 387, 389, 390, 391, 396, 399, 400, 402, 403, 405, 408, 409, 410, 411, 413], "summary": {"covered_lines": 41, "num_statements": 55, "percent_covered": 74.54545454545455, "percent_covered_display": "75", "missing_lines": 14, "excluded_lines": 0}, "missing_lines": [342, 352, 357, 365, 366, 367, 371, 372, 373, 380, 392, 393, 394, 406], "excluded_lines": []}, "get_nws_primary_station_info": {"executed_lines": [478, 479, 480, 482, 483, 484, 485, 486, 487, 491, 492, 493, 508, 509, 513, 514, 515, 516, 517, 518, 519], "summary": {"covered_lines": 21, "num_statements": 36, "percent_covered": 58.333333333333336, "percent_covered_display": "58", "missing_lines": 15, "excluded_lines": 0}, "missing_lines": [488, 489, 495, 496, 497, 498, 499, 500, 501, 502, 504, 505, 506, 510, 511], "excluded_lines": []}, "get_nws_station_metadata": {"executed_lines": [530, 533, 534, 536, 537, 538, 539, 540], "summary": {"covered_lines": 8, "num_statements": 16, "percent_covered": 50.0, "percent_covered_display": "50", "missing_lines": 8, "excluded_lines": 0}, "missing_lines": [531, 542, 543, 544, 545, 546, 547, 548], "excluded_lines": []}, "get_nws_forecast_and_discussion": {"executed_lines": [561, 562, 563, 564, 567, 569, 570, 571, 572, 573, 575, 576, 577, 578, 580, 582, 599, 600, 601, 603], "summary": {"covered_lines": 20, "num_statements": 32, "percent_covered": 62.5, "percent_covered_display": "62", "missing_lines": 12, "excluded_lines": 0}, "missing_lines": [583, 585, 586, 587, 588, 590, 591, 592, 593, 595, 597, 602], "excluded_lines": []}, "get_nws_discussion": {"executed_lines": [613, 614, 615, 619, 620, 621, 622], "summary": {"covered_lines": 7, "num_statements": 40, "percent_covered": 17.5, "percent_covered_display": "18", "missing_lines": 33, "excluded_lines": 0}, "missing_lines": [616, 617, 624, 625, 627, 628, 630, 631, 632, 634, 636, 637, 638, 640, 641, 642, 643, 644, 646, 647, 649, 650, 651, 653, 654, 656, 657, 658, 660, 661, 663, 664, 665], "excluded_lines": []}, "get_nws_alerts": {"executed_lines": [677, 678, 679, 684, 687, 688, 689, 690, 691, 698, 699, 700, 701, 702], "summary": {"covered_lines": 14, "num_statements": 19, "percent_covered": 73.6842105263158, "percent_covered_display": "74", "missing_lines": 5, "excluded_lines": 0}, "missing_lines": [692, 693, 694, 695, 696], "excluded_lines": []}, "get_nws_hourly_forecast": {"executed_lines": [715, 716, 717, 718, 721, 723, 724, 725, 757, 758, 759, 761], "summary": {"covered_lines": 12, "num_statements": 36, "percent_covered": 33.333333333333336, "percent_covered_display": "33", "missing_lines": 24, "excluded_lines": 0}, "missing_lines": [726, 727, 729, 730, 731, 732, 734, 735, 736, 738, 739, 741, 742, 743, 744, 746, 747, 748, 749, 751, 752, 753, 755, 760], "excluded_lines": []}, "get_nws_tafs": {"executed_lines": [773, 775, 776, 778, 779, 780, 785, 786, 787, 788, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 804, 810, 811, 815, 817, 818, 819, 826, 827, 828, 829, 830, 832, 833, 834, 840, 841, 842, 843, 844, 845], "summary": {"covered_lines": 41, "num_statements": 58, "percent_covered": 70.6896551724138, "percent_covered_display": "71", "missing_lines": 17, "excluded_lines": 0}, "missing_lines": [781, 782, 783, 789, 790, 791, 820, 821, 822, 823, 824, 835, 836, 837, 838, 847, 848], "excluded_lines": []}, "get_nws_sigmets": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 15, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 15, "excluded_lines": 0}, "missing_lines": [861, 863, 864, 865, 867, 868, 869, 870, 871, 872, 873, 874, 876, 877, 878], "excluded_lines": []}, "get_nws_cwas": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 14, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 14, "excluded_lines": 0}, "missing_lines": [890, 892, 893, 895, 896, 897, 898, 899, 900, 901, 902, 904, 905, 906], "excluded_lines": []}, "get_nws_radar_profiler": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 12, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 12, "excluded_lines": 0}, "missing_lines": [918, 920, 921, 923, 924, 925, 926, 927, 928, 929, 930, 932], "excluded_lines": []}, "get_nws_marine_forecast": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 12, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 12, "excluded_lines": 0}, "missing_lines": [945, 947, 948, 950, 951, 952, 953, 954, 955, 956, 957, 959], "excluded_lines": []}, "parse_nws_current_conditions": {"executed_lines": [964, 966, 967, 969, 970, 972, 973, 975, 976, 977, 979, 980, 981, 987, 988, 989, 990, 994, 996, 997, 999, 1000, 1001, 1002, 1003, 1007], "summary": {"covered_lines": 26, "num_statements": 32, "percent_covered": 81.25, "percent_covered_display": "81", "missing_lines": 6, "excluded_lines": 0}, "missing_lines": [982, 983, 984, 985, 1004, 1005], "excluded_lines": []}, "parse_nws_forecast": {"executed_lines": [1030, 1032, 1033, 1037, 1038, 1040, 1050, 1052], "summary": {"covered_lines": 8, "num_statements": 8, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "parse_nws_alerts": {"executed_lines": [1057, 1059, 1106, 1107], "summary": {"covered_lines": 4, "num_statements": 29, "percent_covered": 13.793103448275861, "percent_covered_display": "14", "missing_lines": 25, "excluded_lines": 0}, "missing_lines": [1060, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1070, 1071, 1073, 1074, 1075, 1076, 1077, 1079, 1080, 1081, 1082, 1083, 1085, 1099, 1101, 1102, 1104], "excluded_lines": []}, "parse_nws_hourly_forecast": {"executed_lines": [1112, 1114, 1115, 1116, 1117, 1118, 1119, 1123, 1124, 1125, 1126, 1127, 1131, 1135, 1136, 1138, 1148, 1150], "summary": {"covered_lines": 18, "num_statements": 22, "percent_covered": 81.81818181818181, "percent_covered_display": "82", "missing_lines": 4, "excluded_lines": 0}, "missing_lines": [1120, 1121, 1128, 1129], "excluded_lines": []}, "": {"executed_lines": [1, 3, 5, 6, 7, 8, 9, 11, 13, 23, 28, 34, 36, 37, 38, 41, 56, 76, 99, 115, 135, 148, 163, 197, 221, 248, 262, 263, 323, 324, 470, 522, 551, 552, 606, 668, 669, 705, 706, 764, 765, 851, 852, 881, 882, 909, 910, 935, 936, 962, 1028, 1055, 1110], "summary": {"covered_lines": 52, "num_statements": 52, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [1, 3, 5, 6, 7, 8, 9, 11, 13, 23, 28, 34, 36, 37, 38, 41, 43, 44, 45, 46, 48, 49, 50, 51, 56, 58, 59, 60, 61, 62, 63, 64, 65, 67, 68, 69, 72, 73, 76, 78, 91, 92, 93, 94, 95, 96, 99, 101, 112, 115, 117, 118, 119, 126, 132, 135, 137, 138, 139, 148, 163, 165, 166, 167, 168, 169, 170, 178, 180, 181, 182, 197, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 221, 223, 225, 226, 227, 228, 230, 232, 233, 234, 236, 238, 241, 242, 243, 245, 248, 256, 257, 258, 262, 263, 323, 324, 332, 333, 334, 336, 341, 344, 345, 346, 348, 350, 351, 354, 355, 356, 359, 360, 362, 363, 364, 369, 370, 375, 376, 377, 378, 379, 382, 383, 384, 385, 387, 389, 390, 391, 396, 399, 400, 402, 403, 405, 408, 409, 410, 411, 413, 416, 417, 418, 419, 421, 422, 423, 424, 426, 430, 431, 438, 463, 464, 465, 467, 470, 478, 479, 480, 482, 483, 484, 485, 486, 487, 491, 492, 493, 508, 509, 513, 514, 515, 516, 517, 518, 519, 522, 530, 533, 534, 536, 537, 538, 539, 540, 551, 552, 561, 562, 563, 564, 567, 569, 570, 571, 572, 573, 575, 576, 577, 578, 580, 582, 599, 600, 601, 603, 606, 613, 614, 615, 619, 620, 621, 622, 668, 669, 677, 678, 679, 684, 687, 688, 689, 690, 691, 698, 699, 700, 701, 702, 705, 706, 715, 716, 717, 718, 721, 723, 724, 725, 757, 758, 759, 761, 764, 765, 773, 775, 776, 778, 779, 780, 785, 786, 787, 788, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 804, 810, 811, 815, 817, 818, 819, 826, 827, 828, 829, 830, 832, 833, 834, 840, 841, 842, 843, 844, 845, 851, 852, 881, 882, 909, 910, 935, 936, 962, 964, 966, 967, 969, 970, 972, 973, 975, 976, 977, 979, 980, 981, 987, 988, 989, 990, 994, 996, 997, 999, 1000, 1001, 1002, 1003, 1007, 1028, 1030, 1032, 1033, 1037, 1038, 1040, 1050, 1052, 1055, 1057, 1059, 1106, 1107, 1110, 1112, 1114, 1115, 1116, 1117, 1118, 1119, 1123, 1124, 1125, 1126, 1127, 1131, 1135, 1136, 1138, 1148, 1150], "summary": {"covered_lines": 375, "num_statements": 684, "percent_covered": 54.824561403508774, "percent_covered_display": "55", "missing_lines": 309, "excluded_lines": 0}, "missing_lines": [47, 52, 53, 70, 120, 121, 122, 123, 124, 125, 127, 128, 129, 130, 131, 140, 141, 142, 143, 144, 145, 150, 151, 152, 153, 160, 172, 173, 174, 175, 176, 177, 179, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 216, 217, 218, 229, 231, 239, 259, 281, 283, 284, 285, 286, 288, 289, 290, 293, 296, 301, 304, 309, 310, 311, 312, 314, 316, 317, 318, 319, 320, 342, 352, 357, 365, 366, 367, 371, 372, 373, 380, 392, 393, 394, 406, 427, 428, 432, 439, 440, 441, 442, 444, 445, 446, 447, 449, 450, 451, 453, 454, 455, 461, 466, 488, 489, 495, 496, 497, 498, 499, 500, 501, 502, 504, 505, 506, 510, 511, 531, 542, 543, 544, 545, 546, 547, 548, 583, 585, 586, 587, 588, 590, 591, 592, 593, 595, 597, 602, 616, 617, 624, 625, 627, 628, 630, 631, 632, 634, 636, 637, 638, 640, 641, 642, 643, 644, 646, 647, 649, 650, 651, 653, 654, 656, 657, 658, 660, 661, 663, 664, 665, 692, 693, 694, 695, 696, 726, 727, 729, 730, 731, 732, 734, 735, 736, 738, 739, 741, 742, 743, 744, 746, 747, 748, 749, 751, 752, 753, 755, 760, 781, 782, 783, 789, 790, 791, 820, 821, 822, 823, 824, 835, 836, 837, 838, 847, 848, 861, 863, 864, 865, 867, 868, 869, 870, 871, 872, 873, 874, 876, 877, 878, 890, 892, 893, 895, 896, 897, 898, 899, 900, 901, 902, 904, 905, 906, 918, 920, 921, 923, 924, 925, 926, 927, 928, 929, 930, 932, 945, 947, 948, 950, 951, 952, 953, 954, 955, 956, 957, 959, 982, 983, 984, 985, 1004, 1005, 1060, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1070, 1071, 1073, 1074, 1075, 1076, 1077, 1079, 1080, 1081, 1082, 1083, 1085, 1099, 1101, 1102, 1104, 1120, 1121, 1128, 1129], "excluded_lines": []}}}, "src/accessiweather/weather_client_openmeteo.py": {"executed_lines": [1, 3, 5, 6, 7, 8, 9, 11, 13, 21, 26, 27, 37, 40, 42, 43, 45, 46, 47, 49, 50, 51, 59, 66, 67, 68, 72, 73, 110, 111, 118, 119, 120, 136, 137, 138, 139, 141, 142, 143, 144, 155, 156, 157, 159, 162, 163, 170, 171, 172, 186, 187, 188, 189, 190, 197, 198, 199, 200, 201, 204, 205, 212, 213, 214, 225, 226, 236, 237, 238, 240, 243, 245, 246, 247, 249, 253, 254, 256, 257, 258, 259, 260, 261, 263, 267, 271, 275, 278, 279, 280, 281, 282, 283, 284, 285, 286, 288, 289, 290, 291, 292, 293, 297, 318, 320, 321, 323, 324, 325, 327, 328, 329, 335, 337, 340, 342, 343, 345, 346, 347, 348, 349, 350, 352, 353, 355, 356, 357, 358, 359, 360, 362, 372, 374], "summary": {"covered_lines": 134, "num_statements": 177, "percent_covered": 75.70621468926554, "percent_covered_display": "76", "missing_lines": 43, "excluded_lines": 0}, "missing_lines": [52, 53, 55, 56, 69, 84, 86, 89, 92, 97, 98, 99, 101, 103, 104, 105, 106, 107, 145, 146, 147, 148, 150, 151, 152, 153, 158, 191, 192, 193, 194, 195, 227, 228, 229, 230, 231, 232, 233, 234, 239, 294, 295], "excluded_lines": [], "functions": {"_parse_iso_datetime": {"executed_lines": [42, 43, 45, 46, 47, 49, 50, 51], "summary": {"covered_lines": 8, "num_statements": 12, "percent_covered": 66.66666666666667, "percent_covered_display": "67", "missing_lines": 4, "excluded_lines": 0}, "missing_lines": [52, 53, 55, 56], "excluded_lines": []}, "_client_get": {"executed_lines": [66, 67, 68], "summary": {"covered_lines": 3, "num_statements": 4, "percent_covered": 75.0, "percent_covered_display": "75", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [69], "excluded_lines": []}, "get_openmeteo_all_data_parallel": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 13, "percent_covered": 0.0, "percent_covered_display": "0", "missing_lines": 13, "excluded_lines": 0}, "missing_lines": [84, 86, 89, 92, 97, 98, 99, 101, 103, 104, 105, 106, 107], "excluded_lines": []}, "get_openmeteo_current_conditions": {"executed_lines": [118, 119, 120, 136, 137, 138, 139, 141, 142, 143, 144, 155, 156, 157, 159], "summary": {"covered_lines": 15, "num_statements": 24, "percent_covered": 62.5, "percent_covered_display": "62", "missing_lines": 9, "excluded_lines": 0}, "missing_lines": [145, 146, 147, 148, 150, 151, 152, 153, 158], "excluded_lines": []}, "get_openmeteo_forecast": {"executed_lines": [170, 171, 172, 186, 187, 188, 189, 190, 197, 198, 199, 200, 201], "summary": {"covered_lines": 13, "num_statements": 18, "percent_covered": 72.22222222222223, "percent_covered_display": "72", "missing_lines": 5, "excluded_lines": 0}, "missing_lines": [191, 192, 193, 194, 195], "excluded_lines": []}, "get_openmeteo_hourly_forecast": {"executed_lines": [212, 213, 214, 225, 226, 236, 237, 238, 240], "summary": {"covered_lines": 9, "num_statements": 18, "percent_covered": 50.0, "percent_covered_display": "50", "missing_lines": 9, "excluded_lines": 0}, "missing_lines": [227, 228, 229, 230, 231, 232, 233, 234, 239], "excluded_lines": []}, "parse_openmeteo_current_conditions": {"executed_lines": [245, 246, 247, 249, 253, 254, 256, 257, 258, 259, 260, 261, 263, 267, 271, 275, 278, 279, 280, 281, 282, 283, 284, 285, 286, 288, 289, 290, 291, 292, 293, 297], "summary": {"covered_lines": 32, "num_statements": 34, "percent_covered": 94.11764705882354, "percent_covered_display": "94", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [294, 295], "excluded_lines": []}, "parse_openmeteo_forecast": {"executed_lines": [320, 321, 323, 324, 325, 327, 328, 329, 335, 337], "summary": {"covered_lines": 10, "num_statements": 10, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "parse_openmeteo_hourly_forecast": {"executed_lines": [342, 343, 345, 346, 347, 348, 349, 350, 352, 353, 355, 356, 357, 358, 359, 360, 362, 372, 374], "summary": {"covered_lines": 19, "num_statements": 19, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [1, 3, 5, 6, 7, 8, 9, 11, 13, 21, 26, 27, 37, 40, 59, 72, 73, 110, 111, 162, 163, 204, 205, 243, 318, 340], "summary": {"covered_lines": 25, "num_statements": 25, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [1, 3, 5, 6, 7, 8, 9, 11, 13, 21, 26, 27, 37, 40, 42, 43, 45, 46, 47, 49, 50, 51, 59, 66, 67, 68, 72, 73, 110, 111, 118, 119, 120, 136, 137, 138, 139, 141, 142, 143, 144, 155, 156, 157, 159, 162, 163, 170, 171, 172, 186, 187, 188, 189, 190, 197, 198, 199, 200, 201, 204, 205, 212, 213, 214, 225, 226, 236, 237, 238, 240, 243, 245, 246, 247, 249, 253, 254, 256, 257, 258, 259, 260, 261, 263, 267, 271, 275, 278, 279, 280, 281, 282, 283, 284, 285, 286, 288, 289, 290, 291, 292, 293, 297, 318, 320, 321, 323, 324, 325, 327, 328, 329, 335, 337, 340, 342, 343, 345, 346, 347, 348, 349, 350, 352, 353, 355, 356, 357, 358, 359, 360, 362, 372, 374], "summary": {"covered_lines": 134, "num_statements": 177, "percent_covered": 75.70621468926554, "percent_covered_display": "76", "missing_lines": 43, "excluded_lines": 0}, "missing_lines": [52, 53, 55, 56, 69, 84, 86, 89, 92, 97, 98, 99, 101, 103, 104, 105, 106, 107, 145, 146, 147, 148, 150, 151, 152, 153, 158, 191, 192, 193, 194, 195, 227, 228, 229, 230, 231, 232, 233, 234, 239, 294, 295], "excluded_lines": []}}}, "src/accessiweather/weather_client_parsers.py": {"executed_lines": [1, 3, 5, 6, 8, 24, 26, 58, 60, 63, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 81, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 99, 103, 109, 111, 114, 116, 119, 123, 124, 126, 127, 128, 129, 130, 134, 135, 136, 139, 141, 142, 144, 145, 146, 147, 148, 151, 155, 156, 157, 160, 162, 165, 167, 168, 170, 188, 189, 192, 194, 195, 197, 198, 203, 206, 208, 209, 220, 222, 225, 226, 231, 242, 243, 244], "summary": {"covered_lines": 86, "num_statements": 114, "percent_covered": 75.43859649122807, "percent_covered_display": "75", "missing_lines": 28, "excluded_lines": 0}, "missing_lines": [76, 77, 78, 94, 95, 96, 131, 132, 149, 150, 152, 153, 199, 200, 201, 210, 211, 212, 213, 214, 215, 216, 217, 223, 227, 228, 229, 245], "excluded_lines": [], "functions": {"convert_mps_to_mph": {"executed_lines": [60], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "convert_wind_speed_to_mph": {"executed_lines": [65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75], "summary": {"covered_lines": 11, "num_statements": 14, "percent_covered": 78.57142857142857, "percent_covered_display": "79", "missing_lines": 3, "excluded_lines": 0}, "missing_lines": [76, 77, 78], "excluded_lines": []}, "convert_wind_speed_to_kph": {"executed_lines": [83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93], "summary": {"covered_lines": 11, "num_statements": 14, "percent_covered": 78.57142857142857, "percent_covered_display": "79", "missing_lines": 3, "excluded_lines": 0}, "missing_lines": [94, 95, 96], "excluded_lines": []}, "convert_wind_speed_to_mph_and_kph": {"executed_lines": [103], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "convert_pa_to_inches": {"executed_lines": [111], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "convert_pa_to_mb": {"executed_lines": [116], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "normalize_temperature": {"executed_lines": [123, 124, 126, 127, 128, 129, 130, 134, 135, 136], "summary": {"covered_lines": 10, "num_statements": 12, "percent_covered": 83.33333333333333, "percent_covered_display": "83", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [131, 132], "excluded_lines": []}, "normalize_pressure": {"executed_lines": [141, 142, 144, 145, 146, 147, 148, 151, 155, 156, 157], "summary": {"covered_lines": 11, "num_statements": 15, "percent_covered": 73.33333333333333, "percent_covered_display": "73", "missing_lines": 4, "excluded_lines": 0}, "missing_lines": [149, 150, 152, 153], "excluded_lines": []}, "convert_f_to_c": {"executed_lines": [162], "summary": {"covered_lines": 1, "num_statements": 1, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "degrees_to_cardinal": {"executed_lines": [167, 168, 170, 188, 189], "summary": {"covered_lines": 5, "num_statements": 5, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "weather_code_to_description": {"executed_lines": [194, 195, 197, 198, 203], "summary": {"covered_lines": 5, "num_statements": 8, "percent_covered": 62.5, "percent_covered_display": "62", "missing_lines": 3, "excluded_lines": 0}, "missing_lines": [199, 200, 201], "excluded_lines": []}, "format_date_name": {"executed_lines": [208, 209], "summary": {"covered_lines": 2, "num_statements": 10, "percent_covered": 20.0, "percent_covered_display": "20", "missing_lines": 8, "excluded_lines": 0}, "missing_lines": [210, 211, 212, 213, 214, 215, 216, 217], "excluded_lines": []}, "describe_moon_phase": {"executed_lines": [222, 225, 226, 231, 242, 243, 244], "summary": {"covered_lines": 7, "num_statements": 12, "percent_covered": 58.333333333333336, "percent_covered_display": "58", "missing_lines": 5, "excluded_lines": 0}, "missing_lines": [223, 227, 228, 229, 245], "excluded_lines": []}, "": {"executed_lines": [1, 3, 5, 6, 8, 24, 26, 58, 63, 81, 99, 109, 114, 119, 139, 160, 165, 192, 206, 220], "summary": {"covered_lines": 19, "num_statements": 19, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [1, 3, 5, 6, 8, 24, 26, 58, 60, 63, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 81, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 99, 103, 109, 111, 114, 116, 119, 123, 124, 126, 127, 128, 129, 130, 134, 135, 136, 139, 141, 142, 144, 145, 146, 147, 148, 151, 155, 156, 157, 160, 162, 165, 167, 168, 170, 188, 189, 192, 194, 195, 197, 198, 203, 206, 208, 209, 220, 222, 225, 226, 231, 242, 243, 244], "summary": {"covered_lines": 86, "num_statements": 114, "percent_covered": 75.43859649122807, "percent_covered_display": "75", "missing_lines": 28, "excluded_lines": 0}, "missing_lines": [76, 77, 78, 94, 95, 96, 131, 132, 149, 150, 152, 153, 199, 200, 201, 210, 211, 212, 213, 214, 215, 216, 217, 223, 227, 228, 229, 245], "excluded_lines": []}}}, "src/accessiweather/weather_client_trends.py": {"executed_lines": [1, 3, 5, 6, 7, 9, 11, 14, 22, 27, 29, 30, 31, 33, 34, 35, 36, 38, 41, 46, 47, 48, 49, 50, 52, 53, 54, 57, 61, 62, 66, 67, 72, 73, 84, 89, 90, 91, 92, 93, 95, 96, 97, 98, 102, 103, 105, 106, 107, 108, 109, 110, 114, 115, 116, 121, 122, 133, 135, 136, 137, 139, 140, 146, 151, 154, 155, 156, 157, 158, 159, 161, 162, 163, 164, 165, 168, 170, 172, 173], "summary": {"covered_lines": 79, "num_statements": 100, "percent_covered": 79.0, "percent_covered_display": "79", "missing_lines": 21, "excluded_lines": 0}, "missing_lines": [23, 24, 25, 55, 56, 58, 59, 63, 64, 99, 100, 111, 112, 138, 141, 142, 143, 152, 160, 171, 174], "excluded_lines": [], "functions": {"apply_trend_insights": {"executed_lines": [22, 27, 29, 30, 31, 33, 34, 35, 36, 38], "summary": {"covered_lines": 10, "num_statements": 13, "percent_covered": 76.92307692307692, "percent_covered_display": "77", "missing_lines": 3, "excluded_lines": 0}, "missing_lines": [23, 24, 25], "excluded_lines": []}, "compute_temperature_trend": {"executed_lines": [46, 47, 48, 49, 50, 52, 53, 54, 57, 61, 62, 66, 67, 72, 73], "summary": {"covered_lines": 15, "num_statements": 21, "percent_covered": 71.42857142857143, "percent_covered_display": "71", "missing_lines": 6, "excluded_lines": 0}, "missing_lines": [55, 56, 58, 59, 63, 64], "excluded_lines": []}, "compute_pressure_trend": {"executed_lines": [89, 90, 91, 92, 93, 95, 96, 97, 98, 102, 103, 105, 106, 107, 108, 109, 110, 114, 115, 116, 121, 122], "summary": {"covered_lines": 22, "num_statements": 26, "percent_covered": 84.61538461538461, "percent_covered_display": "85", "missing_lines": 4, "excluded_lines": 0}, "missing_lines": [99, 100, 111, 112], "excluded_lines": []}, "trend_descriptor": {"executed_lines": [135, 136, 137, 139, 140], "summary": {"covered_lines": 5, "num_statements": 9, "percent_covered": 55.55555555555556, "percent_covered_display": "56", "missing_lines": 4, "excluded_lines": 0}, "missing_lines": [138, 141, 142, 143], "excluded_lines": []}, "period_for_hours_ahead": {"executed_lines": [151, 154, 155, 156, 157, 158, 159, 161, 162, 163, 164, 165], "summary": {"covered_lines": 12, "num_statements": 14, "percent_covered": 85.71428571428571, "percent_covered_display": "86", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [152, 160], "excluded_lines": []}, "normalize_datetime": {"executed_lines": [170, 172, 173], "summary": {"covered_lines": 3, "num_statements": 5, "percent_covered": 60.0, "percent_covered_display": "60", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [171, 174], "excluded_lines": []}, "": {"executed_lines": [1, 3, 5, 6, 7, 9, 11, 14, 41, 84, 133, 146, 168], "summary": {"covered_lines": 12, "num_statements": 12, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [1, 3, 5, 6, 7, 9, 11, 14, 22, 27, 29, 30, 31, 33, 34, 35, 36, 38, 41, 46, 47, 48, 49, 50, 52, 53, 54, 57, 61, 62, 66, 67, 72, 73, 84, 89, 90, 91, 92, 93, 95, 96, 97, 98, 102, 103, 105, 106, 107, 108, 109, 110, 114, 115, 116, 121, 122, 133, 135, 136, 137, 139, 140, 146, 151, 154, 155, 156, 157, 158, 159, 161, 162, 163, 164, 165, 168, 170, 172, 173], "summary": {"covered_lines": 79, "num_statements": 100, "percent_covered": 79.0, "percent_covered_display": "79", "missing_lines": 21, "excluded_lines": 0}, "missing_lines": [23, 24, 25, 55, 56, 58, 59, 63, 64, 99, 100, 111, 112, 138, 141, 142, 143, 152, 160, 171, 174], "excluded_lines": []}}}, "src/accessiweather/weather_client_visualcrossing.py": {"executed_lines": [1, 3, 5, 6, 7, 9, 10, 11, 13, 16, 18, 19, 21, 22, 23, 25, 26, 28, 29, 31, 32, 34, 35, 41, 43, 44, 50, 51, 52, 54, 55], "summary": {"covered_lines": 30, "num_statements": 30, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": [], "functions": {"process_visual_crossing_alerts": {"executed_lines": [18, 19, 21, 22, 23, 25, 26, 28, 29, 31, 32, 34, 35, 41, 43, 44, 50, 51, 52, 54, 55], "summary": {"covered_lines": 21, "num_statements": 21, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "": {"executed_lines": [1, 3, 5, 6, 7, 9, 10, 11, 13, 16], "summary": {"covered_lines": 9, "num_statements": 9, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"": {"executed_lines": [1, 3, 5, 6, 7, 9, 10, 11, 13, 16, 18, 19, 21, 22, 23, 25, 26, 28, 29, 31, 32, 34, 35, 41, 43, 44, 50, 51, 52, 54, 55], "summary": {"covered_lines": 30, "num_statements": 30, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "src/accessiweather/weather_condition_analyzer.py": {"executed_lines": [1, 8, 9, 10, 12, 15, 16, 18, 19, 20, 21, 22, 25, 26, 28, 29, 30, 31, 32, 33, 34, 37, 38, 41, 84, 94, 103, 106, 122, 123, 136, 137, 138, 139, 140, 143, 144, 145, 147, 151, 152, 153, 156, 157, 160, 161, 164, 167, 169, 170, 172, 173, 174, 183, 196, 200, 201, 203, 204, 205, 207, 208, 209, 211, 218, 231, 232, 235, 236, 237, 239, 240, 241, 242, 243, 245, 248, 250, 263, 264, 265, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 278, 280, 293, 299, 301, 314, 317, 320, 321, 322, 323, 324, 327, 330, 331, 332, 333, 334, 335, 336, 337, 339, 341, 355, 359, 360, 363, 364, 365, 368, 369, 370, 373, 374, 377, 378, 381], "summary": {"covered_lines": 124, "num_statements": 131, "percent_covered": 94.65648854961832, "percent_covered_display": "95", "missing_lines": 7, "excluded_lines": 0}, "missing_lines": [197, 233, 238, 244, 246, 325, 356], "excluded_lines": [], "functions": {"WeatherConditionAnalyzer.__init__": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "WeatherConditionAnalyzer.analyze_weather_conditions": {"executed_lines": [122, 123, 136, 137, 138, 139, 140, 143, 144, 145, 147, 151, 152, 153, 156, 157, 160, 161, 164, 167, 169, 170, 172, 173, 174], "summary": {"covered_lines": 25, "num_statements": 25, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "WeatherConditionAnalyzer._analyze_alerts": {"executed_lines": [196, 200, 201, 203, 204, 205, 207, 208, 209, 211], "summary": {"covered_lines": 10, "num_statements": 11, "percent_covered": 90.9090909090909, "percent_covered_display": "91", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [197], "excluded_lines": []}, "WeatherConditionAnalyzer._analyze_temperature": {"executed_lines": [231, 232, 235, 236, 237, 239, 240, 241, 242, 243, 245, 248], "summary": {"covered_lines": 12, "num_statements": 16, "percent_covered": 75.0, "percent_covered_display": "75", "missing_lines": 4, "excluded_lines": 0}, "missing_lines": [233, 238, 244, 246], "excluded_lines": []}, "WeatherConditionAnalyzer._analyze_wind": {"executed_lines": [263, 264, 265, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 278], "summary": {"covered_lines": 14, "num_statements": 14, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "WeatherConditionAnalyzer._map_alert_severity": {"executed_lines": [293, 299], "summary": {"covered_lines": 2, "num_statements": 2, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "WeatherConditionAnalyzer._calculate_priority_score": {"executed_lines": [314, 317, 320, 321, 322, 323, 324, 327, 330, 331, 332, 333, 334, 335, 336, 337, 339], "summary": {"covered_lines": 17, "num_statements": 18, "percent_covered": 94.44444444444444, "percent_covered_display": "94", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [325], "excluded_lines": []}, "WeatherConditionAnalyzer._determine_template": {"executed_lines": [355, 359, 360, 363, 364, 365, 368, 369, 370, 373, 374, 377, 378, 381], "summary": {"covered_lines": 14, "num_statements": 15, "percent_covered": 93.33333333333333, "percent_covered_display": "93", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [356], "excluded_lines": []}, "": {"executed_lines": [1, 8, 9, 10, 12, 15, 16, 18, 19, 20, 21, 22, 25, 26, 28, 29, 30, 31, 32, 33, 34, 37, 38, 41, 84, 94, 103, 106, 183, 218, 250, 280, 301, 341], "summary": {"covered_lines": 30, "num_statements": 30, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}, "classes": {"WeatherSeverity": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "ConditionCategory": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "WeatherConditionAnalyzer": {"executed_lines": [122, 123, 136, 137, 138, 139, 140, 143, 144, 145, 147, 151, 152, 153, 156, 157, 160, 161, 164, 167, 169, 170, 172, 173, 174, 196, 200, 201, 203, 204, 205, 207, 208, 209, 211, 231, 232, 235, 236, 237, 239, 240, 241, 242, 243, 245, 248, 263, 264, 265, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 278, 293, 299, 314, 317, 320, 321, 322, 323, 324, 327, 330, 331, 332, 333, 334, 335, 336, 337, 339, 355, 359, 360, 363, 364, 365, 368, 369, 370, 373, 374, 377, 378, 381], "summary": {"covered_lines": 94, "num_statements": 101, "percent_covered": 93.06930693069307, "percent_covered_display": "93", "missing_lines": 7, "excluded_lines": 0}, "missing_lines": [197, 233, 238, 244, 246, 325, 356], "excluded_lines": []}, "": {"executed_lines": [1, 8, 9, 10, 12, 15, 16, 18, 19, 20, 21, 22, 25, 26, 28, 29, 30, 31, 32, 33, 34, 37, 38, 41, 84, 94, 103, 106, 183, 218, 250, 280, 301, 341], "summary": {"covered_lines": 30, "num_statements": 30, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}}}, "src/accessiweather/weather_history.py": {"executed_lines": [1, 9, 11, 12, 13, 14, 16, 19, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 37, 38, 39, 41, 42, 43, 44, 45, 46, 48, 49, 70, 73, 74, 75, 76, 78, 81, 82, 83, 84, 86, 95, 104, 107, 108, 109, 110, 114, 117, 118, 120, 123, 124, 126, 136, 144, 146, 168, 170, 188, 190, 194, 197, 198, 201, 202, 204, 216, 217, 218, 220, 240, 241, 245, 248, 250, 270, 271, 275, 278, 280, 302, 303, 307, 310], "summary": {"covered_lines": 81, "num_statements": 89, "percent_covered": 91.01123595505618, "percent_covered_display": "91", "missing_lines": 8, "excluded_lines": 2}, "missing_lines": [112, 137, 139, 191, 192, 246, 276, 308], "excluded_lines": [16, 17], "functions": {"WeatherComparison.compare": {"executed_lines": [70, 73, 74, 75, 76, 78, 81, 82, 83, 84, 86], "summary": {"covered_lines": 11, "num_statements": 11, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "WeatherComparison.get_accessible_summary": {"executed_lines": [104, 107, 108, 109, 110, 114, 117, 118, 120], "summary": {"covered_lines": 9, "num_statements": 10, "percent_covered": 90.0, "percent_covered_display": "90", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [112], "excluded_lines": []}, "WeatherHistoryService.__init__": {"executed_lines": [136, 144], "summary": {"covered_lines": 2, "num_statements": 4, "percent_covered": 50.0, "percent_covered_display": "50", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [137, 139], "excluded_lines": []}, "WeatherHistoryService.get_historical_weather": {"executed_lines": [168, 170, 188, 190, 194, 197, 198, 201, 202, 204, 216, 217, 218], "summary": {"covered_lines": 13, "num_statements": 15, "percent_covered": 86.66666666666667, "percent_covered_display": "87", "missing_lines": 2, "excluded_lines": 0}, "missing_lines": [191, 192], "excluded_lines": []}, "WeatherHistoryService.compare_with_yesterday": {"executed_lines": [240, 241, 245, 248], "summary": {"covered_lines": 4, "num_statements": 5, "percent_covered": 80.0, "percent_covered_display": "80", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [246], "excluded_lines": []}, "WeatherHistoryService.compare_with_last_week": {"executed_lines": [270, 271, 275, 278], "summary": {"covered_lines": 4, "num_statements": 5, "percent_covered": 80.0, "percent_covered_display": "80", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [276], "excluded_lines": []}, "WeatherHistoryService.compare_with_date": {"executed_lines": [302, 303, 307, 310], "summary": {"covered_lines": 4, "num_statements": 5, "percent_covered": 80.0, "percent_covered_display": "80", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [308], "excluded_lines": []}, "": {"executed_lines": [1, 9, 11, 12, 13, 14, 16, 19, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 37, 38, 39, 41, 42, 43, 44, 45, 46, 48, 49, 95, 123, 124, 126, 146, 220, 250, 280], "summary": {"covered_lines": 34, "num_statements": 34, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 2}, "missing_lines": [], "excluded_lines": [16, 17]}}, "classes": {"HistoricalWeatherData": {"executed_lines": [], "summary": {"covered_lines": 0, "num_statements": 0, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 0}, "missing_lines": [], "excluded_lines": []}, "WeatherComparison": {"executed_lines": [70, 73, 74, 75, 76, 78, 81, 82, 83, 84, 86, 104, 107, 108, 109, 110, 114, 117, 118, 120], "summary": {"covered_lines": 20, "num_statements": 21, "percent_covered": 95.23809523809524, "percent_covered_display": "95", "missing_lines": 1, "excluded_lines": 0}, "missing_lines": [112], "excluded_lines": []}, "WeatherHistoryService": {"executed_lines": [136, 144, 168, 170, 188, 190, 194, 197, 198, 201, 202, 204, 216, 217, 218, 240, 241, 245, 248, 270, 271, 275, 278, 302, 303, 307, 310], "summary": {"covered_lines": 27, "num_statements": 34, "percent_covered": 79.41176470588235, "percent_covered_display": "79", "missing_lines": 7, "excluded_lines": 0}, "missing_lines": [137, 139, 191, 192, 246, 276, 308], "excluded_lines": []}, "": {"executed_lines": [1, 9, 11, 12, 13, 14, 16, 19, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 37, 38, 39, 41, 42, 43, 44, 45, 46, 48, 49, 95, 123, 124, 126, 146, 220, 250, 280], "summary": {"covered_lines": 34, "num_statements": 34, "percent_covered": 100.0, "percent_covered_display": "100", "missing_lines": 0, "excluded_lines": 2}, "missing_lines": [], "excluded_lines": [16, 17]}}}}, "totals": {"covered_lines": 5213, "num_statements": 6852, "percent_covered": 76.07997664915354, "percent_covered_display": "76", "missing_lines": 1639, "excluded_lines": 112}}