Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions src/accessiweather/display/presentation/current_conditions.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import logging
from collections.abc import Iterable

from ...impact_summary import build_impact_summary
from ...models import (
AppSettings,
CurrentConditions,
Expand Down Expand Up @@ -565,6 +566,15 @@ def build_current_conditions(
if anomaly_callout is not None:
metrics.append(Metric("Historical context", anomaly_callout.temp_anomaly_description))

# Build impact summary and append as metrics
impact = build_impact_summary(current, environmental)
if impact.outdoor is not None:
metrics.append(Metric("Impact: Outdoor", impact.outdoor))
if impact.driving is not None:
metrics.append(Metric("Impact: Driving", impact.driving))
if impact.allergy is not None:
metrics.append(Metric("Impact: Allergy", impact.allergy))

# Build fallback text
# Use metric.label for all metrics — after priority reordering, metrics[0]
# may no longer be the Temperature metric (e.g. Visibility moves first during fog alerts)
Expand All @@ -588,6 +598,7 @@ def build_current_conditions(
metrics=metrics,
fallback_text=fallback_text,
trends=trend_lines,
impact_summary=impact,
)


Expand Down
8 changes: 8 additions & 0 deletions src/accessiweather/display/presentation/forecast.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
from datetime import UTC, date, datetime, tzinfo

from ...forecast_confidence import ForecastConfidence
from ...impact_summary import ImpactSummary, build_forecast_impact_summary
from ...models import AppSettings, Forecast, ForecastPeriod, HourlyForecast, Location
from ...utils import TemperatureUnit, calculate_dewpoint
from ...utils.unit_utils import format_precipitation, format_wind_speed
Expand Down Expand Up @@ -300,6 +301,12 @@ def build_forecast(
fallback_sections.append(hourly_section_text)
fallback_text = "\n\n".join(section for section in fallback_sections if section).rstrip()

# Derive an impact summary from the first available forecast period
first_period = selected_periods[0] if selected_periods else None
forecast_impact: ImpactSummary | None = (
build_forecast_impact_summary(first_period) if first_period is not None else None
)

return ForecastPresentation(
title=title,
periods=periods,
Expand All @@ -311,6 +318,7 @@ def build_forecast(
hourly_section_text=hourly_section_text,
confidence_label=confidence_label,
summary=summary_line,
impact_summary=forecast_impact,
)


Expand Down
3 changes: 3 additions & 0 deletions src/accessiweather/display/weather_presenter.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
from accessiweather.alert_lifecycle import AlertLifecycleDiff

from ..forecast_confidence import ForecastConfidence
from ..impact_summary import ImpactSummary

from ..models import (
AppSettings,
Expand Down Expand Up @@ -86,6 +87,7 @@ class CurrentConditionsPresentation:
metrics: list[Metric] = field(default_factory=list)
fallback_text: str = ""
trends: list[str] = field(default_factory=list)
impact_summary: ImpactSummary | None = None

@property
def trend_summary(self) -> list[str]: # pragma: no cover - backward compatibility
Expand All @@ -107,6 +109,7 @@ class ForecastPresentation:
hourly_section_text: str = ""
confidence_label: str | None = None
summary: str | None = None
impact_summary: ImpactSummary | None = None


@dataclass(slots=True)
Expand Down
Loading
Loading