Coverage report: 9%

Files Functions Classes

coverage.py v7.13.4, created at 2026-03-02 17:44 +0800

File function   statements missing excluded   coverage
health / __init__.py (no function)   1 0 0   100%
health / analytics / __init__.py (no function)   0 0 0   100%
health / analytics / engine.py HealthAnalyst.__init__   2 2 0   0%
health / analytics / engine.py HealthAnalyst.get_dataframe   34 34 0   0%
health / analytics / engine.py HealthAnalyst.analyze_recovery_correlations   12 12 0   0%
health / analytics / engine.py HealthAnalyst.analyze_fitness_trends   10 10 0   0%
health / analytics / engine.py HealthAnalyst.analyze_lifestyle_impact   6 6 0   0%
health / analytics / engine.py HealthAnalyst.compare_groups   12 12 0   0%
health / analytics / engine.py HealthAnalyst.analyze_lagged_correlation   11 11 0   0%
health / analytics / engine.py (no function)   16 16 0   0%
health / analytics / weekly_report.py WeeklyReportGenerator.__init__   2 2 0   0%
health / analytics / weekly_report.py WeeklyReportGenerator.generate   84 84 0   0%
health / analytics / weekly_report.py WeeklyReportGenerator._get_sleep_stats   10 10 0   0%
health / analytics / weekly_report.py WeeklyReportGenerator._get_steps_stats   7 7 0   0%
health / analytics / weekly_report.py WeeklyReportGenerator._get_activity_stats   23 23 0   0%
health / analytics / weekly_report.py WeeklyReportGenerator._get_intensity_stats   8 8 0   0%
health / analytics / weekly_report.py WeeklyReportGenerator._get_recovery_stats   7 7 0   0%
health / analytics / weekly_report.py WeeklyReportGenerator._get_battery_stats   8 8 0   0%
health / analytics / weekly_report.py WeeklyReportGenerator._get_lifestyle_stats   10 10 0   0%
health / analytics / weekly_report.py WeeklyReportGenerator._format_duration   5 5 0   0%
health / analytics / weekly_report.py WeeklyReportGenerator._pick_highlight   37 37 0   0%
health / analytics / weekly_report.py (no function)   18 18 0   0%
health / cli / __init__.py (no function)   0 0 0   100%
health / cli / manual.py cli   1 1 0   0%
health / cli / manual.py _get_date   3 3 0   0%
health / cli / manual.py diet   9 9 0   0%
health / cli / manual.py alcohol   9 9 0   0%
health / cli / manual.py supp   9 9 0   0%
health / cli / manual.py feeling   9 9 0   0%
health / cli / manual.py fasting   8 8 0   0%
health / cli / manual.py (no function)   54 54 0   0%
health / cli / obsidian.py cli   1 1 0   0%
health / cli / obsidian.py sync   7 7 0   0%
health / cli / obsidian.py sync_today   7 7 0   0%
health / cli / obsidian.py (no function)   15 15 0   0%
health / cli / query.py format_date   1 1 0   0%
health / cli / query.py format_seconds_to_hms   7 7 0   0%
health / cli / query.py format_number   5 5 0   0%
health / cli / query.py print_daily_summary   146 146 0   0%
health / cli / query.py print_metric_range   27 27 0   0%
health / cli / query.py cli   1 1 0   0%
health / cli / query.py daily   14 14 0   0%
health / cli / query.py range   29 29 0   0%
health / cli / query.py activities   33 33 0   0%
health / cli / query.py types   4 4 0   0%
health / cli / query.py (no function)   35 35 0   0%
health / cli / sync.py cli   1 1 0   0%
health / cli / sync.py status   21 21 0   0%
health / cli / sync.py sync   32 32 0   0%
health / cli / sync.py backfill   39 39 0   0%
health / cli / sync.py sync_incremental   29 29 0   0%
health / cli / sync.py (no function)   28 28 0   0%
health / config.py validate_credentials   2 2 0   0%
health / config.py (no function)   25 1 0   96%
health / db / __init__.py (no function)   0 0 0   100%
health / db / repository.py HealthRepository.__init__   1 1 0   0%
health / db / repository.py HealthRepository._get_conn   1 1 0   0%
health / db / repository.py HealthRepository.create_sync_record   5 5 0   0%
health / db / repository.py HealthRepository.get_sync_records   6 6 0   0%
health / db / repository.py HealthRepository.get_last_sync_date   7 7 0   0%
health / db / repository.py HealthRepository.update_last_sync_state   10 10 0   0%
health / db / repository.py HealthRepository.get_all_last_sync_states   7 7 0   0%
health / db / repository.py HealthRepository.index_daily_metric   4 4 0   0%
health / db / repository.py HealthRepository.get_daily_metric_path   5 5 0   0%
health / db / repository.py HealthRepository.index_activity   4 4 0   0%
health / db / repository.py HealthRepository.get_activities_by_date_range   4 4 0   0%
health / db / repository.py HealthRepository.activity_exists   4 4 0   0%
health / db / repository.py (no function)   20 20 0   0%
health / db / schema.py get_connection   4 4 0   0%
health / db / schema.py init_database   12 12 0   0%
health / db / schema.py reset_database   11 11 0   0%
health / db / schema.py (no function)   17 17 0   0%
health / models / __init__.py (no function)   0 0 0   100%
health / models / activity.py (no function)   33 0 0   100%
health / models / body_metrics.py (no function)   25 0 0   100%
health / models / daily_metrics.py (no function)   112 0 0   100%
health / models / manual_log.py (no function)   43 43 0   0%
health / models / sync_metadata.py (no function)   17 17 0   0%
health / services / __init__.py (no function)   0 0 0   100%
health / services / data_sync.py HealthDataSync.__init__   3 3 0   0%
health / services / data_sync.py HealthDataSync.authenticate   3 3 0   0%
health / services / data_sync.py HealthDataSync.sync_daily_metric   21 21 0   0%
health / services / data_sync.py HealthDataSync.sync_daily_metrics_range   13 13 0   0%
health / services / data_sync.py HealthDataSync.sync_activities_range   23 23 0   0%
health / services / data_sync.py HealthDataSync.sync_all_metrics   28 28 0   0%
health / services / data_sync.py HealthDataSync.sync_incremental   43 43 0   0%
health / services / data_sync.py HealthDataSync.backfill_historical   22 22 0   0%
health / services / data_sync.py HealthDataSync.get_sync_status   8 8 0   0%
health / services / data_sync.py (no function)   21 21 0   0%
health / services / garmin_client.py GarminHealthClient.__init__   7 7 0   0%
health / services / garmin_client.py GarminHealthClient.authenticate   31 31 0   0%
health / services / garmin_client.py GarminHealthClient._ensure_authenticated   2 2 0   0%
health / services / garmin_client.py GarminHealthClient._retry_api_call   20 20 0   0%
health / services / garmin_client.py GarminHealthClient.fetch_steps   13 13 0   0%
health / services / garmin_client.py GarminHealthClient.fetch_heart_rate   12 12 0   0%
health / services / garmin_client.py GarminHealthClient.fetch_sleep   13 13 0   0%
health / services / garmin_client.py GarminHealthClient.fetch_stress   12 12 0   0%
health / services / garmin_client.py GarminHealthClient.fetch_body_battery   13 13 0   0%
health / services / garmin_client.py GarminHealthClient.fetch_activities   21 21 0   0%
health / services / garmin_client.py GarminHealthClient.fetch_weight   17 17 0   0%
health / services / garmin_client.py GarminHealthClient.fetch_spo2   12 12 0   0%
health / services / garmin_client.py GarminHealthClient.fetch_respiration   12 12 0   0%
health / services / garmin_client.py GarminHealthClient.fetch_hydration   12 12 0   0%
health / services / garmin_client.py GarminHealthClient.fetch_floors   19 19 0   0%
health / services / garmin_client.py GarminHealthClient.fetch_intensity_minutes   17 17 0   0%
health / services / garmin_client.py GarminHealthClient.fetch_hrv   14 14 0   0%
health / services / garmin_client.py GarminHealthClient.fetch_rhr   18 18 0   0%
health / services / garmin_client.py GarminHealthClient.fetch_lifestyle_logging   20 6 0   70%
health / services / garmin_client.py GarminHealthClient.fetch_lifestyle_logging._find   4 0 0   100%
health / services / garmin_client.py GarminHealthClient.fetch_lifestyle_logging._amount   4 0 0   100%
health / services / garmin_client.py (no function)   33 0 0   100%
health / services / manual_log_storage.py ManualLogStorage.__init__   3 3 0   0%
health / services / manual_log_storage.py ManualLogStorage._get_file_path   7 7 0   0%
health / services / manual_log_storage.py ManualLogStorage.load_log   13 13 0   0%
health / services / manual_log_storage.py ManualLogStorage.save_log   11 11 0   0%
health / services / manual_log_storage.py ManualLogStorage.add_diet_entry   5 5 0   0%
health / services / manual_log_storage.py ManualLogStorage.add_alcohol_entry   5 5 0   0%
health / services / manual_log_storage.py ManualLogStorage.add_supplement_entry   5 5 0   0%
health / services / manual_log_storage.py ManualLogStorage.add_feeling_entry   5 5 0   0%
health / services / manual_log_storage.py ManualLogStorage.set_fasting_mode   5 5 0   0%
health / services / manual_log_storage.py ManualLogStorage.get_logs_in_range   9 9 0   0%
health / services / manual_log_storage.py (no function)   19 19 0   0%
health / services / obsidian.py ObsidianSyncService.__init__   2 2 0   0%
health / services / obsidian.py ObsidianSyncService._get_note_path   2 2 0   0%
health / services / obsidian.py ObsidianSyncService._parse_frontmatter   26 26 0   0%
health / services / obsidian.py ObsidianSyncService.sync_daily_note   48 48 0   0%
health / services / obsidian.py (no function)   18 18 0   0%
health / services / query.py HealthDataQuery.__init__   2 2 0   0%
health / services / query.py HealthDataQuery.get_daily_summary   18 18 0   0%
health / services / query.py HealthDataQuery.get_metric_range   13 13 0   0%
health / services / query.py HealthDataQuery.get_activities_range   11 11 0   0%
health / services / query.py HealthDataQuery.get_metric_statistics   12 12 0   0%
health / services / query.py HealthDataQuery.get_available_dates   14 14 0   0%
health / services / query.py HealthDataQuery.get_latest_data   3 3 0   0%
health / services / query.py (no function)   17 17 0   0%
health / services / storage.py HealthStorage.__init__   2 2 0   0%
health / services / storage.py HealthStorage._get_file_path   7 7 0   0%
health / services / storage.py HealthStorage._get_activity_file_path   7 7 0   0%
health / services / storage.py HealthStorage.save_daily_metric   18 18 0   0%
health / services / storage.py HealthStorage.load_daily_metric   15 15 0   0%
health / services / storage.py HealthStorage.save_activity   11 11 0   0%
health / services / storage.py HealthStorage.load_activity   18 18 0   0%
health / services / storage.py HealthStorage.metric_exists   2 2 0   0%
health / services / storage.py HealthStorage.activity_exists   1 1 0   0%
health / services / storage.py (no function)   23 23 0   0%
health / utils / __init__.py (no function)   0 0 0   100%
health / utils / date_utils.py parse_date   4 4 0   0%
health / utils / date_utils.py date_range   2 2 0   0%
health / utils / date_utils.py split_date_range   7 7 0   0%
health / utils / date_utils.py get_yesterday   1 1 0   0%
health / utils / date_utils.py format_date   1 1 0   0%
health / utils / date_utils.py (no function)   7 7 0   0%
health / utils / env_loader.py load_env_with_extras   9 1 0   89%
health / utils / env_loader.py (no function)   5 0 0   100%
health / utils / exceptions.py GarminAPIError.__init__   2 2 0   0%
health / utils / exceptions.py RateLimitError.__init__   1 1 0   0%
health / utils / exceptions.py (no function)   14 0 0   100%
health / utils / logging_config.py setup_logger   17 1 0   94%
health / utils / logging_config.py (no function)   9 0 0   100%
health / utils / time_utils.py get_cst_now   2 2 0   0%
health / utils / time_utils.py get_cst_today   1 1 0   0%
health / utils / time_utils.py get_current_time_str   1 1 0   0%
health / utils / time_utils.py (no function)   4 4 0   0%
slack_bot / __init__.py (no function)   0 0 0   100%
slack_bot / dispatcher.py MessageDispatcher.__init__   13 13 0   0%
slack_bot / dispatcher.py MessageDispatcher.dispatch   182 182 0   0%
slack_bot / dispatcher.py MessageDispatcher._split_text   22 22 0   0%
slack_bot / dispatcher.py MessageDispatcher._format_response   27 27 0   0%
slack_bot / dispatcher.py MessageDispatcher._download_files   55 55 0   0%
slack_bot / dispatcher.py (no function)   15 15 0   0%
slack_bot / llm / base.py BaseLLM.get_model_name   1 1 0   0%
slack_bot / llm / base.py BaseLLM.generate_response   1 1 0   0%
slack_bot / llm / base.py (no function)   7 0 0   100%
slack_bot / main.py main   35 35 0   0%
slack_bot / main.py main.handle_clear_context   11 11 0   0%
slack_bot / main.py main.handle_context_stats   12 12 0   0%
slack_bot / main.py main.handle_message   34 34 0   0%
slack_bot / main.py (no function)   18 18 0   0%
slack_bot / obsidian / __init__.py (no function)   0 0 0   100%
slack_bot / obsidian / cli.py ObsidianShell.__init__   8 8 0   0%
slack_bot / obsidian / cli.py ObsidianShell._set_prompt   4 4 0   0%
slack_bot / obsidian / cli.py ObsidianShell.do_mode   9 9 0   0%
slack_bot / obsidian / cli.py ObsidianShell.do_reload   3 3 0   0%
slack_bot / obsidian / cli.py ObsidianShell.do_clear   3 3 0   0%
slack_bot / obsidian / cli.py ObsidianShell.do_context   19 19 0   0%
slack_bot / obsidian / cli.py ObsidianShell.default   16 16 0   0%
slack_bot / obsidian / cli.py ObsidianShell.do_quit   1 1 0   0%
slack_bot / obsidian / cli.py ObsidianShell.do_exit   1 1 0   0%
slack_bot / obsidian / cli.py ObsidianShell.emptyline   1 1 0   0%
slack_bot / obsidian / cli.py (no function)   26 26 0   0%
slack_bot / obsidian / dispatcher.py ObsidianContextStorage.__init__   6 6 0   0%
slack_bot / obsidian / dispatcher.py ObsidianContextStorage.save_state   3 3 0   0%
slack_bot / obsidian / dispatcher.py ObsidianContextStorage.load_state   8 8 0   0%
slack_bot / obsidian / dispatcher.py ObsidianDispatcher.__init__   6 6 0   0%
slack_bot / obsidian / dispatcher.py ObsidianDispatcher.dispatch   36 36 0   0%
slack_bot / obsidian / dispatcher.py ObsidianDispatcher._reply   39 39 0   0%
slack_bot / obsidian / dispatcher.py ObsidianDispatcher._upload_as_file   16 16 0   0%
slack_bot / obsidian / dispatcher.py (no function)   23 23 0   0%
slack_bot / obsidian / generators.py BaseGenerator.__init__   4 4 0   0%
slack_bot / obsidian / generators.py BaseGenerator._read_file   7 7 0   0%
slack_bot / obsidian / generators.py BaseGenerator.chat   1 1 0   0%
slack_bot / obsidian / generators.py WritingAssistant.chat   22 22 0   0%
slack_bot / obsidian / generators.py ReplyGenerator.chat   17 17 0   0%
slack_bot / obsidian / generators.py DecisionSupport.chat   17 17 0   0%
slack_bot / obsidian / generators.py SearchAnalyzer.chat   37 37 0   0%
slack_bot / obsidian / generators.py DeAIReviser.chat   16 16 0   0%
slack_bot / obsidian / generators.py ZhihuGenerator.chat   24 24 0   0%
slack_bot / obsidian / generators.py (no function)   25 25 0   0%
slack_bot / obsidian / indexer.py ObsidianIndexer.__init__   8 8 0   0%
slack_bot / obsidian / indexer.py ObsidianIndexer.scan_vault   19 19 0   0%
slack_bot / obsidian / indexer.py ObsidianIndexer._process_file   12 12 0   0%
slack_bot / obsidian / indexer.py ObsidianIndexer.get_writing_samples   4 4 0   0%
slack_bot / obsidian / indexer.py ObsidianIndexer.get_reply_samples   4 4 0   0%
slack_bot / obsidian / indexer.py ObsidianIndexer.search   22 22 0   0%
slack_bot / obsidian / indexer.py ObsidianIndexer.get_recent_files   17 17 0   0%
slack_bot / obsidian / indexer.py ObsidianIndexer._read_files   9 9 0   0%
slack_bot / obsidian / indexer.py (no function)   17 17 0   0%
slack_bot / shell / __init__.py (no function)   0 0 0   100%
slack_bot / shell / help_text.py (no function)   1 1 0   0%
slack_bot / shell / manager.py ShellManager.__new__   3 3 0   0%
slack_bot / shell / manager.py ShellManager.get_session   4 4 0   0%
slack_bot / shell / manager.py ShellManager.close_session   4 4 0   0%
slack_bot / shell / manager.py (no function)   10 10 0   0%
slack_bot / shell / session.py ShellSession.__init__   8 8 0   0%
slack_bot / shell / session.py ShellSession._start   4 4 0   0%
slack_bot / shell / session.py ShellSession.execute   6 6 0   0%
slack_bot / shell / session.py ShellSession._read_until_prompt   17 17 0   0%
slack_bot / shell / session.py ShellSession._clean_output   7 7 0   0%
slack_bot / shell / session.py ShellSession.is_alive   1 1 0   0%
slack_bot / shell / session.py ShellSession.close   5 5 0   0%
slack_bot / shell / session.py ShellSession.__del__   1 1 0   0%
slack_bot / shell / session.py (no function)   16 16 0   0%
slack_bot / shell_main.py main   30 30 0   0%
slack_bot / shell_main.py main.handle_message   68 68 0   0%
slack_bot / shell_main.py (no function)   21 21 0   0%
Total     3410 3101 0   9%

No items found using the specified filter.