| src/ph/__init__.py |
(no function) |
|
100.0% |
0 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/__main__.py |
(no function) |
|
0.0% |
2 |
2 |
0 |
|
100.0% |
0 |
0 |
|
0.0% |
| src/ph/app.py |
build_parser |
|
89.5% |
19 |
2 |
0 |
|
100.0% |
0 |
0 |
|
89.5% |
| src/ph/app.py |
main |
|
93.9% |
49 |
3 |
0 |
|
87.5% |
16 |
2 |
|
92.3% |
| src/ph/app.py |
_run_search |
|
100.0% |
22 |
0 |
0 |
|
100.0% |
8 |
0 |
|
100.0% |
| src/ph/app.py |
_run_download |
|
100.0% |
27 |
0 |
0 |
|
100.0% |
12 |
0 |
|
100.0% |
| src/ph/app.py |
_print_progress |
|
100.0% |
5 |
0 |
0 |
|
75.0% |
4 |
1 |
|
88.9% |
| src/ph/app.py |
_print_results |
|
100.0% |
4 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/app.py |
_print_table |
|
100.0% |
7 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/app.py |
(no function) |
|
97.0% |
33 |
1 |
0 |
|
50.0% |
2 |
1 |
|
94.3% |
| src/ph/bittorrent.py |
TorrentFileChoice.filename |
|
100.0% |
1 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/bittorrent.py |
TorrentSelectionRequired.__init__ |
|
100.0% |
7 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/bittorrent.py |
BitTorrentSettings.__post_init__ |
|
100.0% |
8 |
0 |
0 |
|
100.0% |
6 |
0 |
|
100.0% |
| src/ph/bittorrent.py |
_BDecoder.__init__ |
|
100.0% |
2 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/bittorrent.py |
_BDecoder.decode |
|
100.0% |
12 |
0 |
0 |
|
100.0% |
10 |
0 |
|
100.0% |
| src/ph/bittorrent.py |
_BDecoder._integer |
|
100.0% |
10 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/bittorrent.py |
_BDecoder._bytes |
|
85.7% |
14 |
2 |
0 |
|
100.0% |
4 |
0 |
|
88.9% |
| src/ph/bittorrent.py |
_BDecoder._list |
|
100.0% |
8 |
0 |
0 |
|
100.0% |
4 |
0 |
|
100.0% |
| src/ph/bittorrent.py |
_BDecoder._dictionary |
|
100.0% |
9 |
0 |
0 |
|
100.0% |
4 |
0 |
|
100.0% |
| src/ph/bittorrent.py |
bdecode |
|
100.0% |
5 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/bittorrent.py |
bencode |
|
100.0% |
9 |
0 |
0 |
|
100.0% |
8 |
0 |
|
100.0% |
| src/ph/bittorrent.py |
parse_torrent |
|
100.0% |
43 |
0 |
0 |
|
95.8% |
24 |
1 |
|
98.5% |
| src/ph/bittorrent.py |
download_torrent_file |
|
94.8% |
58 |
3 |
0 |
|
81.8% |
22 |
4 |
|
91.2% |
| src/ph/bittorrent.py |
download_torrent_file.selected_piece_bounds |
|
100.0% |
3 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/bittorrent.py |
download_torrent_file.fetch_piece |
|
100.0% |
4 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/bittorrent.py |
_select_torrent_file |
|
100.0% |
13 |
0 |
0 |
|
100.0% |
8 |
0 |
|
100.0% |
| src/ph/bittorrent.py |
_normalized_filename |
|
100.0% |
1 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/bittorrent.py |
_torrent_file_candidates |
|
90.0% |
10 |
1 |
0 |
|
75.0% |
4 |
1 |
|
85.7% |
| src/ph/bittorrent.py |
_torrent_file_candidates.choice |
|
100.0% |
2 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/bittorrent.py |
_normalized_title |
|
100.0% |
3 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/bittorrent.py |
discover_peers |
|
100.0% |
14 |
0 |
0 |
|
100.0% |
4 |
0 |
|
100.0% |
| src/ph/bittorrent.py |
discover_peers.announce |
|
88.9% |
9 |
1 |
0 |
|
100.0% |
0 |
0 |
|
88.9% |
| src/ph/bittorrent.py |
_announce_http |
|
100.0% |
8 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/bittorrent.py |
_announce_udp |
|
100.0% |
25 |
0 |
0 |
|
100.0% |
10 |
0 |
|
100.0% |
| src/ph/bittorrent.py |
_parse_tracker_peers |
|
100.0% |
13 |
0 |
0 |
|
100.0% |
10 |
0 |
|
100.0% |
| src/ph/bittorrent.py |
_parse_compact_peers |
|
100.0% |
3 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/bittorrent.py |
_download_piece_from_peers |
|
100.0% |
22 |
0 |
0 |
|
100.0% |
8 |
0 |
|
100.0% |
| src/ph/bittorrent.py |
_download_piece_from_peers.fetch |
|
88.2% |
17 |
2 |
0 |
|
83.3% |
6 |
1 |
|
87.0% |
| src/ph/bittorrent.py |
_peer_connection_slot |
|
81.8% |
22 |
4 |
0 |
|
70.0% |
10 |
3 |
|
78.1% |
| src/ph/bittorrent.py |
_download_piece |
|
93.8% |
64 |
4 |
0 |
|
85.3% |
34 |
5 |
|
90.8% |
| src/ph/bittorrent.py |
_send_piece_request |
|
100.0% |
1 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/bittorrent.py |
_read_peer_message |
|
100.0% |
7 |
0 |
0 |
|
100.0% |
4 |
0 |
|
100.0% |
| src/ph/bittorrent.py |
_read_exact |
|
100.0% |
9 |
0 |
0 |
|
100.0% |
4 |
0 |
|
100.0% |
| src/ph/bittorrent.py |
_read_url |
|
100.0% |
15 |
0 |
0 |
|
100.0% |
4 |
0 |
|
100.0% |
| src/ph/bittorrent.py |
_as_dictionary |
|
100.0% |
3 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/bittorrent.py |
_as_list |
|
100.0% |
3 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/bittorrent.py |
_as_bytes |
|
100.0% |
3 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/bittorrent.py |
_as_positive_integer |
|
100.0% |
3 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/bittorrent.py |
_as_nonnegative_integer |
|
100.0% |
3 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/bittorrent.py |
_decode_path_part |
|
100.0% |
5 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/bittorrent.py |
compact_peers |
|
100.0% |
1 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/bittorrent.py |
_is_usable_peer |
|
100.0% |
5 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/bittorrent.py |
_raise_if_cancelled |
|
100.0% |
2 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/bittorrent.py |
(no function) |
|
100.0% |
103 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/cache_policy.py |
catalogue_ttl_seconds |
|
100.0% |
1 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/cache_policy.py |
(no function) |
|
100.0% |
3 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/compatibility.py |
CompatibilityInfo.short_label |
|
100.0% |
5 |
0 |
0 |
|
100.0% |
4 |
0 |
|
100.0% |
| src/ph/compatibility.py |
CompatibilityInfo.detail_label |
|
100.0% |
4 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/compatibility.py |
normalize_title |
|
100.0% |
4 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/compatibility.py |
normalize_console |
|
100.0% |
2 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/compatibility.py |
is_unsupported_system |
|
100.0% |
2 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/compatibility.py |
filter_supported_results |
|
100.0% |
1 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/compatibility.py |
GameCompatibilityClient.__init__ |
|
100.0% |
6 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/compatibility.py |
GameCompatibilityClient.lookup_many |
|
100.0% |
5 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/compatibility.py |
GameCompatibilityClient.load |
|
100.0% |
4 |
0 |
0 |
|
50.0% |
2 |
1 |
|
83.3% |
| src/ph/compatibility.py |
GameCompatibilityClient.refresh |
|
90.0% |
10 |
1 |
0 |
|
100.0% |
0 |
0 |
|
90.0% |
| src/ph/compatibility.py |
GameCompatibilityClient.cache_age_seconds |
|
100.0% |
2 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/compatibility.py |
GameCompatibilityClient.cache_is_stale |
|
100.0% |
2 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/compatibility.py |
GameCompatibilityClient._result_console |
|
100.0% |
2 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/compatibility.py |
GameCompatibilityClient._lookup |
|
100.0% |
14 |
0 |
0 |
|
100.0% |
6 |
0 |
|
100.0% |
| src/ph/compatibility.py |
GameCompatibilityClient._load_game_index |
|
100.0% |
14 |
0 |
0 |
|
100.0% |
6 |
0 |
|
100.0% |
| src/ph/compatibility.py |
GameCompatibilityClient._download_game_index |
|
100.0% |
8 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/compatibility.py |
GameCompatibilityClient._same_origin |
|
100.0% |
3 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/compatibility.py |
GameCompatibilityClient._fetch_text |
|
100.0% |
6 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/compatibility.py |
GameCompatibilityClient._fetch_optional |
|
100.0% |
4 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/compatibility.py |
GameCompatibilityClient._read_cache |
|
100.0% |
2 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/compatibility.py |
GameCompatibilityClient._read_cache_payload |
|
100.0% |
10 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/compatibility.py |
GameCompatibilityClient._write_cache |
|
100.0% |
11 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/compatibility.py |
parse_game_index |
|
100.0% |
12 |
0 |
0 |
|
100.0% |
4 |
0 |
|
100.0% |
| src/ph/compatibility.py |
title_match_score |
|
100.0% |
20 |
0 |
0 |
|
100.0% |
6 |
0 |
|
100.0% |
| src/ph/compatibility.py |
_core_title_tokens |
|
100.0% |
15 |
0 |
0 |
|
100.0% |
8 |
0 |
|
100.0% |
| src/ph/compatibility.py |
_build_match_indexes |
|
100.0% |
6 |
0 |
0 |
|
100.0% |
4 |
0 |
|
100.0% |
| src/ph/compatibility.py |
_title_match_keys |
|
100.0% |
6 |
0 |
0 |
|
50.0% |
2 |
1 |
|
87.5% |
| src/ph/compatibility.py |
(no function) |
|
100.0% |
69 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/config.py |
Config.from_environment |
|
100.0% |
20 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/config.py |
(no function) |
|
100.0% |
23 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/download_queue.py |
RateLimitRetrySettings.__post_init__ |
|
100.0% |
6 |
0 |
0 |
|
100.0% |
6 |
0 |
|
100.0% |
| src/ph/download_queue.py |
_QueuedDownload.snapshot |
|
100.0% |
1 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/download_queue.py |
DownloadQueue.__init__ |
|
100.0% |
27 |
0 |
0 |
|
100.0% |
8 |
0 |
|
100.0% |
| src/ph/download_queue.py |
DownloadQueue.enqueue |
|
100.0% |
11 |
0 |
0 |
|
100.0% |
4 |
0 |
|
100.0% |
| src/ph/download_queue.py |
DownloadQueue.jobs |
|
100.0% |
2 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/download_queue.py |
DownloadQueue.find |
|
100.0% |
3 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/download_queue.py |
DownloadQueue.dismiss_completed |
|
100.0% |
9 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/download_queue.py |
DownloadQueue.pause |
|
88.2% |
17 |
2 |
0 |
|
83.3% |
6 |
1 |
|
87.0% |
| src/ph/download_queue.py |
DownloadQueue.resume |
|
100.0% |
8 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/download_queue.py |
DownloadQueue.retry |
|
100.0% |
8 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/download_queue.py |
DownloadQueue.cancel |
|
88.9% |
18 |
2 |
0 |
|
83.3% |
6 |
1 |
|
87.5% |
| src/ph/download_queue.py |
DownloadQueue.choose_torrent_file |
|
100.0% |
18 |
0 |
0 |
|
100.0% |
8 |
0 |
|
100.0% |
| src/ph/download_queue.py |
DownloadQueue.refresh_required |
|
100.0% |
2 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/download_queue.py |
DownloadQueue.update_retry_settings |
|
0.0% |
2 |
2 |
0 |
|
100.0% |
0 |
0 |
|
0.0% |
| src/ph/download_queue.py |
DownloadQueue.mark_refreshed |
|
100.0% |
3 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/download_queue.py |
DownloadQueue.shutdown |
|
95.0% |
20 |
1 |
0 |
|
90.0% |
10 |
1 |
|
93.3% |
| src/ph/download_queue.py |
DownloadQueue._submit_locked |
|
100.0% |
3 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/download_queue.py |
DownloadQueue._run |
|
91.1% |
45 |
4 |
4 |
|
66.7% |
12 |
4 |
|
86.0% |
| src/ph/download_queue.py |
DownloadQueue._progress |
|
90.9% |
11 |
1 |
0 |
|
75.0% |
4 |
1 |
|
86.7% |
| src/ph/download_queue.py |
DownloadQueue._finish_interrupted |
|
92.9% |
14 |
1 |
0 |
|
83.3% |
6 |
1 |
|
90.0% |
| src/ph/download_queue.py |
DownloadQueue._finish_failed |
|
90.0% |
10 |
1 |
0 |
|
50.0% |
2 |
1 |
|
83.3% |
| src/ph/download_queue.py |
DownloadQueue._finish_rate_limited |
|
92.9% |
14 |
1 |
0 |
|
50.0% |
4 |
2 |
|
83.3% |
| src/ph/download_queue.py |
DownloadQueue._schedule_rate_limit_retry_locked |
|
100.0% |
6 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/download_queue.py |
DownloadQueue._retry_rate_limited |
|
88.9% |
9 |
1 |
0 |
|
50.0% |
2 |
1 |
|
81.8% |
| src/ph/download_queue.py |
DownloadQueue._cancel_retry_timer_locked |
|
100.0% |
3 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/download_queue.py |
DownloadQueue._reset_for_run |
|
100.0% |
11 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/download_queue.py |
DownloadQueue._remove_staging |
|
66.7% |
3 |
1 |
0 |
|
50.0% |
2 |
1 |
|
60.0% |
| src/ph/download_queue.py |
DownloadQueue._load |
|
100.0% |
27 |
0 |
0 |
|
90.0% |
10 |
1 |
|
97.3% |
| src/ph/download_queue.py |
DownloadQueue._save_locked |
|
70.0% |
10 |
3 |
0 |
|
100.0% |
0 |
0 |
|
70.0% |
| src/ph/download_queue.py |
_job_to_json |
|
100.0% |
1 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/download_queue.py |
_job_from_json |
|
100.0% |
7 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/download_queue.py |
_rate_limit_retry_delay |
|
100.0% |
7 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/download_queue.py |
_media_from_json |
|
100.0% |
3 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/download_queue.py |
_choice_from_json |
|
100.0% |
2 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/download_queue.py |
_installed_game_to_json |
|
100.0% |
3 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/download_queue.py |
_installed_game_from_json |
|
50.0% |
4 |
2 |
0 |
|
50.0% |
2 |
1 |
|
50.0% |
| src/ph/download_queue.py |
_dictionary |
|
66.7% |
3 |
1 |
0 |
|
50.0% |
2 |
1 |
|
60.0% |
| src/ph/download_queue.py |
_list |
|
66.7% |
3 |
1 |
0 |
|
50.0% |
2 |
1 |
|
60.0% |
| src/ph/download_queue.py |
_string |
|
66.7% |
3 |
1 |
0 |
|
50.0% |
2 |
1 |
|
60.0% |
| src/ph/download_queue.py |
_optional_string |
|
100.0% |
3 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/download_queue.py |
_integer |
|
66.7% |
3 |
1 |
0 |
|
50.0% |
2 |
1 |
|
60.0% |
| src/ph/download_queue.py |
_optional_integer |
|
100.0% |
3 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/download_queue.py |
_number |
|
66.7% |
3 |
1 |
0 |
|
50.0% |
2 |
1 |
|
60.0% |
| src/ph/download_queue.py |
(no function) |
|
100.0% |
112 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/downloader.py |
DownloadRateLimited.__init__ |
|
100.0% |
2 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/downloader.py |
DownloadSelectionRequired.__init__ |
|
100.0% |
6 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/downloader.py |
_safe_filename |
|
100.0% |
3 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/downloader.py |
_filename_from_headers |
|
100.0% |
5 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/downloader.py |
download_files |
|
100.0% |
31 |
0 |
0 |
|
100.0% |
8 |
0 |
|
100.0% |
| src/ph/downloader.py |
_as_media_download |
|
100.0% |
1 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/downloader.py |
_download_with_urllib |
|
96.9% |
65 |
2 |
0 |
|
86.4% |
22 |
3 |
|
94.3% |
| src/ph/downloader.py |
_resumable_partial |
|
100.0% |
2 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/downloader.py |
_content_range_total |
|
100.0% |
6 |
0 |
0 |
|
100.0% |
4 |
0 |
|
100.0% |
| src/ph/downloader.py |
_retry_after_seconds |
|
100.0% |
12 |
0 |
0 |
|
83.3% |
6 |
1 |
|
94.4% |
| src/ph/downloader.py |
_raise_if_cancelled |
|
100.0% |
2 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/downloader.py |
_unique_download_path |
|
100.0% |
12 |
0 |
0 |
|
100.0% |
4 |
0 |
|
100.0% |
| src/ph/downloader.py |
(no function) |
|
100.0% |
34 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/frontend.py |
request_game_frontend_refresh |
|
100.0% |
11 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/frontend.py |
(no function) |
|
100.0% |
6 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/gamepad.py |
LinuxJoystick.open_first |
|
0.0% |
8 |
8 |
0 |
|
0.0% |
2 |
0 |
|
0.0% |
| src/ph/gamepad.py |
LinuxJoystick._read_button_codes |
|
77.8% |
9 |
2 |
0 |
|
100.0% |
0 |
0 |
|
77.8% |
| src/ph/gamepad.py |
LinuxJoystick.poll |
|
33.3% |
15 |
10 |
0 |
|
33.3% |
6 |
2 |
|
33.3% |
| src/ph/gamepad.py |
LinuxJoystick.decode_event |
|
96.7% |
30 |
1 |
0 |
|
88.9% |
18 |
2 |
|
93.8% |
| src/ph/gamepad.py |
LinuxJoystick._button_action |
|
100.0% |
9 |
0 |
0 |
|
83.3% |
6 |
1 |
|
93.3% |
| src/ph/gamepad.py |
LinuxJoystick._axis_action |
|
100.0% |
7 |
0 |
0 |
|
100.0% |
6 |
0 |
|
100.0% |
| src/ph/gamepad.py |
LinuxJoystick._start_repeat |
|
100.0% |
2 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/gamepad.py |
LinuxJoystick._stop_repeat |
|
100.0% |
3 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/gamepad.py |
LinuxJoystick._poll_repeat |
|
100.0% |
4 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/gamepad.py |
LinuxJoystick.close |
|
80.0% |
5 |
1 |
0 |
|
50.0% |
2 |
1 |
|
71.4% |
| src/ph/gamepad.py |
(no function) |
|
100.0% |
74 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/hardware.py |
HardwareProfile.display_resolution |
|
100.0% |
3 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/hardware.py |
detect_hardware_profile |
|
100.0% |
15 |
0 |
0 |
|
100.0% |
4 |
0 |
|
100.0% |
| src/ph/hardware.py |
_find_input_nodes |
|
83.3% |
12 |
2 |
0 |
|
100.0% |
4 |
0 |
|
87.5% |
| src/ph/hardware.py |
_find_gpio_keys |
|
86.7% |
15 |
2 |
0 |
|
100.0% |
6 |
0 |
|
90.5% |
| src/ph/hardware.py |
_detect_display |
|
92.9% |
14 |
1 |
0 |
|
80.0% |
10 |
2 |
|
87.5% |
| src/ph/hardware.py |
_parse_resolution |
|
72.7% |
11 |
3 |
0 |
|
75.0% |
4 |
1 |
|
73.3% |
| src/ph/hardware.py |
_read_bytes |
|
100.0% |
5 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/hardware.py |
_read_strings |
|
100.0% |
1 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/hardware.py |
_read_text |
|
100.0% |
1 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/hardware.py |
_read_u32 |
|
100.0% |
4 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/hardware.py |
_relative_node |
|
100.0% |
2 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/hardware.py |
(no function) |
|
100.0% |
34 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/i18n.py |
_load_catalogue |
|
66.7% |
18 |
6 |
0 |
|
62.5% |
8 |
3 |
|
65.4% |
| src/ph/i18n.py |
normalize_language |
|
100.0% |
6 |
0 |
0 |
|
100.0% |
4 |
0 |
|
100.0% |
| src/ph/i18n.py |
language_name |
|
100.0% |
1 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/i18n.py |
translate |
|
100.0% |
2 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/i18n.py |
missing_translation_keys |
|
100.0% |
1 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/i18n.py |
_placeholder_fields |
|
100.0% |
2 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/i18n.py |
mismatched_placeholder_keys |
|
100.0% |
2 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/i18n.py |
(no function) |
|
100.0% |
20 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/library.py |
scan_library |
|
100.0% |
26 |
0 |
0 |
|
100.0% |
16 |
0 |
|
100.0% |
| src/ph/library.py |
platforms_with_installed_games |
|
100.0% |
5 |
0 |
0 |
|
100.0% |
4 |
0 |
|
100.0% |
| src/ph/library.py |
search_title |
|
100.0% |
4 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/library.py |
delete_game |
|
100.0% |
12 |
0 |
0 |
|
100.0% |
4 |
0 |
|
100.0% |
| src/ph/library.py |
replace_game |
|
93.1% |
29 |
2 |
0 |
|
87.5% |
8 |
1 |
|
91.9% |
| src/ph/library.py |
_is_game_candidate |
|
100.0% |
5 |
0 |
0 |
|
100.0% |
4 |
0 |
|
100.0% |
| src/ph/library.py |
_iter_game_candidates |
|
100.0% |
7 |
0 |
0 |
|
83.3% |
6 |
1 |
|
92.3% |
| src/ph/library.py |
_referenced_files |
|
100.0% |
20 |
0 |
0 |
|
87.5% |
8 |
1 |
|
96.4% |
| src/ph/library.py |
(no function) |
|
100.0% |
20 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/logging_config.py |
configure_logging |
|
100.0% |
1 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/logging_config.py |
configure_logging_with_fallback |
|
100.0% |
33 |
0 |
0 |
|
100.0% |
12 |
0 |
|
100.0% |
| src/ph/logging_config.py |
active_log_file |
|
100.0% |
5 |
0 |
0 |
|
100.0% |
4 |
0 |
|
100.0% |
| src/ph/logging_config.py |
(no function) |
|
100.0% |
10 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/minerva_store.py |
_DirectoryParser.__init__ |
|
100.0% |
6 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/minerva_store.py |
_DirectoryParser.handle_starttag |
|
100.0% |
10 |
0 |
0 |
|
87.5% |
8 |
1 |
|
94.4% |
| src/ph/minerva_store.py |
_DirectoryParser.handle_endtag |
|
100.0% |
16 |
0 |
0 |
|
91.7% |
12 |
1 |
|
96.4% |
| src/ph/minerva_store.py |
_DirectoryParser.handle_data |
|
100.0% |
2 |
0 |
0 |
|
50.0% |
2 |
1 |
|
75.0% |
| src/ph/minerva_store.py |
parse_directory |
|
100.0% |
3 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/minerva_store.py |
_title_metadata |
|
100.0% |
6 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/minerva_store.py |
MinervaStore.__init__ |
|
100.0% |
12 |
0 |
0 |
|
100.0% |
4 |
0 |
|
100.0% |
| src/ph/minerva_store.py |
MinervaStore.base_url |
|
100.0% |
1 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/minerva_store.py |
MinervaStore.download_referrer |
|
100.0% |
1 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/minerva_store.py |
MinervaStore.platform_code |
|
100.0% |
3 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/minerva_store.py |
MinervaStore.supports_platform |
|
100.0% |
1 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/minerva_store.py |
MinervaStore.headers |
|
100.0% |
1 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/minerva_store.py |
MinervaStore.search |
|
100.0% |
3 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/minerva_store.py |
MinervaStore._fetch_catalogue |
|
100.0% |
15 |
0 |
0 |
|
100.0% |
10 |
0 |
|
100.0% |
| src/ph/minerva_store.py |
MinervaStore._fetch_catalogue.fetch |
|
100.0% |
1 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/minerva_store.py |
MinervaStore.validate_detail_url |
|
100.0% |
2 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/minerva_store.py |
MinervaStore.retrieve_download_url |
|
100.0% |
3 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/minerva_store.py |
MinervaStore.download_request |
|
100.0% |
3 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/minerva_store.py |
MinervaStore._download_metadata |
|
100.0% |
8 |
0 |
0 |
|
100.0% |
4 |
0 |
|
100.0% |
| src/ph/minerva_store.py |
MinervaStore._detail_target |
|
100.0% |
17 |
0 |
0 |
|
100.0% |
10 |
0 |
|
100.0% |
| src/ph/minerva_store.py |
MinervaStore._entries |
|
100.0% |
9 |
0 |
0 |
|
100.0% |
4 |
0 |
|
100.0% |
| src/ph/minerva_store.py |
MinervaStore._get_text |
|
100.0% |
17 |
0 |
0 |
|
100.0% |
6 |
0 |
|
100.0% |
| src/ph/minerva_store.py |
(no function) |
|
100.0% |
52 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/models.py |
Platform.rom_folders |
|
100.0% |
3 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/models.py |
(no function) |
|
100.0% |
24 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/organizer.py |
detect_roms_directories |
|
66.7% |
3 |
1 |
0 |
|
50.0% |
2 |
1 |
|
60.0% |
| src/ph/organizer.py |
available_roms_directories |
|
100.0% |
2 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/organizer.py |
detect_roms_directory |
|
100.0% |
2 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/organizer.py |
install_downloads |
|
92.0% |
25 |
2 |
0 |
|
100.0% |
10 |
0 |
|
94.3% |
| src/ph/organizer.py |
install_bundled_bios |
|
83.3% |
24 |
4 |
0 |
|
100.0% |
8 |
0 |
|
87.5% |
| src/ph/organizer.py |
_bundled_bios_members |
|
90.5% |
21 |
2 |
0 |
|
83.3% |
12 |
2 |
|
87.9% |
| src/ph/organizer.py |
_bios_destinations |
|
100.0% |
9 |
0 |
0 |
|
100.0% |
4 |
0 |
|
100.0% |
| src/ph/organizer.py |
unique_destination |
|
100.0% |
10 |
0 |
0 |
|
100.0% |
4 |
0 |
|
100.0% |
| src/ph/organizer.py |
(no function) |
|
100.0% |
24 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/platforms.py |
_platform |
|
100.0% |
1 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/platforms.py |
discover_platforms |
|
87.5% |
16 |
2 |
0 |
|
100.0% |
8 |
0 |
|
91.7% |
| src/ph/platforms.py |
_build_aliases |
|
100.0% |
7 |
0 |
0 |
|
100.0% |
6 |
0 |
|
100.0% |
| src/ph/platforms.py |
platform_catalogue |
|
100.0% |
3 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/platforms.py |
resolve_platform |
|
75.0% |
4 |
1 |
0 |
|
50.0% |
2 |
1 |
|
66.7% |
| src/ph/platforms.py |
(no function) |
|
100.0% |
13 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/preferences.py |
preference_path |
|
100.0% |
1 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/preferences.py |
load_preferences |
|
100.0% |
46 |
0 |
0 |
|
100.0% |
14 |
0 |
|
100.0% |
| src/ph/preferences.py |
save_preferences |
|
100.0% |
9 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/preferences.py |
_integer_setting |
|
100.0% |
2 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/preferences.py |
_float_setting |
|
100.0% |
4 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/preferences.py |
_optional_float_setting |
|
100.0% |
4 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/preferences.py |
_relative_directory |
|
100.0% |
6 |
0 |
0 |
|
100.0% |
4 |
0 |
|
100.0% |
| src/ph/preferences.py |
_store_rom_mappings |
|
90.0% |
20 |
2 |
0 |
|
81.2% |
16 |
3 |
|
86.1% |
| src/ph/preferences.py |
(no function) |
|
100.0% |
33 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/retrobios.py |
RetroBiosCatalog.__init__ |
|
100.0% |
6 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/retrobios.py |
RetroBiosCatalog.from_json |
|
100.0% |
20 |
0 |
0 |
|
100.0% |
10 |
0 |
|
100.0% |
| src/ph/retrobios.py |
RetroBiosCatalog.cache_age_seconds |
|
100.0% |
1 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/retrobios.py |
RetroBiosCatalog.cache_is_stale |
|
100.0% |
2 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/retrobios.py |
RetroBiosCatalog.system_for |
|
100.0% |
2 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/retrobios.py |
RetroBiosCatalog.requirements_for |
|
100.0% |
15 |
0 |
0 |
|
100.0% |
8 |
0 |
|
100.0% |
| src/ph/retrobios.py |
RetroBiosCatalog.source_url |
|
100.0% |
3 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/retrobios.py |
RetroBiosRepository.__init__ |
|
100.0% |
3 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/retrobios.py |
RetroBiosRepository.load |
|
100.0% |
7 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/retrobios.py |
RetroBiosRepository.ensure |
|
100.0% |
2 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/retrobios.py |
RetroBiosRepository.update |
|
93.0% |
43 |
3 |
0 |
|
75.0% |
16 |
2 |
|
88.1% |
| src/ph/retrobios.py |
RetroBiosRepository.update.download_profile |
|
100.0% |
2 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/retrobios.py |
_download_yaml |
|
87.5% |
8 |
1 |
0 |
|
50.0% |
2 |
1 |
|
80.0% |
| src/ph/retrobios.py |
_download_json |
|
87.5% |
8 |
1 |
0 |
|
50.0% |
2 |
1 |
|
80.0% |
| src/ph/retrobios.py |
_download_bytes |
|
100.0% |
15 |
0 |
0 |
|
100.0% |
6 |
0 |
|
100.0% |
| src/ph/retrobios.py |
_build_manifest |
|
100.0% |
20 |
0 |
0 |
|
100.0% |
10 |
0 |
|
100.0% |
| src/ph/retrobios.py |
_profile_files |
|
100.0% |
4 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/retrobios.py |
_database_file |
|
100.0% |
20 |
0 |
0 |
|
91.7% |
12 |
1 |
|
96.9% |
| src/ph/retrobios.py |
audit_bios |
|
100.0% |
12 |
0 |
0 |
|
100.0% |
6 |
0 |
|
100.0% |
| src/ph/retrobios.py |
audit_bios_roots |
|
100.0% |
8 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/retrobios.py |
bios_destinations |
|
100.0% |
12 |
0 |
0 |
|
100.0% |
6 |
0 |
|
100.0% |
| src/ph/retrobios.py |
verify_bios_file |
|
100.0% |
13 |
0 |
0 |
|
100.0% |
6 |
0 |
|
100.0% |
| src/ph/retrobios.py |
install_bios |
|
98.3% |
59 |
1 |
0 |
|
95.5% |
22 |
1 |
|
97.5% |
| src/ph/retrobios.py |
unresolved |
|
100.0% |
1 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/retrobios.py |
_parse_requirement |
|
100.0% |
9 |
0 |
0 |
|
100.0% |
4 |
0 |
|
100.0% |
| src/ph/retrobios.py |
_optional_string |
|
100.0% |
1 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/retrobios.py |
_optional_float |
|
100.0% |
1 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/retrobios.py |
_strongest_checksum |
|
100.0% |
7 |
0 |
0 |
|
100.0% |
6 |
0 |
|
100.0% |
| src/ph/retrobios.py |
_normalize_region |
|
100.0% |
10 |
0 |
0 |
|
100.0% |
8 |
0 |
|
100.0% |
| src/ph/retrobios.py |
(no function) |
|
100.0% |
76 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/store.py |
StoreError.__init__ |
|
100.0% |
2 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/store.py |
GameStore._configure_catalogue_cache |
|
100.0% |
1 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/store.py |
GameStore._load_catalogue |
|
100.0% |
5 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/store.py |
GameStore._load_catalogue.fetcher |
|
100.0% |
1 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/store.py |
GameStore._fetch_catalogue |
|
100.0% |
1 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/store.py |
GameStore.refresh_catalogue |
|
100.0% |
1 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/store.py |
GameStore.catalogue_cache_status |
|
100.0% |
4 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/store.py |
GameStore.catalogue_cache_file_count |
|
100.0% |
4 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/store.py |
GameStore.set_catalogue_ttl |
|
100.0% |
3 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/store.py |
GameStore.set_network_timeout |
|
100.0% |
1 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/store.py |
GameStore.base_url |
|
100.0% |
0 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/store.py |
GameStore.download_referrer |
|
100.0% |
0 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/store.py |
GameStore.platform_code |
|
100.0% |
0 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/store.py |
GameStore.supports_platform |
|
100.0% |
1 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/store.py |
GameStore.search |
|
100.0% |
0 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/store.py |
GameStore.validate_detail_url |
|
100.0% |
0 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/store.py |
GameStore.retrieve_download_url |
|
100.0% |
0 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/store.py |
GameStore.download_request |
|
100.0% |
1 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/store.py |
(no function) |
|
100.0% |
35 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/store_cache.py |
GameCatalogueCache.__init__ |
|
100.0% |
4 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/store_cache.py |
GameCatalogueCache._is_stale |
|
100.0% |
1 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/store_cache.py |
GameCatalogueCache.path_for |
|
100.0% |
2 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/store_cache.py |
GameCatalogueCache.status |
|
100.0% |
5 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/store_cache.py |
GameCatalogueCache.cached_files |
|
100.0% |
4 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/store_cache.py |
GameCatalogueCache.get_or_fetch |
|
100.0% |
14 |
0 |
0 |
|
100.0% |
4 |
0 |
|
100.0% |
| src/ph/store_cache.py |
GameCatalogueCache._read |
|
100.0% |
9 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/store_cache.py |
GameCatalogueCache._write |
|
100.0% |
11 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/store_cache.py |
_parse_result |
|
100.0% |
4 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/store_cache.py |
_required_string |
|
100.0% |
4 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/store_cache.py |
(no function) |
|
100.0% |
30 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/store_catalog.py |
StoreCatalog.from_config |
|
100.0% |
3 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/store_catalog.py |
StoreCatalog.find |
|
100.0% |
2 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/store_catalog.py |
(no function) |
|
100.0% |
12 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/targets.py |
LinuxTarget.release_asset_name |
|
100.0% |
1 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/targets.py |
resolve_target |
|
100.0% |
6 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/targets.py |
(no function) |
|
100.0% |
11 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/translation_keys.py |
(no function) |
|
100.0% |
383 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/translations/__init__.py |
(no function) |
|
100.0% |
0 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/tui.py |
_keyboard_rows |
|
100.0% |
13 |
0 |
0 |
|
100.0% |
10 |
0 |
|
100.0% |
| src/ph/tui.py |
_keyboard_key_center |
|
100.0% |
2 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/tui.py |
_nearest_keyboard_key |
|
100.0% |
1 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/tui.py |
_fit_column |
|
100.0% |
5 |
0 |
0 |
|
100.0% |
4 |
0 |
|
100.0% |
| src/ph/tui.py |
_marquee_text |
|
100.0% |
8 |
0 |
0 |
|
100.0% |
4 |
0 |
|
100.0% |
| src/ph/tui.py |
_visible_menu_label |
|
100.0% |
7 |
0 |
0 |
|
100.0% |
4 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui.__init__ |
|
100.0% |
23 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._t |
|
100.0% |
2 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._setup_screen |
|
100.0% |
17 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui.run |
|
93.0% |
43 |
3 |
0 |
|
85.3% |
34 |
5 |
|
89.6% |
| src/ph/tui.py |
DownloaderTui._download_queue_menu_label |
|
100.0% |
1 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._search_flow |
|
100.0% |
10 |
0 |
0 |
|
100.0% |
4 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._search_platform_flow |
|
100.0% |
23 |
0 |
0 |
|
100.0% |
4 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._catalog_progress |
|
100.0% |
2 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._results_flow |
|
100.0% |
34 |
0 |
0 |
|
83.3% |
18 |
3 |
|
94.2% |
| src/ph/tui.py |
DownloaderTui._direct_download_flow |
|
100.0% |
11 |
0 |
0 |
|
100.0% |
6 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._download_detail |
|
100.0% |
18 |
0 |
0 |
|
100.0% |
4 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._handle_download_completions |
|
100.0% |
12 |
0 |
0 |
|
100.0% |
4 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._download_queue_screen |
|
100.0% |
13 |
0 |
0 |
|
100.0% |
6 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._download_queue_screen.menu_options |
|
100.0% |
5 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._download_job_fields |
|
100.0% |
8 |
0 |
0 |
|
100.0% |
4 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._download_job_label |
|
100.0% |
6 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._download_job_labels |
|
91.7% |
12 |
1 |
0 |
|
75.0% |
4 |
1 |
|
87.5% |
| src/ph/tui.py |
DownloaderTui._download_job_controls |
|
97.6% |
42 |
1 |
0 |
|
86.7% |
30 |
4 |
|
93.1% |
| src/ph/tui.py |
DownloaderTui._download_progress_detail |
|
100.0% |
5 |
0 |
0 |
|
100.0% |
4 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._confirm_download_cancel |
|
100.0% |
2 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._choose_queued_torrent_file |
|
100.0% |
2 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._manage_library_flow |
|
93.8% |
16 |
1 |
0 |
|
87.5% |
8 |
1 |
|
91.7% |
| src/ph/tui.py |
DownloaderTui._manage_platform_library |
|
100.0% |
12 |
0 |
0 |
|
75.0% |
8 |
2 |
|
90.0% |
| src/ph/tui.py |
DownloaderTui._manage_game |
|
100.0% |
7 |
0 |
0 |
|
100.0% |
4 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._confirm_delete |
|
100.0% |
13 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._update_game |
|
100.0% |
32 |
0 |
0 |
|
100.0% |
10 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._choose_roms_directory |
|
100.0% |
4 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._preferred_roms_directory |
|
100.0% |
5 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._choose_store |
|
100.0% |
3 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._store_for_operation |
|
100.0% |
3 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._configure_store |
|
100.0% |
21 |
0 |
0 |
|
100.0% |
4 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._settings_screen |
|
98.0% |
50 |
1 |
0 |
|
94.7% |
38 |
2 |
|
96.6% |
| src/ph/tui.py |
DownloaderTui._configure_default_roms_directory |
|
100.0% |
6 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._platform_for_store |
|
100.0% |
4 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._rom_folder_choices |
|
100.0% |
5 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._console_folder_mappings_screen |
|
100.0% |
22 |
0 |
0 |
|
100.0% |
10 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._configure_bios_directory |
|
100.0% |
7 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._configure_language |
|
80.0% |
5 |
1 |
0 |
|
50.0% |
2 |
1 |
|
71.4% |
| src/ph/tui.py |
DownloaderTui._edit_setting |
|
100.0% |
5 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._configure_catalogue_ttl |
|
76.9% |
13 |
3 |
0 |
|
100.0% |
4 |
0 |
|
82.4% |
| src/ph/tui.py |
DownloaderTui._configure_max_concurrent_downloads |
|
100.0% |
13 |
0 |
0 |
|
100.0% |
4 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._configure_network_timeout |
|
100.0% |
13 |
0 |
0 |
|
100.0% |
4 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._rate_limit_retry_settings_screen |
|
90.6% |
32 |
3 |
0 |
|
71.4% |
14 |
4 |
|
84.8% |
| src/ph/tui.py |
DownloaderTui._configure_log_level |
|
100.0% |
6 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._configure_file_logging |
|
100.0% |
5 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._save_runtime_preferences |
|
100.0% |
10 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._apply_runtime_preferences |
|
100.0% |
14 |
0 |
0 |
|
100.0% |
6 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._file_logging_enabled |
|
100.0% |
3 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._apply_logging_preferences |
|
100.0% |
4 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._file_logging_message |
|
100.0% |
4 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._refresh_store_catalogue |
|
96.4% |
28 |
1 |
0 |
|
90.0% |
10 |
1 |
|
94.7% |
| src/ph/tui.py |
DownloaderTui._store_cache_status_label |
|
66.7% |
3 |
1 |
0 |
|
50.0% |
2 |
1 |
|
60.0% |
| src/ph/tui.py |
DownloaderTui._store_description |
|
100.0% |
2 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._compatibility_label |
|
90.0% |
10 |
1 |
0 |
|
83.3% |
6 |
1 |
|
87.5% |
| src/ph/tui.py |
DownloaderTui._bios_state_label |
|
100.0% |
1 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._progress_label |
|
100.0% |
2 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._retrobios_cache_label |
|
100.0% |
10 |
0 |
0 |
|
100.0% |
4 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._compatibility_cache_label |
|
100.0% |
6 |
0 |
0 |
|
100.0% |
4 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._update_compatibility_catalogue |
|
100.0% |
10 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._load_retrobios_catalogue |
|
59.1% |
22 |
9 |
0 |
|
50.0% |
6 |
1 |
|
57.1% |
| src/ph/tui.py |
DownloaderTui._load_retrobios_catalogue.report |
|
0.0% |
2 |
2 |
0 |
|
100.0% |
0 |
0 |
|
0.0% |
| src/ph/tui.py |
DownloaderTui._update_retrobios_catalogue |
|
100.0% |
12 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._bios_search_flow |
|
100.0% |
58 |
0 |
0 |
|
96.4% |
28 |
1 |
|
98.8% |
| src/ph/tui.py |
DownloaderTui._bios_followup |
|
100.0% |
24 |
0 |
0 |
|
100.0% |
8 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._confirm_retrobios_download |
|
100.0% |
6 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._install_bios_checks |
|
71.0% |
31 |
9 |
0 |
|
50.0% |
6 |
1 |
|
67.6% |
| src/ph/tui.py |
DownloaderTui._install_bios_checks.report |
|
0.0% |
2 |
2 |
0 |
|
100.0% |
0 |
0 |
|
0.0% |
| src/ph/tui.py |
DownloaderTui._install_bios_checks.install_selected |
|
100.0% |
5 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._bios_check_label |
|
100.0% |
4 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._minerva_bittorrent_settings_screen |
|
96.6% |
29 |
1 |
0 |
|
80.0% |
10 |
2 |
|
92.3% |
| src/ph/tui.py |
DownloaderTui._save_minerva_bittorrent_settings |
|
100.0% |
10 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._format_bittorrent_setting |
|
100.0% |
2 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._application_update_flow |
|
100.0% |
30 |
0 |
0 |
|
100.0% |
6 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._stage_application_update |
|
42.1% |
19 |
11 |
0 |
|
16.7% |
6 |
1 |
|
36.0% |
| src/ph/tui.py |
DownloaderTui._stage_application_update.report |
|
100.0% |
2 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._confirm_exit |
|
100.0% |
2 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._choose_from_roots |
|
100.0% |
14 |
0 |
0 |
|
100.0% |
10 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._progress |
|
100.0% |
7 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._download_media |
|
95.1% |
41 |
2 |
0 |
|
78.6% |
14 |
3 |
|
90.9% |
| src/ph/tui.py |
DownloaderTui._download_media.report |
|
100.0% |
2 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._choose_torrent_file |
|
100.0% |
9 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._format_file_size |
|
100.0% |
7 |
0 |
0 |
|
100.0% |
4 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._status_screen |
|
100.0% |
11 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._on_screen_keyboard |
|
100.0% |
78 |
0 |
0 |
|
100.0% |
44 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._menu |
|
100.0% |
55 |
0 |
0 |
|
96.2% |
26 |
1 |
|
98.8% |
| src/ph/tui.py |
DownloaderTui._draw_message |
|
0.0% |
14 |
14 |
0 |
|
0.0% |
8 |
0 |
|
0.0% |
| src/ph/tui.py |
DownloaderTui._get_input |
|
100.0% |
4 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._get_input_until |
|
100.0% |
6 |
0 |
0 |
|
75.0% |
4 |
1 |
|
90.0% |
| src/ph/tui.py |
DownloaderTui._poll_input |
|
100.0% |
6 |
0 |
0 |
|
75.0% |
4 |
1 |
|
90.0% |
| src/ph/tui.py |
DownloaderTui._operation_error |
|
100.0% |
1 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._error |
|
0.0% |
1 |
1 |
0 |
|
100.0% |
0 |
0 |
|
0.0% |
| src/ph/tui.py |
DownloaderTui._header |
|
100.0% |
4 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._footer |
|
100.0% |
3 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._safe_add |
|
100.0% |
6 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/tui.py |
DownloaderTui._require_size |
|
100.0% |
2 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/tui.py |
run_tui |
|
100.0% |
1 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/tui.py |
(no function) |
|
100.0% |
164 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/updater.py |
installed_version |
|
100.0% |
4 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/updater.py |
find_update |
|
100.0% |
50 |
0 |
0 |
|
100.0% |
22 |
0 |
|
100.0% |
| src/ph/updater.py |
stage_update |
|
100.0% |
35 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/updater.py |
_parse_version |
|
100.0% |
4 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/updater.py |
_download_release |
|
100.0% |
34 |
0 |
0 |
|
100.0% |
10 |
0 |
|
100.0% |
| src/ph/updater.py |
_extract_bundle |
|
100.0% |
19 |
0 |
0 |
|
100.0% |
8 |
0 |
|
100.0% |
| src/ph/updater.py |
_safe_bundle_path |
|
100.0% |
5 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/updater.py |
_validate_staged_bundle |
|
87.5% |
16 |
2 |
0 |
|
100.0% |
6 |
0 |
|
90.9% |
| src/ph/updater.py |
_remove_staging_path |
|
100.0% |
3 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/updater.py |
_raise_if_cancelled |
|
100.0% |
2 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/updater.py |
(no function) |
|
100.0% |
40 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/vimm_store.py |
_Cell.text |
|
100.0% |
1 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/vimm_store.py |
_SearchTableParser.__init__ |
|
100.0% |
7 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/vimm_store.py |
_SearchTableParser.handle_starttag |
|
100.0% |
22 |
0 |
0 |
|
94.4% |
18 |
1 |
|
97.5% |
| src/ph/vimm_store.py |
_SearchTableParser.handle_endtag |
|
93.8% |
16 |
1 |
0 |
|
92.9% |
14 |
1 |
|
93.3% |
| src/ph/vimm_store.py |
_SearchTableParser.handle_data |
|
100.0% |
2 |
0 |
0 |
|
100.0% |
2 |
0 |
|
100.0% |
| src/ph/vimm_store.py |
_DownloadFormParser.__init__ |
|
100.0% |
5 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/vimm_store.py |
_DownloadFormParser.handle_starttag |
|
90.0% |
10 |
1 |
0 |
|
75.0% |
8 |
2 |
|
83.3% |
| src/ph/vimm_store.py |
_DownloadFormParser.handle_endtag |
|
100.0% |
4 |
0 |
0 |
|
75.0% |
4 |
1 |
|
87.5% |
| src/ph/vimm_store.py |
parse_search_results |
|
100.0% |
12 |
0 |
0 |
|
100.0% |
8 |
0 |
|
100.0% |
| src/ph/vimm_store.py |
parse_download_url |
|
85.7% |
7 |
1 |
0 |
|
50.0% |
2 |
1 |
|
77.8% |
| src/ph/vimm_store.py |
VimmStore.__init__ |
|
87.5% |
8 |
1 |
0 |
|
50.0% |
2 |
1 |
|
80.0% |
| src/ph/vimm_store.py |
VimmStore.base_url |
|
100.0% |
1 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/vimm_store.py |
VimmStore.download_referrer |
|
100.0% |
1 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/vimm_store.py |
VimmStore.platform_code |
|
100.0% |
1 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/vimm_store.py |
VimmStore.headers |
|
100.0% |
1 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/vimm_store.py |
VimmStore.validate_detail_url |
|
100.0% |
4 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/vimm_store.py |
VimmStore.search |
|
100.0% |
3 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |
| src/ph/vimm_store.py |
VimmStore._fetch_catalogue |
|
100.0% |
12 |
0 |
0 |
|
100.0% |
8 |
0 |
|
100.0% |
| src/ph/vimm_store.py |
VimmStore._fetch_catalogue.fetch |
|
91.7% |
12 |
1 |
0 |
|
75.0% |
4 |
1 |
|
87.5% |
| src/ph/vimm_store.py |
VimmStore.retrieve_download_url |
|
66.7% |
3 |
1 |
0 |
|
50.0% |
2 |
1 |
|
60.0% |
| src/ph/vimm_store.py |
VimmStore._get_text |
|
70.0% |
10 |
3 |
0 |
|
100.0% |
0 |
0 |
|
70.0% |
| src/ph/vimm_store.py |
(no function) |
|
100.0% |
51 |
0 |
0 |
|
100.0% |
0 |
0 |
|
100.0% |