Coverage report: 100%

Files Functions Classes

coverage.py v7.10.7, created at 2025-10-16 04:41 +0000

File function statements missing excluded coverage
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%
Total   2020 0 0 100%

No items found using the specified filter.