Skip to content

Commit e4db78f

Browse files
Merge pull request #22 from openclimatefix/feature/20-read-latest-input
add read last update data
2 parents 42a751c + e181379 commit e4db78f

File tree

2 files changed

+46
-0
lines changed

2 files changed

+46
-0
lines changed

nowcasting_datamodel/read/read.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
from nowcasting_datamodel.models import (
1414
ForecastSQL,
1515
ForecastValueSQL,
16+
InputDataLastUpdatedSQL,
1617
LocationSQL,
1718
MLModelSQL,
1819
PVSystemSQL,
@@ -22,6 +23,31 @@
2223
logger = logging.getLogger(__name__)
2324

2425

26+
def get_latest_input_data_last_updated(
27+
session: Session,
28+
) -> InputDataLastUpdatedSQL:
29+
"""
30+
Read last input data last updated
31+
32+
:param session: database session
33+
34+
return: Latest input data object
35+
"""
36+
37+
# start main query
38+
query = session.query(InputDataLastUpdatedSQL)
39+
40+
# this make the newest ones comes to the top
41+
query = query.order_by(InputDataLastUpdatedSQL.created_utc.desc())
42+
43+
# get all results
44+
input_data = query.first()
45+
46+
logger.debug("Found latest input data")
47+
48+
return input_data
49+
50+
2551
def get_latest_forecast(
2652
session: Session,
2753
gsp_id: Optional[int] = None,

tests/test_read.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import logging
2+
from datetime import datetime, timedelta, timezone
23

34
from nowcasting_datamodel.fake import (
45
make_fake_forecasts,
@@ -8,6 +9,7 @@
89
from nowcasting_datamodel.models import (
910
Forecast,
1011
ForecastValue,
12+
InputDataLastUpdatedSQL,
1113
LocationSQL,
1214
MLModel,
1315
PVSystem,
@@ -18,6 +20,7 @@
1820
get_all_locations,
1921
get_forecast_values,
2022
get_latest_forecast,
23+
get_latest_input_data_last_updated,
2124
get_latest_national_forecast,
2225
get_location,
2326
get_model,
@@ -137,3 +140,20 @@ def test_get_pv_system(db_session_pv):
137140
session=db_session_pv, provider=pv_system.provider, pv_system_id=pv_system.pv_system_id
138141
)
139142
assert PVSystem.from_orm(pv_system) == PVSystem.from_orm(pv_system_get)
143+
144+
145+
def test_get_latest_input_data_last_updated(db_session):
146+
147+
yesterday = datetime.now(tz=timezone.utc) - timedelta(hours=24)
148+
now = datetime.now(tz=timezone.utc)
149+
150+
input_data_last_updated_1 = InputDataLastUpdatedSQL(
151+
gsp=yesterday, nwp=yesterday, pv=yesterday, satellite=yesterday
152+
)
153+
input_data_last_updated_2 = InputDataLastUpdatedSQL(gsp=now, nwp=now, pv=now, satellite=now)
154+
155+
db_session.add_all([input_data_last_updated_1, input_data_last_updated_2])
156+
db_session.commit()
157+
158+
input_data_last_updated = get_latest_input_data_last_updated(session=db_session)
159+
assert input_data_last_updated.gsp.replace(tzinfo=None) == now.replace(tzinfo=None)

0 commit comments

Comments
 (0)