fix(weather): fix parsed dates sequence
This commit is contained in:
@@ -16,7 +16,7 @@ from gallery.sketch.weather.model import (
|
|||||||
WeatherValue,
|
WeatherValue,
|
||||||
WindDirection,
|
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
|
from gallery.sketch.weather.util import merge_weather_values
|
||||||
|
|
||||||
logger = logging.getLogger("gismeteo")
|
logger = logging.getLogger("gismeteo")
|
||||||
@@ -214,6 +214,8 @@ class GismeteoParser(Parser[Context, WeatherResponse]):
|
|||||||
values = [
|
values = [
|
||||||
merge_weather_values(values[i].date, values[i : i + n], "average") for i in range(0, len(values), n)
|
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(
|
return WeatherResponse(
|
||||||
location=location,
|
location=location,
|
||||||
date=data.date,
|
date=data.date,
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ from gallery.sketch.weather.model import (
|
|||||||
WeatherValue,
|
WeatherValue,
|
||||||
WindDirection,
|
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]):
|
class LocationNameParser(TagParser[str]):
|
||||||
@@ -183,6 +183,7 @@ class RP5ForecastParser(Parser[str, list[WeatherResponse]]):
|
|||||||
values=item_values,
|
values=item_values,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
fix_dates_sequence(responses)
|
||||||
return 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):
|
class ParseError(Exception):
|
||||||
@@ -52,3 +53,15 @@ def parse_wind_direction(value: str | int | float) -> WindDirection | None:
|
|||||||
return _parse_wind_direction_str(value)
|
return _parse_wind_direction_str(value)
|
||||||
else:
|
else:
|
||||||
return _parse_wind_direction_number(value)
|
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