Coverage report: 93%

Files Functions Classes

coverage.py v7.14.2, created at 2026-06-28 08:19 +0000

File function   statements missing excluded   coverage
src/ecnl/__init__.py (no function)   0 0 0   100%
src/ecnl/adapters/__init__.py (no function)   0 0 0   100%
src/ecnl/adapters/inbound/__init__.py (no function)   0 0 0   100%
src/ecnl/adapters/inbound/authorization.py PassThroughAuthorizer.authorize   2 0 0   100%
src/ecnl/adapters/inbound/authorization.py PolicyServiceAuthorizer.__post_init__   1 0 0   100%
src/ecnl/adapters/inbound/authorization.py PolicyServiceAuthorizer.authorize   6 0 0   100%
src/ecnl/adapters/inbound/authorization.py PolicyServiceAuthorizer._fetch_decision   12 0 0   100%
src/ecnl/adapters/inbound/authorization.py PolicyServiceAuthorizer._error_decision   3 0 0   100%
src/ecnl/adapters/inbound/authorization.py build_authorizer   12 0 0   100%
src/ecnl/adapters/inbound/authorization.py _env_flag   4 0 0   100%
src/ecnl/adapters/inbound/authorization.py (no function)   27 0 0   100%
src/ecnl/adapters/inbound/formatters.py _fmt_events   7 0 0   100%
src/ecnl/adapters/inbound/formatters.py _fmt_event_overview   10 1 0   90%
src/ecnl/adapters/inbound/formatters.py _fmt_standings   8 0 0   100%
src/ecnl/adapters/inbound/formatters.py _fmt_match_line   4 0 0   100%
src/ecnl/adapters/inbound/formatters.py _fmt_schedule   3 0 0   100%
src/ecnl/adapters/inbound/formatters.py _fmt_teams   7 1 0   86%
src/ecnl/adapters/inbound/formatters.py _fmt_clubs   8 0 0   100%
src/ecnl/adapters/inbound/formatters.py _fmt_results   6 1 0   83%
src/ecnl/adapters/inbound/formatters.py _fmt_rpi   7 0 0   100%
src/ecnl/adapters/inbound/formatters.py _fmt_team_rpi   1 0 0   100%
src/ecnl/adapters/inbound/formatters.py _fmt_raw   3 0 0   100%
src/ecnl/adapters/inbound/formatters.py (no function)   14 0 0   100%
src/ecnl/adapters/inbound/mcp_adapter.py _handle_livez   1 1 0   0%
src/ecnl/adapters/inbound/mcp_adapter.py _handle_readyz   1 1 0   0%
src/ecnl/adapters/inbound/mcp_adapter.py _handle_health   1 1 0   0%
src/ecnl/adapters/inbound/mcp_adapter.py create_mcp_server   12 0 0   100%
src/ecnl/adapters/inbound/mcp_adapter.py (no function)   20 0 0   100%
src/ecnl/adapters/inbound/tools/__init__.py (no function)   0 0 0   100%
src/ecnl/adapters/inbound/tools/_base.py read_annotations   2 0 0   100%
src/ecnl/adapters/inbound/tools/_base.py _safe_call   11 0 0   100%
src/ecnl/adapters/inbound/tools/_base.py _safe_call_authorized   5 0 0   100%
src/ecnl/adapters/inbound/tools/_base.py _authorize_tool   7 0 0   100%
src/ecnl/adapters/inbound/tools/_base.py register_tool_annotations   3 0 0   100%
src/ecnl/adapters/inbound/tools/_base.py _read_actor   7 3 0   57%
src/ecnl/adapters/inbound/tools/_base.py _current_access_token   5 2 0   60%
src/ecnl/adapters/inbound/tools/_base.py _merge_scope_claims   6 6 0   0%
src/ecnl/adapters/inbound/tools/_base.py (no function)   38 0 0   100%
src/ecnl/adapters/inbound/tools/analytics.py register_analytics_tools   6 0 0   100%
src/ecnl/adapters/inbound/tools/analytics.py register_analytics_tools.get_results   2 0 0   100%
src/ecnl/adapters/inbound/tools/analytics.py register_analytics_tools.get_rpi   2 0 0   100%
src/ecnl/adapters/inbound/tools/analytics.py register_analytics_tools.get_team_rpi   2 0 0   100%
src/ecnl/adapters/inbound/tools/analytics.py (no function)   8 0 0   100%
src/ecnl/adapters/inbound/tools/events.py register_event_tools   4 0 0   100%
src/ecnl/adapters/inbound/tools/events.py register_event_tools.find_events   2 0 0   100%
src/ecnl/adapters/inbound/tools/events.py register_event_tools.get_event_overview   2 0 0   100%
src/ecnl/adapters/inbound/tools/events.py (no function)   8 0 0   100%
src/ecnl/adapters/inbound/tools/matches.py register_match_tools   4 0 0   100%
src/ecnl/adapters/inbound/tools/matches.py register_match_tools.get_match   2 0 0   100%
src/ecnl/adapters/inbound/tools/matches.py register_match_tools.get_brackets   2 0 0   100%
src/ecnl/adapters/inbound/tools/matches.py (no function)   8 0 0   100%
src/ecnl/adapters/inbound/tools/schedule.py register_schedule_tools   4 0 0   100%
src/ecnl/adapters/inbound/tools/schedule.py register_schedule_tools.get_schedule   2 0 0   100%
src/ecnl/adapters/inbound/tools/schedule.py register_schedule_tools.get_team_schedule   2 0 0   100%
src/ecnl/adapters/inbound/tools/schedule.py (no function)   8 0 0   100%
src/ecnl/adapters/inbound/tools/standings.py register_standings_tools   2 0 0   100%
src/ecnl/adapters/inbound/tools/standings.py register_standings_tools.get_standings   2 0 0   100%
src/ecnl/adapters/inbound/tools/standings.py (no function)   8 0 0   100%
src/ecnl/adapters/inbound/tools/teams.py register_team_tools   4 0 0   100%
src/ecnl/adapters/inbound/tools/teams.py register_team_tools.get_teams   2 0 0   100%
src/ecnl/adapters/inbound/tools/teams.py register_team_tools.get_clubs   2 0 0   100%
src/ecnl/adapters/inbound/tools/teams.py (no function)   8 0 0   100%
src/ecnl/adapters/outbound/__init__.py (no function)   0 0 0   100%
src/ecnl/adapters/outbound/athleteone_adapter.py AthleteOneAdapter.__init__   1 0 0   100%
src/ecnl/adapters/outbound/athleteone_adapter.py AthleteOneAdapter._get   11 2 0   82%
src/ecnl/adapters/outbound/athleteone_adapter.py AthleteOneAdapter.get_event   4 1 0   75%
src/ecnl/adapters/outbound/athleteone_adapter.py AthleteOneAdapter.get_event_overview   3 3 0   0%
src/ecnl/adapters/outbound/athleteone_adapter.py AthleteOneAdapter.get_standings   3 0 0   100%
src/ecnl/adapters/outbound/athleteone_adapter.py AthleteOneAdapter.get_schedule   2 0 0   100%
src/ecnl/adapters/outbound/athleteone_adapter.py AthleteOneAdapter.get_team_schedule   2 2 0   0%
src/ecnl/adapters/outbound/athleteone_adapter.py AthleteOneAdapter.get_flight_teams   2 2 0   0%
src/ecnl/adapters/outbound/athleteone_adapter.py AthleteOneAdapter.get_event_teams   2 2 0   0%
src/ecnl/adapters/outbound/athleteone_adapter.py AthleteOneAdapter.get_clubs   2 1 0   50%
src/ecnl/adapters/outbound/athleteone_adapter.py AthleteOneAdapter.get_match   2 2 0   0%
src/ecnl/adapters/outbound/athleteone_adapter.py AthleteOneAdapter.get_brackets   2 2 0   0%
src/ecnl/adapters/outbound/athleteone_adapter.py AthleteOneAdapter.get_org_club_events   3 0 0   100%
src/ecnl/adapters/outbound/athleteone_adapter.py _unwrap   7 1 0   86%
src/ecnl/adapters/outbound/athleteone_adapter.py (no function)   25 0 0   100%
src/ecnl/adapters/outbound/athleteone_parsers.py _to_int   6 2 0   67%
src/ecnl/adapters/outbound/athleteone_parsers.py _int0   1 0 0   100%
src/ecnl/adapters/outbound/athleteone_parsers.py _standing_ppg   4 1 0   75%
src/ecnl/adapters/outbound/athleteone_parsers.py parse_event   3 0 0   100%
src/ecnl/adapters/outbound/athleteone_parsers.py _parse_flight   1 1 0   0%
src/ecnl/adapters/outbound/athleteone_parsers.py parse_division_with_flights   3 3 0   0%
src/ecnl/adapters/outbound/athleteone_parsers.py parse_standing_row   6 1 0   83%
src/ecnl/adapters/outbound/athleteone_parsers.py parse_match   1 0 0   100%
src/ecnl/adapters/outbound/athleteone_parsers.py parse_team   1 1 0   0%
src/ecnl/adapters/outbound/athleteone_parsers.py parse_club   1 1 0   0%
src/ecnl/adapters/outbound/athleteone_parsers.py (no function)   13 0 0   100%
src/ecnl/adapters/outbound/caching_adapter.py _cache_key   1 0 0   100%
src/ecnl/adapters/outbound/caching_adapter.py CachingAdapter.__init__   5 0 0   100%
src/ecnl/adapters/outbound/caching_adapter.py CachingAdapter._get_or_fetch   13 0 0   100%
src/ecnl/adapters/outbound/caching_adapter.py CachingAdapter.get_event   1 0 0   100%
src/ecnl/adapters/outbound/caching_adapter.py CachingAdapter.get_event_overview   1 1 0   0%
src/ecnl/adapters/outbound/caching_adapter.py CachingAdapter.get_standings   1 0 0   100%
src/ecnl/adapters/outbound/caching_adapter.py CachingAdapter.get_schedule   1 1 0   0%
src/ecnl/adapters/outbound/caching_adapter.py CachingAdapter.get_team_schedule   1 1 0   0%
src/ecnl/adapters/outbound/caching_adapter.py CachingAdapter.get_flight_teams   1 1 0   0%
src/ecnl/adapters/outbound/caching_adapter.py CachingAdapter.get_event_teams   1 1 0   0%
src/ecnl/adapters/outbound/caching_adapter.py CachingAdapter.get_clubs   1 1 0   0%
src/ecnl/adapters/outbound/caching_adapter.py CachingAdapter.get_match   1 1 0   0%
src/ecnl/adapters/outbound/caching_adapter.py CachingAdapter.get_brackets   1 1 0   0%
src/ecnl/adapters/outbound/caching_adapter.py CachingAdapter.get_org_club_events   1 1 0   0%
src/ecnl/adapters/outbound/caching_adapter.py (no function)   23 0 0   100%
src/ecnl/adapters/outbound/discovery.py _norm   1 0 0   100%
src/ecnl/adapters/outbound/discovery.py DiscoveryAdapter.__init__   2 0 0   100%
src/ecnl/adapters/outbound/discovery.py DiscoveryAdapter.find_events   9 0 0   100%
src/ecnl/adapters/outbound/discovery.py DiscoveryAdapter._gather_events   3 0 0   100%
src/ecnl/adapters/outbound/discovery.py _org_matches   2 0 0   100%
src/ecnl/adapters/outbound/discovery.py _event_matches   1 0 0   100%
src/ecnl/adapters/outbound/discovery.py (no function)   14 0 0   100%
src/ecnl/adapters/outbound/retry_adapter.py RetryingAdapter.__init__   4 0 0   100%
src/ecnl/adapters/outbound/retry_adapter.py RetryingAdapter._retry   14 0 0   100%
src/ecnl/adapters/outbound/retry_adapter.py RetryingAdapter.get_event   1 0 0   100%
src/ecnl/adapters/outbound/retry_adapter.py RetryingAdapter.get_event_overview   1 1 0   0%
src/ecnl/adapters/outbound/retry_adapter.py RetryingAdapter.get_standings   1 0 0   100%
src/ecnl/adapters/outbound/retry_adapter.py RetryingAdapter.get_schedule   1 0 0   100%
src/ecnl/adapters/outbound/retry_adapter.py RetryingAdapter.get_team_schedule   1 1 0   0%
src/ecnl/adapters/outbound/retry_adapter.py RetryingAdapter.get_flight_teams   1 1 0   0%
src/ecnl/adapters/outbound/retry_adapter.py RetryingAdapter.get_event_teams   1 1 0   0%
src/ecnl/adapters/outbound/retry_adapter.py RetryingAdapter.get_clubs   1 1 0   0%
src/ecnl/adapters/outbound/retry_adapter.py RetryingAdapter.get_match   1 1 0   0%
src/ecnl/adapters/outbound/retry_adapter.py RetryingAdapter.get_brackets   1 1 0   0%
src/ecnl/adapters/outbound/retry_adapter.py RetryingAdapter.get_org_club_events   1 1 0   0%
src/ecnl/adapters/outbound/retry_adapter.py (no function)   21 0 0   100%
src/ecnl/application/__init__.py (no function)   0 0 0   100%
src/ecnl/application/_rpi.py _mean   1 0 0   100%
src/ecnl/application/_rpi.py _outcomes   5 1 0   80%
src/ecnl/application/_rpi.py build_graph   10 0 0   100%
src/ecnl/application/_rpi.py winning_pct   4 0 0   100%
src/ecnl/application/_rpi.py _opponent_wp_excluding   10 0 0   100%
src/ecnl/application/_rpi.py _owp   2 0 0   100%
src/ecnl/application/_rpi.py compute_rpi   15 0 0   100%
src/ecnl/application/_rpi.py (no function)   10 0 0   100%
src/ecnl/application/service.py _validate_enum   6 0 0   100%
src/ecnl/application/service.py ECNLService.__init__   6 0 0   100%
src/ecnl/application/service.py ECNLService.find_events   3 0 0   100%
src/ecnl/application/service.py ECNLService.get_event_overview   1 0 0   100%
src/ecnl/application/service.py ECNLService.get_standings   1 0 0   100%
src/ecnl/application/service.py ECNLService.get_schedule   1 0 0   100%
src/ecnl/application/service.py ECNLService.get_team_schedule   1 0 0   100%
src/ecnl/application/service.py ECNLService.get_teams   1 0 0   100%
src/ecnl/application/service.py ECNLService.get_clubs   1 0 0   100%
src/ecnl/application/service.py ECNLService.get_match   1 0 0   100%
src/ecnl/application/service.py ECNLService.get_brackets   1 0 0   100%
src/ecnl/application/service.py ECNLService.get_results   2 0 0   100%
src/ecnl/application/service.py ECNLService.get_rpi   1 0 0   100%
src/ecnl/application/service.py ECNLService.get_team_rpi   6 0 0   100%
src/ecnl/application/service.py ECNLService._rpi_table   12 0 0   100%
src/ecnl/application/service.py (no function)   25 0 0   100%
src/ecnl/domain/__init__.py (no function)   0 0 0   100%
src/ecnl/domain/classification.py classify_event_name   12 0 0   100%
src/ecnl/domain/classification.py _extract_conference   8 0 0   100%
src/ecnl/domain/classification.py (no function)   4 0 0   100%
src/ecnl/domain/exceptions.py (no function)   3 0 0   100%
src/ecnl/domain/models.py Match.is_played   1 0 0   100%
src/ecnl/domain/models.py (no function)   101 0 0   100%
src/ecnl/observability/__init__.py (no function)   2 0 0   100%
src/ecnl/observability/tracing.py _env_flag   4 0 0   100%
src/ecnl/observability/tracing.py _resolve_endpoint   1 0 0   100%
src/ecnl/observability/tracing.py setup_tracing   16 0 0   100%
src/ecnl/observability/tracing.py _build_exporter   11 0 0   100%
src/ecnl/observability/tracing.py _resource_attrs   8 0 0   100%
src/ecnl/observability/tracing.py _sampler   8 0 0   100%
src/ecnl/observability/tracing.py _instrument_starlette_if_available   6 0 0   100%
src/ecnl/observability/tracing.py _noop_shutdown   1 0 0   100%
src/ecnl/observability/tracing.py (no function)   13 0 0   100%
src/ecnl/ports/__init__.py (no function)   0 0 0   100%
src/ecnl/ports/inbound.py Decision.allow   1 0 0   100%
src/ecnl/ports/inbound.py Decision.deny   1 0 0   100%
src/ecnl/ports/inbound.py Decision.allowed   1 0 0   100%
src/ecnl/ports/inbound.py Authorizer.authorize   0 0 1   100%
src/ecnl/ports/inbound.py (no function)   37 0 0   100%
src/ecnl/ports/outbound.py DiscoveryPort.find_events   0 0 1   100%
src/ecnl/ports/outbound.py ECNLAPIPort.get_event   0 0 1   100%
src/ecnl/ports/outbound.py ECNLAPIPort.get_event_overview   0 0 1   100%
src/ecnl/ports/outbound.py ECNLAPIPort.get_standings   0 0 1   100%
src/ecnl/ports/outbound.py ECNLAPIPort.get_schedule   0 0 1   100%
src/ecnl/ports/outbound.py ECNLAPIPort.get_team_schedule   0 0 1   100%
src/ecnl/ports/outbound.py ECNLAPIPort.get_flight_teams   0 0 1   100%
src/ecnl/ports/outbound.py ECNLAPIPort.get_event_teams   0 0 1   100%
src/ecnl/ports/outbound.py ECNLAPIPort.get_clubs   0 0 1   100%
src/ecnl/ports/outbound.py ECNLAPIPort.get_match   0 0 1   100%
src/ecnl/ports/outbound.py ECNLAPIPort.get_brackets   0 0 1   100%
src/ecnl/ports/outbound.py ECNLAPIPort.get_org_club_events   0 0 1   100%
src/ecnl/ports/outbound.py (no function)   16 0 12   100%
src/ecnl/security/__init__.py (no function)   2 0 0   100%
src/ecnl/security/jwks.py JWKSCache.get   7 0 0   100%
src/ecnl/security/jwks.py JWKSCache._stale   1 0 0   100%
src/ecnl/security/jwks.py JWKSCache._refresh   20 3 0   85%
src/ecnl/security/jwks.py jwks_url   1 0 0   100%
src/ecnl/security/jwks.py (no function)   22 0 0   100%
src/ecnl/security/token_verifier.py JWKSTokenVerifier.verify_token   20 0 0   100%
src/ecnl/security/token_verifier.py _to_access_token   8 0 0   100%
src/ecnl/security/token_verifier.py _parse_scope   3 1 0   67%
src/ecnl/security/token_verifier.py build_token_verifier   9 0 0   100%
src/ecnl/security/token_verifier.py _env_flag   4 0 0   100%
src/ecnl/security/token_verifier.py _env_int   8 0 0   100%
src/ecnl/security/token_verifier.py (no function)   24 0 0   100%
src/ecnl/server.py _JsonFormatter.format   4 1 0   75%
src/ecnl/server.py _configure_logging   6 0 0   100%
src/ecnl/server.py build_server   5 0 0   100%
src/ecnl/server.py main   17 10 0   41%
src/ecnl/server.py _build_auth   8 8 0   0%
src/ecnl/server.py (no function)   27 1 0   96%
Total     1183 87 25   93%

No items found using the specified filter.