Coverage report: 61%

Files Functions Classes

coverage.py v7.15.2, created at 2026-08-14 23:28 +0000

File class   statements missing excluded   coverage
src/secchi/__init__.py (no class)   5 2 0   60%
src/secchi/__main__.py (no class)   2 2 0   0%
src/secchi/aggregate.py (no class)   74 60 0   19%
src/secchi/api/__init__.py (no class)   0 0 0   100%
src/secchi/api/base.py RegistryAdapter   4 4 7   0%
src/secchi/api/base.py AdapterBase   2 0 0   100%
src/secchi/api/base.py _ClientLease   9 1 0   89%
src/secchi/api/base.py (no class)   30 9 10   70%
src/secchi/api/cran.py CranAdapter   12 1 0   92%
src/secchi/api/cran.py (no class)   22 1 0   95%
src/secchi/api/crates.py CratesAdapter   128 60 0   53%
src/secchi/api/crates.py (no class)   41 10 0   76%
src/secchi/api/golang.py GoModuleAdapter   20 1 0   95%
src/secchi/api/golang.py (no class)   29 3 0   90%
src/secchi/api/homebrew.py HomebrewAdapter   18 1 0   94%
src/secchi/api/homebrew.py (no class)   10 0 0   100%
src/secchi/api/npm.py NpmAdapter   111 33 0   70%
src/secchi/api/npm.py (no class)   31 4 0   87%
src/secchi/api/pypi.py PyPIAdapter   113 33 0   71%
src/secchi/api/pypi.py (no class)   28 1 0   96%
src/secchi/api/sparse.py SparseAdapter   8 5 0   38%
src/secchi/api/sparse.py (no class)   12 0 0   100%
src/secchi/cache.py (no class)   134 26 0   81%
src/secchi/cli.py (no class)   248 157 0   37%
src/secchi/config.py (no class)   78 22 0   72%
src/secchi/derived.py (no class)   210 47 0   78%
src/secchi/dev.py (no class)   20 20 0   0%
src/secchi/diagnostics.py DiagnosticStatus   0 0 0   100%
src/secchi/diagnostics.py DiagnosticEvent   4 0 0   100%
src/secchi/diagnostics.py DiagnosticLog   20 2 0   90%
src/secchi/diagnostics.py (no class)   32 3 0   91%
src/secchi/errors.py SecchiError   0 0 0   100%
src/secchi/errors.py PackageNotFoundError   0 0 0   100%
src/secchi/errors.py RegistryUnavailableError   0 0 0   100%
src/secchi/errors.py ConfigError   0 0 0   100%
src/secchi/errors.py ReportError   0 0 0   100%
src/secchi/errors.py (no class)   6 0 0   100%
src/secchi/export.py (no class)   34 10 0   71%
src/secchi/history.py (no class)   103 14 0   86%
src/secchi/http.py SecchiAsyncClient   24 9 0   62%
src/secchi/http.py HttpClientFactory   3 0 0   100%
src/secchi/http.py (no class)   32 10 0   69%
src/secchi/mcp_server.py (no class)   82 15 0   82%
src/secchi/models.py Registry   4 3 0   25%
src/secchi/models.py PackageRef   0 0 0   100%
src/secchi/models.py Project   0 0 0   100%
src/secchi/models.py Version   0 0 0   100%
src/secchi/models.py DownloadTrendPoint   0 0 0   100%
src/secchi/models.py DownloadCounts   0 0 0   100%
src/secchi/models.py GitHubStats   0 0 0   100%
src/secchi/models.py Dependency   0 0 0   100%
src/secchi/models.py ReleaseFile   0 0 0   100%
src/secchi/models.py ReverseDependency   0 0 0   100%
src/secchi/models.py AdvisoryReference   0 0 0   100%
src/secchi/models.py SecurityAdvisory   0 0 0   100%
src/secchi/models.py GitHubIssueEvent   0 0 0   100%
src/secchi/models.py HistorySnapshot   0 0 0   100%
src/secchi/models.py MetricTimelinePoint   0 0 0   100%
src/secchi/models.py InstallMethod   0 0 0   100%
src/secchi/models.py InstallBreakdown   0 0 0   100%
src/secchi/models.py ReverseDependencySummary   0 0 0   100%
src/secchi/models.py ActivityEventKind   2 2 0   0%
src/secchi/models.py ActivityEvent   0 0 0   100%
src/secchi/models.py HealthSubScore   0 0 0   100%
src/secchi/models.py HealthScore   0 0 0   100%
src/secchi/models.py DerivedPackageData   0 0 0   100%
src/secchi/models.py PackageInfo   0 0 0   100%
src/secchi/models.py FetchError   0 0 0   100%
src/secchi/models.py SearchResult   0 0 0   100%
src/secchi/models.py (no class)   207 0 0   100%
src/secchi/policy.py PolicyResult   0 0 0   100%
src/secchi/policy.py (no class)   13 0 0   100%
src/secchi/renderers/__init__.py (no class)   0 0 0   100%
src/secchi/renderers/reports.py ProjectSourceReport   0 0 0   100%
src/secchi/renderers/reports.py ProjectReport   0 0 0   100%
src/secchi/renderers/reports.py (no class)   124 15 0   88%
src/secchi/renderers/summary.py (no class)   18 2 0   89%
src/secchi/schema.py (no class)   6 0 0   100%
src/secchi/schemas.py SignalWarningSchema   0 0 0   100%
src/secchi/schemas.py CacheEnvelope   3 0 0   100%
src/secchi/schemas.py PackageExport   3 1 0   67%
src/secchi/schemas.py ProjectExport   3 1 0   67%
src/secchi/schemas.py ComparisonExport   3 1 0   67%
src/secchi/schemas.py (no class)   55 0 0   100%
src/secchi/security.py (no class)   59 8 0   86%
src/secchi/services/__init__.py (no class)   0 0 0   100%
src/secchi/services/comparison.py Recommendation   0 0 0   100%
src/secchi/services/comparison.py ComparisonCandidate   0 0 0   100%
src/secchi/services/comparison.py ComparisonResult   4 0 0   100%
src/secchi/services/comparison.py (no class)   147 36 0   76%
src/secchi/services/intelligence.py IntelligenceResult   0 0 0   100%
src/secchi/services/intelligence.py ProjectIntelligence   0 0 0   100%
src/secchi/services/intelligence.py SignalWarning   0 0 0   100%
src/secchi/services/intelligence.py PackageIntelligenceService   111 24 0   78%
src/secchi/services/intelligence.py (no class)   63 2 0   97%
src/secchi/services/resolver.py (no class)   28 6 0   79%
src/secchi/services/search.py PackageSearchService   30 1 0   97%
src/secchi/services/search.py (no class)   15 0 0   100%
src/secchi/spotlight.py Spotlight   7 0 0   100%
src/secchi/spotlight.py (no class)   106 72 0   32%
src/secchi/trending.py TrendingRepo   0 0 0   100%
src/secchi/trending.py (no class)   70 46 0   34%
src/secchi/ui/__init__.py (no class)   0 0 0   100%
src/secchi/ui/app.py Secchi   240 201 0   16%
src/secchi/ui/app.py (no class)   72 0 0   100%
src/secchi/ui/palette.py (no class)   25 0 0   100%
src/secchi/ui/styles/__init__.py (no class)   0 0 0   100%
src/secchi/ui/widgets/__init__.py (no class)   0 0 0   100%
src/secchi/ui/widgets/badge.py Badge   9 9 0   0%
src/secchi/ui/widgets/badge.py (no class)   5 5 0   0%
src/secchi/ui/widgets/bar.py (no class)   11 1 0   91%
src/secchi/ui/widgets/detail.py DetailView   135 135 0   0%
src/secchi/ui/widgets/detail.py (no class)   109 68 0   38%
src/secchi/ui/widgets/header_bar.py SecchiHeader   4 4 0   0%
src/secchi/ui/widgets/header_bar.py (no class)   8 0 0   100%
src/secchi/ui/widgets/modals.py SearchScreen   44 44 0   0%
src/secchi/ui/widgets/modals.py HelpScreen   7 7 0   0%
src/secchi/ui/widgets/modals.py LogsScreen   23 23 0   0%
src/secchi/ui/widgets/modals.py ExportScreen   27 27 0   0%
src/secchi/ui/widgets/modals.py (no class)   56 0 0   100%
src/secchi/ui/widgets/overview.py OverviewTab   28 10 0   64%
src/secchi/ui/widgets/overview.py AdoptionTrendPanel   6 0 0   100%
src/secchi/ui/widgets/overview.py AdoptionTrendBody   18 7 0   61%
src/secchi/ui/widgets/overview.py HealthScorePanel   9 3 0   67%
src/secchi/ui/widgets/overview.py EcosystemDistributionPanel   14 0 0   100%
src/secchi/ui/widgets/overview.py ReverseDependenciesPanel   13 9 0   31%
src/secchi/ui/widgets/overview.py HealthTimelinePanel   3 0 0   100%
src/secchi/ui/widgets/overview.py HealthTimelineBody   15 6 0   60%
src/secchi/ui/widgets/overview.py VersionAdoptionPanel   21 14 0   33%
src/secchi/ui/widgets/overview.py (no class)   205 32 0   84%
src/secchi/ui/widgets/panel.py Panel   16 6 0   62%
src/secchi/ui/widgets/panel.py PanelBody   2 0 0   100%
src/secchi/ui/widgets/panel.py (no class)   15 0 0   100%
src/secchi/ui/widgets/sidebar.py SidebarItem   12 12 0   0%
src/secchi/ui/widgets/sidebar.py ProjectItem   4 4 0   0%
src/secchi/ui/widgets/sidebar.py Sidebar   151 151 0   0%
src/secchi/ui/widgets/sidebar.py Sidebar.PackageSelected   2 2 0   0%
src/secchi/ui/widgets/sidebar.py Sidebar.ProjectSelected   2 2 0   0%
src/secchi/ui/widgets/sidebar.py (no class)   48 0 0   100%
src/secchi/ui/widgets/stat_card.py StatCard   34 34 0   0%
src/secchi/ui/widgets/stat_card.py (no class)   12 0 0   100%
src/secchi/ui/widgets/status_bar.py SecchiFooter   13 13 0   0%
src/secchi/ui/widgets/status_bar.py (no class)   37 17 0   54%
src/secchi/update.py UpdateNotice   1 0 0   100%
src/secchi/update.py (no class)   65 9 0   86%
src/secchi/utils.py (no class)   194 160 0   18%
src/secchi/web.py TextualServeUnavailable   0 0 0   100%
src/secchi/web.py WebDashboardLaunch   0 0 0   100%
src/secchi/web.py (no class)   39 1 0   97%
src/secchi/workflows/__init__.py (no class)   0 0 0   100%
src/secchi/workflows/check.py CheckResult   1 0 0   100%
src/secchi/workflows/check.py (no class)   24 2 0   92%
src/secchi/workflows/common.py WorkflowError   0 0 0   100%
src/secchi/workflows/common.py (no class)   17 1 0   94%
src/secchi/workflows/compare.py (no class)   26 19 0   27%
src/secchi/workflows/dashboard.py DashboardRequest   0 0 0   100%
src/secchi/workflows/dashboard.py (no class)   49 19 0   61%
src/secchi/workflows/inspect.py (no class)   7 4 0   43%
src/secchi/workflows/report.py ReportOutput   0 0 0   100%
src/secchi/workflows/report.py (no class)   39 25 0   36%
src/secchi/workflows/search.py (no class)   6 2 0   67%
src/secchi/workflows/show.py (no class)   11 6 0   45%
src/secchi/workspace/__init__.py (no class)   4 0 0   100%
src/secchi/workspace/aggregate.py (no class)   80 6 0   92%
src/secchi/workspace/state.py WorkspaceState   11 0 0   100%
src/secchi/workspace/state.py (no class)   13 0 0   100%
Total     4862 1886 17   61%

No items found using the specified filter.