Skip to content

Commit 2ccb36a

Browse files
committed
Add option to use period labels in widget instead of direct forecast time
1 parent 7abeffc commit 2ccb36a

File tree

4 files changed

+41
-19
lines changed

4 files changed

+41
-19
lines changed

forecastmanager/forecast_settings.py

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,10 @@ class ForecastSetting(ClusterableModel, BaseSiteSetting):
2727
related_name="weather_reports_page")
2828
show_conditions_label_on_widget = models.BooleanField(default=True,
2929
verbose_name=_("Show conditions label on widget"))
30-
30+
31+
use_period_labels = models.BooleanField(default=False,
32+
verbose_name=_("Use Period Labels inplace of forecast time"), )
33+
3134
edit_handler = TabbedInterface([
3235
ObjectList([
3336
InlinePanel('periods', heading=_("Forecast Periods"), label=_("Forecast Period")),
@@ -45,10 +48,11 @@ class ForecastSetting(ClusterableModel, BaseSiteSetting):
4548
FieldPanel('default_city'),
4649
FieldPanel('weather_detail_page'),
4750
FieldPanel('weather_reports_page'),
51+
FieldPanel('use_period_labels'),
4852
FieldPanel('show_conditions_label_on_widget'),
4953
], heading=_("Other Settings")),
5054
])
51-
55+
5256
@cached_property
5357
def data_parameter_values(self):
5458
data_parameters = self.data_parameters.all()
@@ -57,17 +61,17 @@ def data_parameter_values(self):
5761
params.append({"parameter": param.parameter, "name": param.name, "parameter_type": param.parameter_type,
5862
"parameter_unit": param.parameter_unit if param.parameter_unit else " "})
5963
return params
60-
64+
6165
@property
6266
def periods_as_choices(self):
6367
return [(period.id, period.label) for period in self.periods.all()]
64-
68+
6569
@property
6670
def effective_periods(self):
6771
return [
6872
{"label": period.label, "time": period.forecast_effective_time}
6973
for period in self.periods.all()]
70-
74+
7175
@property
7276
def weather_conditions_list(self):
7377
weather_conditions = self.weather_conditions.all()
@@ -78,15 +82,15 @@ class ForecastPeriod(Orderable):
7882
parent = ParentalKey(ForecastSetting, on_delete=models.CASCADE, related_name="periods")
7983
forecast_effective_time = models.TimeField(verbose_name=_("Forecast Effective Time"), unique=True)
8084
label = models.CharField(max_length=100, verbose_name=_("Label"))
81-
85+
8286
class Meta:
8387
ordering = ["forecast_effective_time"]
84-
88+
8589
panels = [
8690
FieldPanel('forecast_effective_time'),
8791
FieldPanel('label'),
8892
]
89-
93+
9094
def __str__(self):
9195
return self.label
9296

@@ -106,7 +110,7 @@ class ForecastDataParameters(Orderable):
106110
parameter_unit = models.CharField(_("Unit of measurement"), max_length=100, null=True, blank=True,
107111
help_text="e.g °C, %, mm, hPa, etc ")
108112
show_on_home_widget = models.BooleanField(default=True, verbose_name=_("Show on Home Widget"))
109-
113+
110114
panels = [
111115
FieldPanel('use_known_parameters'),
112116
FieldPanel('parameter', widget=DataParameterWidget),
@@ -115,24 +119,24 @@ class ForecastDataParameters(Orderable):
115119
FieldPanel('parameter_unit'),
116120
FieldPanel('show_on_home_widget'),
117121
]
118-
122+
119123
def __str__(self):
120124
return self.name
121-
125+
122126
@property
123127
def units(self):
124128
if self.parameter_unit:
125129
return self.parameter_unit
126-
130+
127131
if self.parameter_info:
128132
return self.parameter_info.get("units")
129-
133+
130134
return None
131-
135+
132136
@property
133137
def parameter_info(self):
134138
return WEATHER_PARAMETERS_AS_DICT.get(self.parameter)
135-
139+
136140
def parse_value(self, value):
137141
if self.parameter_type == "numeric":
138142
return float(value)
@@ -144,16 +148,16 @@ class WeatherCondition(Orderable):
144148
symbol = models.CharField(max_length=100, verbose_name=_("Weather Symbol"))
145149
label = models.CharField(max_length=100, unique=True, verbose_name=_("Label"))
146150
alias = models.CharField(max_length=100, blank=True, null=True, unique=True, verbose_name=_("Alias"))
147-
151+
148152
panels = [
149153
FieldPanel('symbol', widget=WeatherSymbolChooserWidget),
150154
FieldPanel('label'),
151155
FieldPanel('alias'),
152156
]
153-
157+
154158
def __str__(self):
155159
return self.label
156-
160+
157161
@property
158162
def icon_url(self):
159163
return static('forecastmanager/weathericons/{}.png'.format(self.symbol))
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 5.2.1 on 2025-07-21 08:18
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('forecastmanager', '0028_forecastsetting_show_conditions_label_on_widget'),
10+
]
11+
12+
operations = [
13+
migrations.AddField(
14+
model_name='forecastsetting',
15+
name='use_period_labels',
16+
field=models.BooleanField(default=False, verbose_name='Use Period Labels inplace of forecast time'),
17+
),
18+
]
1.68 KB
Loading

setup.cfg

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[metadata]
22
name = forecastmanager
3-
version = 0.5.6
3+
version = 0.5.7
44
description = Integration of Weather City Forecasts Manager in Wagtail Projects.
55
long_description = file:README.md
66
long_description_content_type = text/markdown

0 commit comments

Comments
 (0)