Coverage report: 100%

Files Functions Classes

coverage.py v7.16.2, created at 2026-10-08 21:05 +0000

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

No items found using the specified filter.