| src/__init__.py |
read_config |
|
7 |
0 |
0 |
|
100% |
| src/__init__.py |
get_logger_config |
|
10 |
0 |
0 |
|
100% |
| src/__init__.py |
_int_setting |
|
6 |
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 |
|
25 |
0 |
0 |
|
100% |
| src/__init__.py |
(no function) |
|
44 |
0 |
0 |
|
100% |
| src/album_sync_orchestrator.py |
_now |
|
1 |
0 |
0 |
|
100% |
| src/album_sync_orchestrator.py |
sync_album_photos |
|
11 |
0 |
0 |
|
100% |
| src/album_sync_orchestrator.py |
_collect_photo_download_tasks |
|
17 |
0 |
0 |
|
100% |
| src/album_sync_orchestrator.py |
_collect_and_execute_album_in_chunks |
|
18 |
0 |
0 |
|
100% |
| src/album_sync_orchestrator.py |
_collect_and_execute_album_in_chunks._drain |
|
7 |
0 |
0 |
|
100% |
| src/album_sync_orchestrator.py |
_sync_subalbums |
|
8 |
0 |
0 |
|
100% |
| src/album_sync_orchestrator.py |
(no function) |
|
15 |
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 |
|
9 |
0 |
0 |
|
100% |
| src/config_parser.py |
get_region |
|
8 |
0 |
0 |
|
100% |
| src/config_parser.py |
get_sync_interval |
|
10 |
0 |
0 |
|
100% |
| src/config_parser.py |
get_drive_sync_interval |
|
2 |
0 |
0 |
|
100% |
| src/config_parser.py |
get_drive_request_timeout |
|
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_web_ui_enabled |
|
1 |
0 |
0 |
|
100% |
| src/config_parser.py |
get_web_ui_host |
|
1 |
0 |
0 |
|
100% |
| src/config_parser.py |
get_web_ui_port |
|
1 |
0 |
0 |
|
100% |
| src/config_parser.py |
get_web_ui_public_url |
|
4 |
0 |
0 |
|
100% |
| src/config_parser.py |
get_trust_expiry_warn_days |
|
1 |
0 |
0 |
|
100% |
| src/config_parser.py |
get_trust_refresh_days |
|
3 |
0 |
0 |
|
100% |
| src/config_parser.py |
_warn_if_refresh_cannot_precede_warning |
|
7 |
0 |
0 |
|
100% |
| src/config_parser.py |
get_app_max_threads |
|
7 |
0 |
0 |
|
100% |
| src/config_parser.py |
get_mount_marker_filename |
|
2 |
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_drive_flatten_packages |
|
4 |
0 |
0 |
|
100% |
| src/config_parser.py |
get_drive_require_mount_marker |
|
2 |
0 |
0 |
|
100% |
| src/config_parser.py |
get_photos_enumeration_chunk_size |
|
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_require_mount_marker |
|
2 |
0 |
0 |
|
100% |
| src/config_parser.py |
get_photos_folder_format |
|
5 |
0 |
0 |
|
100% |
| src/config_parser.py |
get_photos_request_timeout |
|
4 |
0 |
0 |
|
100% |
| src/config_parser.py |
get_photos_obsolete_delete_limit_percent |
|
4 |
0 |
0 |
|
100% |
| src/config_parser.py |
validate_file_sizes |
|
7 |
0 |
0 |
|
100% |
| src/config_parser.py |
get_photos_filename_format |
|
9 |
0 |
0 |
|
100% |
| src/config_parser.py |
get_photos_file_format |
|
8 |
0 |
0 |
|
100% |
| src/config_parser.py |
get_photos_variant_separator |
|
3 |
0 |
0 |
|
100% |
| src/config_parser.py |
get_photos_preserve_originals_as_bak |
|
3 |
0 |
0 |
|
100% |
| src/config_parser.py |
get_recycle_bin_enabled |
|
2 |
0 |
0 |
|
100% |
| src/config_parser.py |
get_recycle_bin_retention_days |
|
8 |
0 |
0 |
|
100% |
| src/config_parser.py |
get_photos_library_destinations |
|
5 |
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_telegram_listen_enabled |
|
1 |
0 |
0 |
|
100% |
| src/config_parser.py |
get_telegram_auth_keyword |
|
2 |
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_pushover_notification_priority |
|
2 |
0 |
0 |
|
100% |
| src/config_parser.py |
get_webhook_url |
|
5 |
0 |
0 |
|
100% |
| src/config_parser.py |
get_webhook_post_url |
|
1 |
0 |
0 |
|
100% |
| src/config_parser.py |
get_webhook_events |
|
4 |
0 |
0 |
|
100% |
| src/config_parser.py |
get_webhook_headers |
|
4 |
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) |
|
89 |
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 |
|
21 |
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 |
|
11 |
0 |
0 |
|
100% |
| src/drive_file_existence.py |
package_bundle_unchanged |
|
3 |
0 |
0 |
|
100% |
| src/drive_file_existence.py |
is_package |
|
12 |
0 |
0 |
|
100% |
| src/drive_file_existence.py |
(no function) |
|
12 |
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 |
|
15 |
0 |
0 |
|
100% |
| src/drive_package_processing.py |
_zip_entries_self_prefixed |
|
10 |
0 |
0 |
|
100% |
| src/drive_package_processing.py |
_safe_extractall |
|
11 |
0 |
2 |
|
100% |
| src/drive_package_processing.py |
_process_zip_package |
|
21 |
0 |
0 |
|
100% |
| src/drive_package_processing.py |
_warn_about_a_leftover_nfd_copy |
|
4 |
0 |
0 |
|
100% |
| src/drive_package_processing.py |
_process_gzip_package |
|
8 |
0 |
0 |
|
100% |
| src/drive_package_processing.py |
(no function) |
|
17 |
0 |
0 |
|
100% |
| src/drive_parallel_download.py |
collect_file_for_download |
|
25 |
0 |
0 |
|
100% |
| src/drive_parallel_download.py |
download_file_task |
|
17 |
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/main.py |
_load_config_safely |
|
8 |
0 |
0 |
|
100% |
| src/main.py |
run |
|
4 |
0 |
0 |
|
100% |
| src/main.py |
(no function) |
|
7 |
0 |
11 |
|
100% |
| src/migration_check.py |
_check_one_photo |
|
20 |
0 |
0 |
|
100% |
| src/migration_check.py |
check_library |
|
21 |
0 |
0 |
|
100% |
| src/migration_check.py |
check_migration |
|
13 |
0 |
2 |
|
100% |
| src/migration_check.py |
_check_one_drive_file |
|
19 |
0 |
0 |
|
100% |
| src/migration_check.py |
_walk_drive_recursive |
|
39 |
0 |
0 |
|
100% |
| src/migration_check.py |
check_drive |
|
6 |
0 |
0 |
|
100% |
| src/migration_check.py |
check_drive_migration |
|
9 |
0 |
0 |
|
100% |
| src/migration_check.py |
(no function) |
|
20 |
0 |
17 |
|
100% |
| src/notify.py |
_is_throttled |
|
5 |
0 |
0 |
|
100% |
| src/notify.py |
_account_uses_security_key |
|
3 |
0 |
2 |
|
100% |
| src/notify.py |
_create_2fa_message |
|
8 |
0 |
0 |
|
100% |
| src/notify.py |
_create_trust_expiring_message |
|
6 |
0 |
0 |
|
100% |
| src/notify.py |
_create_telegram_reply_prompt |
|
2 |
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 |
poll_telegram_for_text |
|
31 |
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 |
|
5 |
0 |
0 |
|
100% |
| src/notify.py |
post_message_to_pushover |
|
9 |
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 |
|
11 |
0 |
0 |
|
100% |
| src/notify.py |
send_trust_expiring |
|
8 |
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 |
|
13 |
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 |
ping_webhook |
|
12 |
0 |
0 |
|
100% |
| src/notify.py |
_event_data |
|
1 |
0 |
0 |
|
100% |
| src/notify.py |
summary_event_data |
|
8 |
0 |
0 |
|
100% |
| src/notify.py |
_webhook_wants |
|
2 |
0 |
0 |
|
100% |
| src/notify.py |
warn_unknown_webhook_events |
|
6 |
0 |
0 |
|
100% |
| src/notify.py |
post_event_to_webhook |
|
13 |
0 |
0 |
|
100% |
| src/notify.py |
notify_webhook |
|
9 |
0 |
0 |
|
100% |
| src/notify.py |
_send_webhook_no_throttle |
|
5 |
0 |
0 |
|
100% |
| src/notify.py |
send_cycle_event |
|
2 |
0 |
0 |
|
100% |
| src/notify.py |
(no function) |
|
51 |
0 |
0 |
|
100% |
| src/photo_cleanup_utils.py |
remove_obsolete_files |
|
34 |
0 |
0 |
|
100% |
| src/photo_cleanup_utils.py |
(no function) |
|
5 |
0 |
0 |
|
100% |
| src/photo_download_manager.py |
DownloadTaskInfo.__init__ |
|
6 |
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 |
|
25 |
0 |
2 |
|
100% |
| src/photo_download_manager.py |
collect_download_task |
|
39 |
0 |
0 |
|
100% |
| src/photo_download_manager.py |
execute_download_task |
|
15 |
0 |
0 |
|
100% |
| src/photo_download_manager.py |
execute_parallel_downloads |
|
26 |
0 |
0 |
|
100% |
| src/photo_download_manager.py |
(no function) |
|
17 |
0 |
0 |
|
100% |
| src/photo_file_utils.py |
_note_refresh_success |
|
2 |
0 |
0 |
|
100% |
| src/photo_file_utils.py |
_note_refresh_failure |
|
6 |
0 |
0 |
|
100% |
| src/photo_file_utils.py |
_refresh_photo_download_url |
|
43 |
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 |
|
37 |
0 |
1 |
|
100% |
| src/photo_file_utils.py |
_declared_size |
|
4 |
0 |
0 |
|
100% |
| src/photo_file_utils.py |
_discard |
|
2 |
0 |
0 |
|
100% |
| src/photo_file_utils.py |
rename_legacy_file_if_exists |
|
2 |
0 |
0 |
|
100% |
| src/photo_file_utils.py |
(no function) |
|
24 |
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 |
|
11 |
0 |
0 |
|
100% |
| src/photo_path_utils.py |
set_preserve_originals_as_bak |
|
1 |
0 |
0 |
|
100% |
| src/photo_path_utils.py |
_photo_has_alt_version |
|
4 |
0 |
0 |
|
100% |
| src/photo_path_utils.py |
set_default_filename_format |
|
2 |
0 |
0 |
|
100% |
| src/photo_path_utils.py |
get_default_filename_format |
|
1 |
0 |
0 |
|
100% |
| src/photo_path_utils.py |
set_file_format |
|
2 |
0 |
0 |
|
100% |
| src/photo_path_utils.py |
get_file_format |
|
1 |
0 |
0 |
|
100% |
| src/photo_path_utils.py |
render_filename_template |
|
8 |
0 |
0 |
|
100% |
| src/photo_path_utils.py |
render_filename_template._sub |
|
3 |
0 |
0 |
|
100% |
| src/photo_path_utils.py |
generate_photo_filename_with_metadata |
|
18 |
0 |
0 |
|
100% |
| src/photo_path_utils.py |
resolve_folder_path |
|
4 |
0 |
0 |
|
100% |
| src/photo_path_utils.py |
create_folder_path_if_needed |
|
4 |
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 |
|
7 |
0 |
0 |
|
100% |
| src/photo_path_utils.py |
_get_video_filetype_mapping |
|
1 |
0 |
0 |
|
100% |
| src/photo_path_utils.py |
_get_original_alt_filetype_mapping |
|
1 |
0 |
0 |
|
100% |
| src/photo_path_utils.py |
(no function) |
|
30 |
0 |
0 |
|
100% |
| src/recycle_bin.py |
RecycleBin.__init__ |
|
4 |
0 |
0 |
|
100% |
| src/recycle_bin.py |
RecycleBin.within |
|
3 |
0 |
0 |
|
100% |
| src/recycle_bin.py |
RecycleBin.contains |
|
3 |
0 |
0 |
|
100% |
| src/recycle_bin.py |
RecycleBin.discard |
|
14 |
0 |
0 |
|
100% |
| src/recycle_bin.py |
RecycleBin.purge |
|
14 |
0 |
0 |
|
100% |
| src/recycle_bin.py |
from_config |
|
4 |
0 |
0 |
|
100% |
| src/recycle_bin.py |
(no function) |
|
15 |
0 |
0 |
|
100% |
| src/sync.py |
_detect_security_key_account |
|
13 |
0 |
0 |
|
100% |
| src/sync.py |
_log_trust_revocation_hint |
|
10 |
0 |
0 |
|
100% |
| src/sync.py |
_read_trust_cookie_expiry |
|
8 |
0 |
0 |
|
100% |
| src/sync.py |
_resolve_dashboard_url |
|
11 |
0 |
0 |
|
100% |
| src/sync.py |
_publish_auth_blocked |
|
3 |
0 |
2 |
|
100% |
| src/sync.py |
_maybe_refresh_trust |
|
20 |
0 |
2 |
|
100% |
| src/sync.py |
_maybe_warn_trust_expiring |
|
16 |
0 |
2 |
|
100% |
| src/sync.py |
SessionOnlyICloudPyService.authenticate |
|
15 |
0 |
0 |
|
100% |
| src/sync.py |
get_api_instance |
|
8 |
0 |
0 |
|
100% |
| src/sync.py |
SyncState.__init__ |
|
8 |
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 |
|
9 |
0 |
0 |
|
100% |
| src/sync.py |
_authenticate_and_get_api |
|
9 |
0 |
0 |
|
100% |
| src/sync.py |
_check_mount_marker |
|
9 |
0 |
0 |
|
100% |
| src/sync.py |
_perform_drive_sync |
|
36 |
0 |
0 |
|
100% |
| src/sync.py |
_perform_photos_sync |
|
66 |
0 |
0 |
|
100% |
| src/sync.py |
_wait_for_photos_indexing |
|
6 |
0 |
0 |
|
100% |
| src/sync.py |
_signal_photos_indexing |
|
7 |
0 |
0 |
|
100% |
| src/sync.py |
_perform_dry_run |
|
55 |
0 |
0 |
|
100% |
| src/sync.py |
_check_services_configured |
|
1 |
0 |
0 |
|
100% |
| src/sync.py |
_cycle_nothing_synced_reason |
|
5 |
0 |
0 |
|
100% |
| src/sync.py |
_cycle_end_message |
|
9 |
0 |
0 |
|
100% |
| src/sync.py |
_send_usage_statistics |
|
6 |
0 |
0 |
|
100% |
| src/sync.py |
_auth_retry_sleep |
|
14 |
0 |
3 |
|
100% |
| src/sync.py |
_request_2fa_push_once |
|
11 |
0 |
0 |
|
100% |
| src/sync.py |
_handle_2fa_required |
|
19 |
0 |
0 |
|
100% |
| src/sync.py |
_wait_for_telegram_code |
|
58 |
0 |
0 |
|
100% |
| src/sync.py |
_needs_a_human |
|
3 |
0 |
0 |
|
100% |
| src/sync.py |
_handle_auth_transport_error |
|
15 |
0 |
0 |
|
100% |
| src/sync.py |
_handle_sync_error |
|
12 |
0 |
0 |
|
100% |
| src/sync.py |
_handle_password_error |
|
12 |
0 |
0 |
|
100% |
| src/sync.py |
_log_retry_time |
|
2 |
0 |
0 |
|
100% |
| src/sync.py |
_calculate_next_sync_schedule |
|
19 |
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 |
|
121 |
0 |
4 |
|
100% |
| src/sync.py |
_interruptible_sleep |
|
13 |
0 |
3 |
|
100% |
| src/sync.py |
(no function) |
|
60 |
0 |
0 |
|
100% |
| src/sync_drive.py |
sync_drive |
|
2 |
0 |
0 |
|
100% |
| src/sync_drive.py |
process_file |
|
27 |
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 |
|
42 |
0 |
0 |
|
100% |
| src/sync_photos.py |
_bin_subfolder |
|
4 |
0 |
0 |
|
100% |
| src/sync_photos.py |
_library_destination |
|
10 |
0 |
0 |
|
100% |
| src/sync_photos.py |
_signal_library |
|
5 |
0 |
0 |
|
100% |
| src/sync_photos.py |
is_photos_indexing |
|
1 |
0 |
0 |
|
100% |
| src/sync_photos.py |
_raise_if_photos_indexing |
|
2 |
0 |
0 |
|
100% |
| src/sync_photos.py |
_note_library_failure |
|
3 |
0 |
0 |
|
100% |
| src/sync_photos.py |
_sync_all_photos_first_for_hardlinks |
|
15 |
0 |
0 |
|
100% |
| src/sync_photos.py |
_sync_albums_by_configuration |
|
20 |
0 |
0 |
|
100% |
| src/sync_photos.py |
_sync_all_albums_except_filtered |
|
12 |
0 |
0 |
|
100% |
| src/sync_photos.py |
_sync_filtered_albums |
|
8 |
0 |
0 |
|
100% |
| src/sync_photos.py |
_sync_filtered_albums_in_library |
|
10 |
0 |
0 |
|
100% |
| src/sync_photos.py |
_sync_all_photos_in_library |
|
4 |
0 |
0 |
|
100% |
| src/sync_photos.py |
(no function) |
|
36 |
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 |
|
18 |
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 |
|
28 |
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 |
_format_timestamp |
|
1 |
0 |
0 |
|
100% |
| src/usage.py |
_parse_timestamp |
|
1 |
0 |
0 |
|
100% |
| src/usage.py |
current_time |
|
1 |
0 |
0 |
|
100% |
| src/usage.py |
heartbeat |
|
25 |
0 |
0 |
|
100% |
| src/usage.py |
alive |
|
25 |
0 |
0 |
|
100% |
| src/usage.py |
(no function) |
|
34 |
0 |
0 |
|
100% |
| src/web.py |
_wake_sync_loop |
|
4 |
0 |
0 |
|
100% |
| src/web.py |
_pending_auth_is_stale |
|
6 |
0 |
0 |
|
100% |
| src/web.py |
_clear_pending_auth_unlocked |
|
2 |
0 |
0 |
|
100% |
| src/web.py |
_expire_stale_pending_auth_unlocked |
|
3 |
0 |
0 |
|
100% |
| src/web.py |
_get_csrf_token |
|
1 |
0 |
0 |
|
100% |
| src/web.py |
_require_csrf |
|
7 |
0 |
0 |
|
100% |
| src/web.py |
_current_config_path |
|
1 |
0 |
0 |
|
100% |
| src/web.py |
_load_current_config |
|
8 |
0 |
0 |
|
100% |
| src/web.py |
_get_marker_filename |
|
1 |
0 |
0 |
|
100% |
| src/web.py |
_get_require_mount_marker |
|
2 |
0 |
0 |
|
100% |
| src/web.py |
_get_library_destinations |
|
1 |
0 |
0 |
|
100% |
| src/web.py |
_get_configured_libraries |
|
5 |
0 |
0 |
|
100% |
| src/web.py |
_build_service |
|
16 |
0 |
0 |
|
100% |
| src/web.py |
_logger_filename |
|
6 |
0 |
0 |
|
100% |
| src/web.py |
_tail_log_file |
|
17 |
0 |
0 |
|
100% |
| src/web.py |
_build_status |
|
19 |
0 |
2 |
|
100% |
| src/web.py |
_photos_indexing |
|
5 |
0 |
0 |
|
100% |
| src/web.py |
_build_libraries |
|
8 |
0 |
0 |
|
100% |
| src/web.py |
_password_is_stored |
|
3 |
0 |
3 |
|
100% |
| src/web.py |
_saved_session_exists |
|
6 |
0 |
0 |
|
100% |
| src/web.py |
_detect_auth_state |
|
15 |
0 |
0 |
|
100% |
| src/web.py |
create_app |
|
34 |
0 |
0 |
|
100% |
| src/web.py |
create_app._no_cache |
|
5 |
0 |
0 |
|
100% |
| src/web.py |
create_app.dashboard |
|
5 |
0 |
0 |
|
100% |
| src/web.py |
create_app.health |
|
3 |
0 |
0 |
|
100% |
| src/web.py |
create_app.status |
|
5 |
0 |
0 |
|
100% |
| src/web.py |
create_app.logs |
|
2 |
0 |
0 |
|
100% |
| src/web.py |
create_app.auth_form |
|
1 |
0 |
0 |
|
100% |
| src/web.py |
create_app.auth_password |
|
40 |
0 |
2 |
|
100% |
| src/web.py |
create_app.auth_code |
|
35 |
0 |
0 |
|
100% |
| src/web.py |
create_app.auth_security_key |
|
7 |
0 |
0 |
|
100% |
| src/web.py |
create_app.auth_security_key_start |
|
53 |
0 |
0 |
|
100% |
| src/web.py |
create_app.auth_security_key_submit |
|
55 |
0 |
0 |
|
100% |
| src/web.py |
create_app.auth_reset |
|
6 |
0 |
0 |
|
100% |
| src/web.py |
create_app.auth_refresh_trust |
|
47 |
0 |
2 |
|
100% |
| src/web.py |
create_app.api_sync |
|
17 |
0 |
0 |
|
100% |
| src/web.py |
_lookup_auth_method |
|
6 |
0 |
2 |
|
100% |
| src/web.py |
_record_auth_method |
|
3 |
0 |
2 |
|
100% |
| src/web.py |
_pack_challenge |
|
5 |
0 |
0 |
|
100% |
| src/web.py |
_pack_challenge.decode |
|
1 |
0 |
0 |
|
100% |
| src/web.py |
_build_signer_command |
|
6 |
0 |
0 |
|
100% |
| src/web.py |
_signer_source_ref |
|
4 |
0 |
0 |
|
100% |
| src/web.py |
_build_short_signer_command |
|
4 |
0 |
0 |
|
100% |
| src/web.py |
_session_authenticates |
|
9 |
0 |
0 |
|
100% |
| src/web.py |
_same_challenge |
|
3 |
0 |
0 |
|
100% |
| src/web.py |
_same_challenge.decode |
|
4 |
0 |
0 |
|
100% |
| src/web.py |
_is_signin_throttled |
|
2 |
0 |
0 |
|
100% |
| src/web.py |
_ceremony_cookie_dir |
|
1 |
0 |
0 |
|
100% |
| src/web.py |
_publish_ceremony_session |
|
11 |
0 |
0 |
|
100% |
| src/web.py |
_discard_ceremony_dir |
|
2 |
0 |
0 |
|
100% |
| src/web.py |
_render_auth |
|
6 |
0 |
0 |
|
100% |
| src/web.py |
start_in_thread |
|
11 |
0 |
0 |
|
100% |
| src/web.py |
start_in_thread._serve_bound |
|
4 |
0 |
0 |
|
100% |
| src/web.py |
(no function) |
|
61 |
0 |
0 |
|
100% |
| src/web_signals.py |
_config_dir |
|
3 |
0 |
0 |
|
100% |
| src/web_signals.py |
_sentinel_path |
|
1 |
0 |
0 |
|
100% |
| src/web_signals.py |
_state_path |
|
1 |
0 |
0 |
|
100% |
| src/web_signals.py |
_reauth_sentinel_path |
|
1 |
0 |
0 |
|
100% |
| src/web_signals.py |
record_reauth_completed |
|
9 |
0 |
0 |
|
100% |
| src/web_signals.py |
consume_reauth_completed |
|
9 |
0 |
0 |
|
100% |
| src/web_signals.py |
request_force_sync |
|
11 |
0 |
0 |
|
100% |
| src/web_signals.py |
pending_force_syncs |
|
1 |
0 |
0 |
|
100% |
| src/web_signals.py |
consume_force_sync |
|
10 |
0 |
0 |
|
100% |
| src/web_signals.py |
record_sync_completion |
|
17 |
0 |
0 |
|
100% |
| src/web_signals.py |
get_sync_state |
|
3 |
0 |
0 |
|
100% |
| src/web_signals.py |
_load_state |
|
11 |
0 |
0 |
|
100% |
| src/web_signals.py |
_save_state |
|
13 |
0 |
0 |
|
100% |
| src/web_signals.py |
record_trust_state |
|
8 |
0 |
0 |
|
100% |
| src/web_signals.py |
get_trust_state |
|
1 |
0 |
0 |
|
100% |
| src/web_signals.py |
record_auth_blocked |
|
3 |
0 |
0 |
|
100% |
| src/web_signals.py |
get_auth_blocked |
|
2 |
0 |
0 |
|
100% |
| src/web_signals.py |
record_auth_method |
|
5 |
0 |
0 |
|
100% |
| src/web_signals.py |
get_auth_method |
|
5 |
0 |
0 |
|
100% |
| src/web_signals.py |
format_relative_time |
|
14 |
0 |
0 |
|
100% |
| src/web_signals.py |
record_library_started |
|
9 |
0 |
0 |
|
100% |
| src/web_signals.py |
record_library_finished |
|
16 |
0 |
0 |
|
100% |
| src/web_signals.py |
get_library_states |
|
1 |
0 |
0 |
|
100% |
| src/web_signals.py |
record_photos_indexing |
|
12 |
0 |
0 |
|
100% |
| src/web_signals.py |
get_photos_indexing |
|
2 |
0 |
0 |
|
100% |
| src/web_signals.py |
clear_stale_library_states |
|
10 |
0 |
0 |
|
100% |
| src/web_signals.py |
(no function) |
|
39 |
0 |
0 |
|
100% |