Skip to content

Commit 1b296f5

Browse files
committed
Merge branch 'datamodel-filter'
2 parents 5902204 + 5d6d7c8 commit 1b296f5

File tree

1 file changed

+15
-19
lines changed

1 file changed

+15
-19
lines changed

nowcasting_datamodel/read/read.py

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -136,21 +136,35 @@ def get_latest_forecast(
136136
return: List of forecasts objects from database
137137
"""
138138

139+
logger.debug("getting latest forecast")
140+
139141
# start main query
140142
query = session.query(ForecastSQL)
141143
order_by_items = []
142144

143145
if historic:
144146
query = query.filter(ForecastSQL.historic == true())
147+
join_object = ForecastSQL.forecast_values_latest
148+
forecast_value_model = ForecastValueLatestSQL
145149
else:
146150
query = query.filter(ForecastSQL.historic == false())
151+
join_object = ForecastSQL.forecast_values
152+
forecast_value_model = ForecastValueSQL
147153

148154
# filter on gsp_id
149155
if gsp_id is not None:
150156
query = query.join(LocationSQL)
151157
query = query.filter(LocationSQL.gsp_id == gsp_id)
152158
order_by_items.append(LocationSQL.gsp_id)
153159

160+
if start_target_time is not None:
161+
query = (
162+
query.join(join_object)
163+
.filter(forecast_value_model.target_time >= start_target_time)
164+
.options(contains_eager(join_object))
165+
.populate_existing()
166+
)
167+
154168
order_by_items.append(ForecastSQL.created_utc.desc())
155169

156170
# this make the newest ones comes to the top
@@ -159,27 +173,9 @@ def get_latest_forecast(
159173
# get all results
160174
forecasts = query.first()
161175

162-
# filter on target time
163-
if start_target_time is not None:
164-
165-
# get the correct forecast value table
166-
if historic:
167-
data_model_forecast_value = ForecastValueLatestSQL
168-
else:
169-
data_model_forecast_value = ForecastValueSQL
170-
171-
forecast_values = (
172-
session.query(data_model_forecast_value)
173-
.filter(data_model_forecast_value.target_time >= start_target_time)
174-
.filter(forecasts.id == data_model_forecast_value.forecast_id)
175-
.order_by(data_model_forecast_value.target_time)
176-
.all()
177-
)
178-
179-
forecasts.forecast_values_latest = forecast_values
180-
181176
# sort list
182177
if forecasts is not None:
178+
logger.debug("sorting 'forecast_values_latest' values")
183179
if forecasts.forecast_values_latest is not None:
184180
forecasts.forecast_values_latest = sorted(
185181
forecasts.forecast_values_latest, key=lambda d: d.target_time

0 commit comments

Comments
 (0)