Skip to content

Commit

Permalink
Fixes timewindow methods to work even if partly out of the forecast data
Browse files Browse the repository at this point in the history
  • Loading branch information
FL550 committed Mar 11, 2021
1 parent 6376997 commit 03952d9
Show file tree
Hide file tree
Showing 6 changed files with 75 additions and 16 deletions.
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

setuptools.setup(
name="simple_dwd_weatherforecast",
version="1.0.9",
version="1.0.10",
author="Max Fermor",
description="A simple tool to retrieve a weather forecast from DWD OpenData",
long_description=long_description,
Expand Down
12 changes: 7 additions & 5 deletions simple_dwd_weatherforecast/dwdforecast.py
Original file line number Diff line number Diff line change
Expand Up @@ -156,8 +156,10 @@ def get_timeframe_condition(
):
if shouldUpdate:
self.update()
if self.is_valid_timeframe(timeframe) and self.is_in_timerange(timestamp):
return self.get_condition(self.get_timeframe_values(timestamp, timeframe))
if self.is_valid_timeframe(timeframe):
result = self.get_condition(self.get_timeframe_values(timestamp, timeframe))
if result != "":
return result
return None

def get_daily_condition(self, timestamp: datetime, shouldUpdate=True):
Expand Down Expand Up @@ -187,7 +189,7 @@ def get_timeframe_max(
):
if shouldUpdate:
self.update()
if self.is_in_timerange(timestamp) and self.is_valid_timeframe(timeframe):
if self.is_valid_timeframe(timeframe):
return self.get_max(
self.get_timeframe_values(timestamp, timeframe), weatherDataType
)
Expand Down Expand Up @@ -224,7 +226,7 @@ def get_timeframe_min(
):
if shouldUpdate:
self.update()
if self.is_in_timerange(timestamp) and self.is_valid_timeframe(timeframe):
if self.is_valid_timeframe(timeframe):
return self.get_min(
self.get_timeframe_values(timestamp, timeframe), weatherDataType
)
Expand Down Expand Up @@ -262,7 +264,7 @@ def get_timeframe_sum(
):
if shouldUpdate:
self.update()
if self.is_valid_timeframe(timeframe) and self.is_in_timerange(timestamp):
if self.is_valid_timeframe(timeframe):
return self.get_sum(
self.get_timeframe_values(timestamp, timeframe), weatherDataType
)
Expand Down
8 changes: 8 additions & 0 deletions tests/test_get_timeframe_condition.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,14 @@ def test_not_in_timerange(self):
test_time = datetime(2000, 11, 7, 3, 30)
self.assertIsNone(self.dwd_weather.get_timeframe_condition(test_time, 3))

@patch("simple_dwd_weatherforecast.dwdforecast.Weather.update", return_value=None)
def test_part_in_timerange(self, _):
test_time = datetime(2020, 11, 6, 1, 0)
self.assertEqual(
self.dwd_weather.get_timeframe_condition(test_time, 6),
"cloudy",
)

@patch("simple_dwd_weatherforecast.dwdforecast.Weather.update", return_value=None)
def test_49_max(self, _):
test_time = datetime(2020, 11, 6, 10, 0)
Expand Down
18 changes: 16 additions & 2 deletions tests/test_get_timeframe_max.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,19 @@ def test_shouldupdate_not(self, mock_update):
def test_not_in_timerange(self):
test_time = datetime(2000, 11, 7, 3, 30)
self.assertIsNone(
self.dwd_weather.get_timeframe_max(WeatherDataType.PRECIPITATION, test_time, 3)
self.dwd_weather.get_timeframe_max(
WeatherDataType.PRECIPITATION, test_time, 3
)
)

@patch("simple_dwd_weatherforecast.dwdforecast.Weather.update", return_value=None)
def test_part_in_timerange(self, _):
test_time = datetime(2020, 11, 6, 1, 0)
self.assertEqual(
self.dwd_weather.get_timeframe_max(
WeatherDataType.TEMPERATURE, test_time, 6
),
273.65,
)

@patch("simple_dwd_weatherforecast.dwdforecast.Weather.update", return_value=None)
Expand All @@ -48,6 +60,8 @@ def test_precipitation(self, _):
def test_temperature(self, _):
test_time = datetime(2020, 11, 6, 4, 0)
self.assertEqual(
self.dwd_weather.get_timeframe_max(WeatherDataType.TEMPERATURE, test_time, 3),
self.dwd_weather.get_timeframe_max(
WeatherDataType.TEMPERATURE, test_time, 3
),
273.65,
)
18 changes: 16 additions & 2 deletions tests/test_get_timeframe_min.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,19 @@ def test_shouldupdate_not(self, mock_update):
def test_not_in_timerange(self):
test_time = datetime(2000, 11, 7, 3, 30)
self.assertIsNone(
self.dwd_weather.get_timeframe_min(WeatherDataType.PRECIPITATION, test_time, 3)
self.dwd_weather.get_timeframe_min(
WeatherDataType.PRECIPITATION, test_time, 3
)
)

@patch("simple_dwd_weatherforecast.dwdforecast.Weather.update", return_value=None)
def test_part_in_timerange(self, _):
test_time = datetime(2020, 11, 6, 0, 0)
self.assertEqual(
self.dwd_weather.get_timeframe_min(
WeatherDataType.TEMPERATURE, test_time, 6
),
272.95,
)

@patch("simple_dwd_weatherforecast.dwdforecast.Weather.update", return_value=None)
Expand All @@ -48,6 +60,8 @@ def test_precipitation(self, _):
def test_temperature(self, _):
test_time = datetime(2020, 11, 6, 4, 0)
self.assertEqual(
self.dwd_weather.get_timeframe_min(WeatherDataType.TEMPERATURE, test_time, 3),
self.dwd_weather.get_timeframe_min(
WeatherDataType.TEMPERATURE, test_time, 3
),
272.95,
)
33 changes: 27 additions & 6 deletions tests/test_get_timeframe_sum.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,33 +15,54 @@ def setUp(self):
@patch("simple_dwd_weatherforecast.dwdforecast.Weather.update", return_value=None)
def test_shouldupdate(self, mock_update):
test_time = datetime(2020, 11, 7, 3, 30)
self.dwd_weather.get_timeframe_sum(WeatherDataType.PRECIPITATION, test_time, 3, True)
self.dwd_weather.get_timeframe_sum(
WeatherDataType.PRECIPITATION, test_time, 3, True
)
mock_update.assert_called()

@patch("simple_dwd_weatherforecast.dwdforecast.Weather.update", return_value=None)
def test_shouldupdate_not(self, mock_update):
test_time = datetime(2020, 11, 7, 3, 30)
self.dwd_weather.get_timeframe_sum(WeatherDataType.PRECIPITATION, test_time, 3, False)
self.dwd_weather.get_timeframe_sum(
WeatherDataType.PRECIPITATION, test_time, 3, False
)
mock_update.assert_not_called()

def test_not_in_timerange(self):
test_time = datetime(2000, 11, 7, 3, 30)
self.assertIsNone(
self.dwd_weather.get_timeframe_sum(WeatherDataType.PRECIPITATION, test_time,3)
self.assertEqual(
self.dwd_weather.get_timeframe_sum(
WeatherDataType.PRECIPITATION, test_time, 3
),
0.0,
)

@patch("simple_dwd_weatherforecast.dwdforecast.Weather.update", return_value=None)
def test_part_in_timerange(self, _):
test_time = datetime(2020, 11, 6, 1, 0)
self.assertEqual(
self.dwd_weather.get_timeframe_sum(
WeatherDataType.TEMPERATURE, test_time, 6
),
819.65,
)

@patch("simple_dwd_weatherforecast.dwdforecast.Weather.update", return_value=None)
def test_precipitation(self, _):
test_time = datetime(2020, 11, 6, 4, 0)
self.assertEqual(
self.dwd_weather.get_timeframe_sum(WeatherDataType.PRECIPITATION, test_time, 3),
self.dwd_weather.get_timeframe_sum(
WeatherDataType.PRECIPITATION, test_time, 3
),
1.36,
)

@patch("simple_dwd_weatherforecast.dwdforecast.Weather.update", return_value=None)
def test_temperature(self, _):
test_time = datetime(2020, 11, 6, 4, 0)
self.assertEqual(
self.dwd_weather.get_timeframe_sum(WeatherDataType.TEMPERATURE, test_time, 3),
self.dwd_weather.get_timeframe_sum(
WeatherDataType.TEMPERATURE, test_time, 3
),
819.65,
)

0 comments on commit 03952d9

Please sign in to comment.