| 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 |
|
10 |
0 |
0 |
|
100% |
| src / drive_folder_processing.py |
(no function) |
|
10 |
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 |
|
19 |
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) |
|
18 |
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) |
|
13 |
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 |
|
25 |
0 |
0 |
|
100% |
| src / sync_drive.py |
(no function) |
|
20 |
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_with_retry |
|
23 |
0 |
0 |
|
100% |
| src / usage.py |
post_new_installation |
|
13 |
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 |
|
11 |
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) |
|
32 |
0 |
0 |
|
100% |