fix(weather): fix parsed dates sequence
This commit is contained in:
@@ -16,7 +16,7 @@ from gallery.sketch.weather.model import (
|
||||
WeatherValue,
|
||||
WindDirection,
|
||||
)
|
||||
from gallery.sketch.weather.parser import parse_wind_direction
|
||||
from gallery.sketch.weather.parser import fix_dates_sequence, parse_wind_direction
|
||||
from gallery.sketch.weather.util import merge_weather_values
|
||||
|
||||
logger = logging.getLogger("gismeteo")
|
||||
@@ -214,6 +214,8 @@ class GismeteoParser(Parser[Context, WeatherResponse]):
|
||||
values = [
|
||||
merge_weather_values(values[i].date, values[i : i + n], "average") for i in range(0, len(values), n)
|
||||
]
|
||||
if data.period == "days":
|
||||
fix_dates_sequence(values)
|
||||
return WeatherResponse(
|
||||
location=location,
|
||||
date=data.date,
|
||||
|
||||
@@ -19,7 +19,7 @@ from gallery.sketch.weather.model import (
|
||||
WeatherValue,
|
||||
WindDirection,
|
||||
)
|
||||
from gallery.sketch.weather.parser import parse_wind_direction
|
||||
from gallery.sketch.weather.parser import fix_dates_sequence, parse_wind_direction
|
||||
|
||||
|
||||
class LocationNameParser(TagParser[str]):
|
||||
@@ -183,6 +183,7 @@ class RP5ForecastParser(Parser[str, list[WeatherResponse]]):
|
||||
values=item_values,
|
||||
)
|
||||
)
|
||||
fix_dates_sequence(responses)
|
||||
return responses
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
from typing import Self
|
||||
from datetime import timedelta
|
||||
from typing import Self, overload
|
||||
|
||||
from gallery.sketch.weather.model import WindDirection
|
||||
from gallery.sketch.weather.model import WeatherResponse, WeatherValue, WindDirection
|
||||
|
||||
|
||||
class ParseError(Exception):
|
||||
@@ -52,3 +53,15 @@ def parse_wind_direction(value: str | int | float) -> WindDirection | None:
|
||||
return _parse_wind_direction_str(value)
|
||||
else:
|
||||
return _parse_wind_direction_number(value)
|
||||
|
||||
|
||||
@overload
|
||||
def fix_dates_sequence(items: list[WeatherValue]): ...
|
||||
@overload
|
||||
def fix_dates_sequence(items: list[WeatherResponse]): ...
|
||||
def fix_dates_sequence(items):
|
||||
date = None
|
||||
for item in items:
|
||||
if date and (item.date - date).total_seconds() < 0:
|
||||
item.date = date + timedelta(days=1)
|
||||
date = item.date
|
||||
|
||||
Reference in New Issue
Block a user