Coverage report: 100%

Files Functions Classes

coverage.py v7.13.1, created at 2026-01-11 19:07 +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   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%
Total     2056 0 0   100%

No items found using the specified filter.