@@ -136,21 +136,35 @@ def get_latest_forecast(
136
136
return: List of forecasts objects from database
137
137
"""
138
138
139
+ logger .debug ("getting latest forecast" )
140
+
139
141
# start main query
140
142
query = session .query (ForecastSQL )
141
143
order_by_items = []
142
144
143
145
if historic :
144
146
query = query .filter (ForecastSQL .historic == true ())
147
+ join_object = ForecastSQL .forecast_values_latest
148
+ forecast_value_model = ForecastValueLatestSQL
145
149
else :
146
150
query = query .filter (ForecastSQL .historic == false ())
151
+ join_object = ForecastSQL .forecast_values
152
+ forecast_value_model = ForecastValueSQL
147
153
148
154
# filter on gsp_id
149
155
if gsp_id is not None :
150
156
query = query .join (LocationSQL )
151
157
query = query .filter (LocationSQL .gsp_id == gsp_id )
152
158
order_by_items .append (LocationSQL .gsp_id )
153
159
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
+
154
168
order_by_items .append (ForecastSQL .created_utc .desc ())
155
169
156
170
# this make the newest ones comes to the top
@@ -159,27 +173,9 @@ def get_latest_forecast(
159
173
# get all results
160
174
forecasts = query .first ()
161
175
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
-
181
176
# sort list
182
177
if forecasts is not None :
178
+ logger .debug ("sorting 'forecast_values_latest' values" )
183
179
if forecasts .forecast_values_latest is not None :
184
180
forecasts .forecast_values_latest = sorted (
185
181
forecasts .forecast_values_latest , key = lambda d : d .target_time
0 commit comments