src/__init__.py |
read_config |
7 |
0 |
0 |
100% |
src/__init__.py |
get_logger_config |
7 |
0 |
0 |
100% |
src/__init__.py |
log_handler_exists |
9 |
0 |
0 |
100% |
src/__init__.py |
ColorfulConsoleFormatter.__init__ |
3 |
0 |
0 |
100% |
src/__init__.py |
ColorfulConsoleFormatter.format |
3 |
0 |
0 |
100% |
src/__init__.py |
configure_icloudpy_logging |
8 |
0 |
0 |
100% |
src/__init__.py |
get_logger |
21 |
0 |
0 |
100% |
src/__init__.py |
(no function) |
34 |
0 |
0 |
100% |
src/album_sync_orchestrator.py |
sync_album_photos |
10 |
0 |
0 |
100% |
src/album_sync_orchestrator.py |
_collect_album_download_tasks |
9 |
0 |
0 |
100% |
src/album_sync_orchestrator.py |
_sync_subalbums |
2 |
0 |
0 |
100% |
src/album_sync_orchestrator.py |
(no function) |
11 |
0 |
0 |
100% |
src/config_logging.py |
log_config_not_found_warning |
3 |
0 |
0 |
100% |
src/config_logging.py |
log_config_found_info |
1 |
0 |
0 |
100% |
src/config_logging.py |
log_config_debug |
1 |
0 |
0 |
100% |
src/config_logging.py |
log_config_error |
3 |
0 |
0 |
100% |
src/config_logging.py |
log_invalid_config_value |
3 |
0 |
0 |
100% |
src/config_logging.py |
(no function) |
9 |
0 |
0 |
100% |
src/config_parser.py |
_log_config_warning_once |
4 |
0 |
0 |
100% |
src/config_parser.py |
clear_config_warning_cache |
1 |
0 |
0 |
100% |
src/config_parser.py |
validate_and_strip_username |
5 |
0 |
0 |
100% |
src/config_parser.py |
get_username |
6 |
0 |
0 |
100% |
src/config_parser.py |
get_retry_login_interval |
7 |
0 |
0 |
100% |
src/config_parser.py |
get_region |
8 |
0 |
0 |
100% |
src/config_parser.py |
get_sync_interval |
6 |
0 |
0 |
100% |
src/config_parser.py |
get_drive_sync_interval |
2 |
0 |
0 |
100% |
src/config_parser.py |
get_photos_sync_interval |
2 |
0 |
0 |
100% |
src/config_parser.py |
calculate_default_max_threads |
1 |
0 |
0 |
100% |
src/config_parser.py |
parse_max_threads_value |
9 |
0 |
0 |
100% |
src/config_parser.py |
get_app_max_threads |
7 |
0 |
0 |
100% |
src/config_parser.py |
get_usage_tracking_enabled |
9 |
0 |
0 |
100% |
src/config_parser.py |
get_root_destination_path |
5 |
0 |
0 |
100% |
src/config_parser.py |
prepare_root_destination |
3 |
0 |
0 |
100% |
src/config_parser.py |
get_drive_destination_path |
5 |
0 |
0 |
100% |
src/config_parser.py |
prepare_drive_destination |
4 |
0 |
0 |
100% |
src/config_parser.py |
get_drive_remove_obsolete |
6 |
0 |
0 |
100% |
src/config_parser.py |
get_photos_destination_path |
5 |
0 |
0 |
100% |
src/config_parser.py |
prepare_photos_destination |
4 |
0 |
0 |
100% |
src/config_parser.py |
get_photos_all_albums |
5 |
0 |
0 |
100% |
src/config_parser.py |
get_photos_use_hardlinks |
5 |
0 |
0 |
100% |
src/config_parser.py |
get_photos_remove_obsolete |
6 |
0 |
0 |
100% |
src/config_parser.py |
get_photos_folder_format |
5 |
0 |
0 |
100% |
src/config_parser.py |
validate_file_sizes |
7 |
0 |
0 |
100% |
src/config_parser.py |
get_photos_libraries_filter |
6 |
0 |
0 |
100% |
src/config_parser.py |
get_photos_albums_filter |
6 |
0 |
0 |
100% |
src/config_parser.py |
get_photos_file_sizes_filter |
6 |
0 |
0 |
100% |
src/config_parser.py |
get_photos_extensions_filter |
6 |
0 |
0 |
100% |
src/config_parser.py |
get_photos_filters |
10 |
0 |
0 |
100% |
src/config_parser.py |
get_smtp_config_value |
5 |
0 |
0 |
100% |
src/config_parser.py |
get_smtp_email |
1 |
0 |
0 |
100% |
src/config_parser.py |
get_smtp_username |
1 |
0 |
0 |
100% |
src/config_parser.py |
get_smtp_to_email |
2 |
0 |
0 |
100% |
src/config_parser.py |
get_smtp_password |
1 |
0 |
0 |
100% |
src/config_parser.py |
get_smtp_host |
1 |
0 |
0 |
100% |
src/config_parser.py |
get_smtp_port |
1 |
0 |
0 |
100% |
src/config_parser.py |
get_smtp_no_tls |
2 |
0 |
0 |
100% |
src/config_parser.py |
get_notification_config_value |
5 |
0 |
0 |
100% |
src/config_parser.py |
get_telegram_bot_token |
1 |
0 |
0 |
100% |
src/config_parser.py |
get_telegram_chat_id |
1 |
0 |
0 |
100% |
src/config_parser.py |
get_discord_webhook_url |
1 |
0 |
0 |
100% |
src/config_parser.py |
get_discord_username |
1 |
0 |
0 |
100% |
src/config_parser.py |
get_pushover_user_key |
1 |
0 |
0 |
100% |
src/config_parser.py |
get_pushover_api_token |
1 |
0 |
0 |
100% |
src/config_parser.py |
get_sync_summary_enabled |
5 |
0 |
0 |
100% |
src/config_parser.py |
get_sync_summary_on_success |
5 |
0 |
0 |
100% |
src/config_parser.py |
get_sync_summary_on_error |
5 |
0 |
0 |
100% |
src/config_parser.py |
get_sync_summary_min_downloads |
5 |
0 |
0 |
100% |
src/config_parser.py |
(no function) |
60 |
0 |
0 |
100% |
src/config_utils.py |
config_path_to_string |
1 |
0 |
0 |
100% |
src/config_utils.py |
traverse_config_path |
5 |
0 |
0 |
100% |
src/config_utils.py |
get_config_value |
3 |
0 |
0 |
100% |
src/config_utils.py |
get_config_value_or_none |
3 |
0 |
0 |
100% |
src/config_utils.py |
get_config_value_or_default |
2 |
0 |
0 |
100% |
src/config_utils.py |
(no function) |
7 |
0 |
0 |
100% |
src/drive_cleanup.py |
remove_obsolete |
14 |
0 |
0 |
100% |
src/drive_cleanup.py |
(no function) |
7 |
0 |
0 |
100% |
src/drive_file_download.py |
download_file |
22 |
0 |
0 |
100% |
src/drive_file_download.py |
(no function) |
9 |
0 |
0 |
100% |
src/drive_file_existence.py |
file_exists |
12 |
0 |
0 |
100% |
src/drive_file_existence.py |
package_exists |
13 |
0 |
0 |
100% |
src/drive_file_existence.py |
is_package |
12 |
0 |
0 |
100% |
src/drive_file_existence.py |
(no function) |
11 |
0 |
0 |
100% |
src/drive_filtering.py |
wanted_file |
12 |
0 |
0 |
100% |
src/drive_filtering.py |
wanted_folder |
10 |
0 |
0 |
100% |
src/drive_filtering.py |
wanted_parent_folder |
8 |
0 |
0 |
100% |
src/drive_filtering.py |
_is_ignored_path |
4 |
0 |
0 |
100% |
src/drive_filtering.py |
(no function) |
12 |
0 |
0 |
100% |
src/drive_folder_processing.py |
process_folder |
9 |
0 |
0 |
100% |
src/drive_folder_processing.py |
(no function) |
9 |
0 |
0 |
100% |
src/drive_package_processing.py |
process_package |
9 |
0 |
0 |
100% |
src/drive_package_processing.py |
_process_zip_package |
11 |
0 |
0 |
100% |
src/drive_package_processing.py |
_process_gzip_package |
8 |
0 |
0 |
100% |
src/drive_package_processing.py |
(no function) |
13 |
0 |
0 |
100% |
src/drive_parallel_download.py |
collect_file_for_download |
18 |
0 |
0 |
100% |
src/drive_parallel_download.py |
download_file_task |
22 |
0 |
0 |
100% |
src/drive_parallel_download.py |
execute_parallel_downloads |
18 |
0 |
0 |
100% |
src/drive_parallel_download.py |
(no function) |
17 |
0 |
0 |
100% |
src/drive_sync_directory.py |
sync_directory |
15 |
0 |
0 |
100% |
src/drive_sync_directory.py |
_process_folder_item |
9 |
0 |
0 |
100% |
src/drive_sync_directory.py |
_process_file_item |
8 |
0 |
0 |
100% |
src/drive_sync_directory.py |
_execute_downloads |
2 |
0 |
0 |
100% |
src/drive_sync_directory.py |
(no function) |
14 |
0 |
0 |
100% |
src/drive_thread_config.py |
get_max_threads |
1 |
0 |
0 |
100% |
src/drive_thread_config.py |
(no function) |
6 |
0 |
0 |
100% |
src/email_message.py |
EmailMessage.__init__ |
13 |
0 |
0 |
100% |
src/email_message.py |
EmailMessage._process_email_parameters |
4 |
0 |
0 |
100% |
src/email_message.py |
EmailMessage._generate_default_date |
1 |
0 |
0 |
100% |
src/email_message.py |
EmailMessage._get_default_charset |
1 |
0 |
0 |
100% |
src/email_message.py |
EmailMessage.make_key |
1 |
0 |
0 |
100% |
src/email_message.py |
EmailMessage.as_string |
1 |
0 |
0 |
100% |
src/email_message.py |
EmailMessage._plaintext |
3 |
0 |
0 |
100% |
src/email_message.py |
EmailMessage._create_mime_message |
2 |
0 |
0 |
100% |
src/email_message.py |
EmailMessage._set_info |
4 |
0 |
0 |
100% |
src/email_message.py |
(no function) |
14 |
0 |
0 |
100% |
src/filesystem_utils.py |
ensure_directory_exists |
3 |
0 |
0 |
100% |
src/filesystem_utils.py |
join_and_ensure_path |
2 |
0 |
0 |
100% |
src/filesystem_utils.py |
(no function) |
4 |
0 |
0 |
100% |
src/hardlink_registry.py |
HardlinkRegistry.__init__ |
1 |
0 |
0 |
100% |
src/hardlink_registry.py |
HardlinkRegistry.get_existing_path |
2 |
0 |
0 |
100% |
src/hardlink_registry.py |
HardlinkRegistry.register_photo_path |
2 |
0 |
0 |
100% |
src/hardlink_registry.py |
HardlinkRegistry.get_registry_size |
1 |
0 |
0 |
100% |
src/hardlink_registry.py |
HardlinkRegistry.clear |
1 |
0 |
0 |
100% |
src/hardlink_registry.py |
create_hardlink_registry |
1 |
0 |
0 |
100% |
src/hardlink_registry.py |
(no function) |
10 |
0 |
0 |
100% |
src/notify.py |
_is_throttled |
5 |
0 |
0 |
100% |
src/notify.py |
_create_2fa_message |
4 |
0 |
0 |
100% |
src/notify.py |
_get_current_timestamp |
1 |
0 |
0 |
100% |
src/notify.py |
_get_telegram_config |
4 |
0 |
0 |
100% |
src/notify.py |
notify_telegram |
13 |
0 |
0 |
100% |
src/notify.py |
post_message_to_telegram |
7 |
0 |
0 |
100% |
src/notify.py |
_get_discord_config |
4 |
0 |
0 |
100% |
src/notify.py |
post_message_to_discord |
6 |
0 |
0 |
100% |
src/notify.py |
notify_discord |
11 |
0 |
0 |
100% |
src/notify.py |
_get_pushover_config |
4 |
0 |
0 |
100% |
src/notify.py |
post_message_to_pushover |
7 |
0 |
0 |
100% |
src/notify.py |
notify_pushover |
13 |
0 |
0 |
100% |
src/notify.py |
notify_email |
22 |
0 |
0 |
100% |
src/notify.py |
send |
7 |
0 |
0 |
100% |
src/notify.py |
_get_smtp_config |
9 |
0 |
0 |
100% |
src/notify.py |
_create_smtp_connection |
6 |
0 |
0 |
100% |
src/notify.py |
_authenticate_smtp |
3 |
0 |
0 |
100% |
src/notify.py |
_send_email_message |
1 |
0 |
0 |
100% |
src/notify.py |
_contains_non_ascii |
7 |
0 |
0 |
100% |
src/notify.py |
build_message |
8 |
0 |
0 |
100% |
src/notify.py |
_format_sync_summary_message |
62 |
0 |
0 |
100% |
src/notify.py |
_should_send_sync_summary |
20 |
0 |
0 |
100% |
src/notify.py |
send_sync_summary |
12 |
0 |
0 |
100% |
src/notify.py |
_send_telegram_no_throttle |
6 |
0 |
0 |
100% |
src/notify.py |
_send_discord_no_throttle |
6 |
0 |
0 |
100% |
src/notify.py |
_send_pushover_no_throttle |
6 |
0 |
0 |
100% |
src/notify.py |
_send_email_no_throttle |
17 |
0 |
0 |
100% |
src/notify.py |
(no function) |
34 |
0 |
0 |
100% |
src/photo_cleanup_utils.py |
remove_obsolete_files |
11 |
0 |
0 |
100% |
src/photo_cleanup_utils.py |
(no function) |
5 |
0 |
0 |
100% |
src/photo_download_manager.py |
DownloadTaskInfo.__init__ |
5 |
0 |
0 |
100% |
src/photo_download_manager.py |
get_max_threads_for_download |
1 |
0 |
0 |
100% |
src/photo_download_manager.py |
generate_photo_path |
13 |
0 |
0 |
100% |
src/photo_download_manager.py |
collect_download_task |
15 |
0 |
0 |
100% |
src/photo_download_manager.py |
execute_download_task |
15 |
0 |
0 |
100% |
src/photo_download_manager.py |
execute_parallel_downloads |
23 |
0 |
0 |
100% |
src/photo_download_manager.py |
(no function) |
17 |
0 |
0 |
100% |
src/photo_file_utils.py |
check_photo_exists |
9 |
0 |
0 |
100% |
src/photo_file_utils.py |
create_hardlink |
8 |
0 |
0 |
100% |
src/photo_file_utils.py |
download_photo_from_server |
16 |
0 |
0 |
100% |
src/photo_file_utils.py |
rename_legacy_file_if_exists |
2 |
0 |
0 |
100% |
src/photo_file_utils.py |
(no function) |
10 |
0 |
0 |
100% |
src/photo_filter_utils.py |
is_photo_wanted |
6 |
0 |
0 |
100% |
src/photo_filter_utils.py |
(no function) |
4 |
0 |
0 |
100% |
src/photo_path_utils.py |
get_photo_name_and_extension |
8 |
0 |
0 |
100% |
src/photo_path_utils.py |
generate_photo_filename_with_metadata |
5 |
0 |
0 |
100% |
src/photo_path_utils.py |
create_folder_path_if_needed |
6 |
0 |
0 |
100% |
src/photo_path_utils.py |
normalize_file_path |
1 |
0 |
0 |
100% |
src/photo_path_utils.py |
rename_legacy_file_if_exists |
3 |
0 |
0 |
100% |
src/photo_path_utils.py |
_get_original_alt_filetype_mapping |
1 |
0 |
0 |
100% |
src/photo_path_utils.py |
(no function) |
12 |
0 |
0 |
100% |
src/sync.py |
get_api_instance |
1 |
0 |
0 |
100% |
src/sync.py |
SyncState.__init__ |
5 |
0 |
0 |
100% |
src/sync.py |
_load_configuration |
2 |
0 |
0 |
100% |
src/sync.py |
_extract_sync_intervals |
7 |
0 |
0 |
100% |
src/sync.py |
_retrieve_password |
5 |
0 |
0 |
100% |
src/sync.py |
_authenticate_and_get_api |
3 |
0 |
0 |
100% |
src/sync.py |
_perform_drive_sync |
33 |
0 |
0 |
100% |
src/sync.py |
_perform_photos_sync |
52 |
0 |
0 |
100% |
src/sync.py |
_check_services_configured |
1 |
0 |
0 |
100% |
src/sync.py |
_send_usage_statistics |
6 |
0 |
0 |
100% |
src/sync.py |
_handle_2fa_required |
10 |
0 |
0 |
100% |
src/sync.py |
_handle_password_error |
10 |
0 |
0 |
100% |
src/sync.py |
_log_retry_time |
2 |
0 |
0 |
100% |
src/sync.py |
_calculate_next_sync_schedule |
24 |
0 |
0 |
100% |
src/sync.py |
_log_next_sync_time |
2 |
0 |
0 |
100% |
src/sync.py |
_log_sync_intervals_at_startup |
4 |
0 |
0 |
100% |
src/sync.py |
_should_exit_oneshot_mode |
3 |
0 |
0 |
100% |
src/sync.py |
sync |
53 |
0 |
0 |
100% |
src/sync.py |
(no function) |
29 |
0 |
0 |
100% |
src/sync_drive.py |
sync_drive |
2 |
0 |
0 |
100% |
src/sync_drive.py |
process_file |
24 |
0 |
0 |
100% |
src/sync_drive.py |
(no function) |
19 |
0 |
0 |
100% |
src/sync_photos.py |
get_max_threads |
1 |
0 |
0 |
100% |
src/sync_photos.py |
get_name_and_extension |
2 |
0 |
0 |
100% |
src/sync_photos.py |
photo_wanted |
2 |
0 |
0 |
100% |
src/sync_photos.py |
generate_file_name |
2 |
0 |
0 |
100% |
src/sync_photos.py |
photo_exists |
2 |
0 |
0 |
100% |
src/sync_photos.py |
create_hardlink |
2 |
0 |
0 |
100% |
src/sync_photos.py |
download_photo |
2 |
0 |
0 |
100% |
src/sync_photos.py |
process_photo |
19 |
0 |
0 |
100% |
src/sync_photos.py |
collect_photo_for_download |
15 |
0 |
0 |
100% |
src/sync_photos.py |
download_photo_task |
22 |
0 |
0 |
100% |
src/sync_photos.py |
sync_album |
14 |
0 |
0 |
100% |
src/sync_photos.py |
remove_obsolete |
1 |
0 |
0 |
100% |
src/sync_photos.py |
sync_photos |
13 |
0 |
0 |
100% |
src/sync_photos.py |
_sync_all_photos_first_for_hardlinks |
7 |
0 |
0 |
100% |
src/sync_photos.py |
_sync_albums_by_configuration |
8 |
0 |
0 |
100% |
src/sync_photos.py |
_sync_all_albums_except_filtered |
6 |
0 |
0 |
100% |
src/sync_photos.py |
_sync_filtered_albums |
2 |
0 |
0 |
100% |
src/sync_photos.py |
_sync_filtered_albums_in_library |
4 |
0 |
0 |
100% |
src/sync_photos.py |
_sync_all_photos_in_library |
1 |
0 |
0 |
100% |
src/sync_photos.py |
(no function) |
27 |
0 |
0 |
100% |
src/sync_stats.py |
DriveStats.has_activity |
1 |
0 |
0 |
100% |
src/sync_stats.py |
DriveStats.has_errors |
1 |
0 |
0 |
100% |
src/sync_stats.py |
PhotoStats.has_activity |
1 |
0 |
0 |
100% |
src/sync_stats.py |
PhotoStats.has_errors |
1 |
0 |
0 |
100% |
src/sync_stats.py |
SyncSummary.has_activity |
3 |
0 |
0 |
100% |
src/sync_stats.py |
SyncSummary.has_errors |
3 |
0 |
0 |
100% |
src/sync_stats.py |
SyncSummary.total_duration_seconds |
3 |
0 |
0 |
100% |
src/sync_stats.py |
format_bytes |
9 |
0 |
0 |
100% |
src/sync_stats.py |
format_duration |
9 |
0 |
0 |
100% |
src/sync_stats.py |
(no function) |
35 |
0 |
0 |
100% |
src/usage.py |
init_cache |
4 |
0 |
0 |
100% |
src/usage.py |
validate_cache_data |
12 |
0 |
0 |
100% |
src/usage.py |
load_cache |
17 |
0 |
0 |
100% |
src/usage.py |
save_cache |
16 |
0 |
0 |
100% |
src/usage.py |
post_new_installation |
12 |
0 |
0 |
100% |
src/usage.py |
record_new_installation |
4 |
0 |
0 |
100% |
src/usage.py |
already_installed |
1 |
0 |
0 |
100% |
src/usage.py |
install |
12 |
0 |
0 |
100% |
src/usage.py |
post_new_heartbeat |
10 |
0 |
0 |
100% |
src/usage.py |
send_heartbeat |
2 |
0 |
0 |
100% |
src/usage.py |
current_time |
1 |
0 |
0 |
100% |
src/usage.py |
heartbeat |
25 |
0 |
0 |
100% |
src/usage.py |
alive |
23 |
0 |
0 |
100% |
src/usage.py |
(no function) |
28 |
0 |
0 |
100% |