feat(gismeteo): change gismeteo values merging mode

This commit is contained in:
2026-08-30 16:04:43 +03:00
parent bec48e3289
commit aa0d5a7a41
2 changed files with 17 additions and 4 deletions
+3 -1
View File
@@ -41,7 +41,9 @@ class GismeteoApi(WeatherApi):
# group values by 3 hours # group values by 3 hours
if len(values) > 8: if len(values) > 8:
n = 3 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( return WeatherResponse(
location=location or "n/a", location=location or "n/a",
date=date, date=date,
+14 -3
View File
@@ -1,8 +1,11 @@
import datetime import datetime
import statistics import statistics
from typing import Literal
from .model import Cloudness, Precipitation, Sky, WeatherValue, WindDirectionDeg from .model import Cloudness, Precipitation, Sky, WeatherValue, WindDirectionDeg
MergeMode = Literal["interval", "average"]
def build_weather_value(date: datetime.datetime) -> WeatherValue: def build_weather_value(date: datetime.datetime) -> WeatherValue:
return 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) result = build_weather_value(date)
temperatures = [] temperatures = []
pressures = [] pressures = []
@@ -44,8 +55,8 @@ def merge_weather_values(date: datetime.datetime, values: list[WeatherValue]) ->
cloudnesses.append(value.sky.cloudness) cloudnesses.append(value.sky.cloudness)
precipitations.append(value.sky.precipitation) precipitations.append(value.sky.precipitation)
precipitation += value.precipitation precipitation += value.precipitation
result.temperature = [max(temperatures), min(temperatures)] result.temperature = _merge_values(temperatures, mode)
result.pressure = [max(pressures), min(pressures)] result.pressure = _merge_values(pressures, mode)
result.humidity = round(statistics.mean(humidities)) result.humidity = round(statistics.mean(humidities))
result.wind_speed = round(statistics.mean(wind_speeds)) result.wind_speed = round(statistics.mean(wind_speeds))
result.wind_gust = round(statistics.mean(wind_gusts)) result.wind_gust = round(statistics.mean(wind_gusts))