feat(gismeteo): change gismeteo values merging mode
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user