diff --git a/gallery/painting/gismeteo/api.py b/gallery/painting/gismeteo/api.py index 5e6c549..bd5c829 100644 --- a/gallery/painting/gismeteo/api.py +++ b/gallery/painting/gismeteo/api.py @@ -41,7 +41,9 @@ class GismeteoApi(WeatherApi): # group values by 3 hours if len(values) > 8: n = 3 - values = [merge_weather_values(values[i].date, values[i : i + n]) for i in range(0, len(values), n)] + values = [ + merge_weather_values(values[i].date, values[i : i + n], "average") for i in range(0, len(values), n) + ] return WeatherResponse( location=location or "n/a", date=date, diff --git a/gallery/sketch/weather/util.py b/gallery/sketch/weather/util.py index 9c5f374..71a7749 100644 --- a/gallery/sketch/weather/util.py +++ b/gallery/sketch/weather/util.py @@ -1,8 +1,11 @@ import datetime import statistics +from typing import Literal from .model import Cloudness, Precipitation, Sky, WeatherValue, WindDirectionDeg +MergeMode = Literal["interval", "average"] + def build_weather_value(date: datetime.datetime) -> WeatherValue: return WeatherValue( @@ -23,7 +26,15 @@ def build_weather_value(date: datetime.datetime) -> WeatherValue: ) -def merge_weather_values(date: datetime.datetime, values: list[WeatherValue]) -> WeatherValue: +def _merge_values(values: list[int], mode: MergeMode) -> list[int]: + return [max(values), min(values)] if mode == "interval" else [round(sum(values) / len(values))] + + +def merge_weather_values( + date: datetime.datetime, + values: list[WeatherValue], + mode: MergeMode = "interval", +) -> WeatherValue: result = build_weather_value(date) temperatures = [] pressures = [] @@ -44,8 +55,8 @@ def merge_weather_values(date: datetime.datetime, values: list[WeatherValue]) -> cloudnesses.append(value.sky.cloudness) precipitations.append(value.sky.precipitation) precipitation += value.precipitation - result.temperature = [max(temperatures), min(temperatures)] - result.pressure = [max(pressures), min(pressures)] + result.temperature = _merge_values(temperatures, mode) + result.pressure = _merge_values(pressures, mode) result.humidity = round(statistics.mean(humidities)) result.wind_speed = round(statistics.mean(wind_speeds)) result.wind_gust = round(statistics.mean(wind_gusts))