Skip to content

Commit 344f21e

Browse files
committed
try out with both delay minutes
1 parent 8d3f8fd commit 344f21e

File tree

5 files changed

+37
-36
lines changed

5 files changed

+37
-36
lines changed

src/nwp_consumer/cmd/main.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,6 @@ def parse_env() -> Adaptors:
3030
model_repository_adaptor = repositories.raw_repositories.ECMWFRealTimeS3RawRepository
3131
case "metoffice-datahub":
3232
model_repository_adaptor = repositories.raw_repositories.MetOfficeDatahubRawRepository
33-
case "metoffice-datahub-global":
34-
model_repository_adaptor \
35-
= repositories.raw_repositories.MetOfficeDatahubGlobalRawRepository
3633
case "ecmwf-mars":
3734
model_repository_adaptor = repositories.raw_repositories.ECMWFMARSRawRepository
3835
case _ as mr:

src/nwp_consumer/internal/entities/modelmetadata.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,10 @@ class ModelMetadata:
7474
- `entities.coordinates.NWPDimensionCoordinateMap.chunking`
7575
"""
7676

77+
delay_minutes: int | None = None
78+
"""The model delay in minutes. This can be taken from the repository metadata.
79+
"""
80+
7781
def __str__(self) -> str:
7882
"""Return a pretty-printed string representation of the metadata."""
7983
pretty: str = "".join(
@@ -404,7 +408,8 @@ class Models:
404408
for lon in np.arange(-179.929687, 179.929688 + 0.140625, 0.140625)
405409
],
406410
),
407-
running_hours=[0, 6, 12, 18],
411+
running_hours=[0, 12],
412+
delay_minutes=300,
408413
)
409414
"""MetOffice's Unified Model, in the Global configuration, at a resolution of 10km."""
410415

@@ -438,6 +443,7 @@ class Models:
438443
x_osgb=[int(x) for x in np.arange(start=-239000, stop=857000, step=2000)],
439444
),
440445
running_hours=list(range(0, 24, 6)),
446+
delay_minutes=120,
441447
)
442448
"""MetOffice's Unified Model in the UKV configuration, at a resolution of 2km"""
443449

src/nwp_consumer/internal/entities/repometadata.py

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,14 @@
1313

1414
import dataclasses
1515
import datetime as dt
16+
import logging
1617
import os
1718

1819
from .modelmetadata import ModelMetadata
1920
from .postprocess import PostProcessOptions
2021

22+
log = logging.getLogger("nwp-consumer")
23+
2124

2225
@dataclasses.dataclass(slots=True)
2326
class RawRepositoryMetadata:
@@ -40,11 +43,13 @@ class RawRepositoryMetadata:
4043
but rather are defined by pre-selected agreements with the provider.
4144
"""
4245

43-
delay_minutes: int
46+
delay_minutes: int | None
4447
"""The approximate model delay in minutes.
4548
4649
This delay is the time between the running of the model and the time
47-
at which the data is actually available."""
50+
at which the data is actually available.
51+
This can be None, and then the delay minutes is take from the sepecific model.
52+
"""
4853

4954
required_env: list[str]
5055
"""Environment variables required for usage."""
@@ -65,6 +70,24 @@ class RawRepositoryMetadata:
6570
available_models: dict[str, ModelMetadata]
6671
"""A dictionary of available models and their metadata."""
6772

73+
def __post_init__(self) -> None:
74+
"""Post-initialization to set delay_minutes if not set."""
75+
self.set_delay_minutes()
76+
77+
78+
def set_delay_minutes(self) -> None:
79+
"""Set the delay_minutes from the model if not already set."""
80+
if self.delay_minutes is None:
81+
# get the delay minutes from the models
82+
log.info(f"Setting delay_minutes from model metadata for {self.model().name}")
83+
delay_minutes = self.model().delay_minutes
84+
if delay_minutes is None:
85+
message = f"Repository {self.name} and \
86+
Model {self.model().name} has no delay_minutes set. Set one of these."
87+
raise Exception(message)
88+
89+
self.delay_minutes = delay_minutes
90+
6891
def determine_latest_it_from(self, t: dt.datetime, running_hours: list[int]) -> dt.datetime:
6992
"""Determine the latest available initialization time from a given time.
7093

src/nwp_consumer/internal/repositories/raw_repositories/__init__.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,13 @@
77
from .ecmwf_realtime import ECMWFRealTimeS3RawRepository
88
from .ecmwf_mars import ECMWFMARSRawRepository
99
from .noaa_s3 import NOAAS3RawRepository
10-
from .mo_datahub import MetOfficeDatahubRawRepository, MetOfficeDatahubGlobalRawRepository
10+
from .mo_datahub import MetOfficeDatahubRawRepository
1111

1212
__all__ = [
1313
"CEDARawRepository",
1414
"ECMWFRealTimeS3RawRepository",
1515
"NOAAS3RawRepository",
1616
"MetOfficeDatahubRawRepository",
1717
"ECMWFMARSRawRepository",
18-
"MetOfficeDatahubGlobalRawRepository",
1918
]
2019

src/nwp_consumer/internal/repositories/raw_repositories/mo_datahub.py

Lines changed: 4 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -156,13 +156,15 @@ def repository() -> entities.RawRepositoryMetadata:
156156
name="MetOffice-Weather-Datahub",
157157
is_archive=False,
158158
is_order_based=True,
159-
delay_minutes=int(os.getenv("METOFFICE_DELAY_MINUTES", 120)),
159+
delay_minutes=None,
160160
max_connections=10,
161161
required_env=["METOFFICE_API_KEY", "METOFFICE_ORDER_ID"],
162162
optional_env={"METOFFICE_DATASPEC": "1.1.0"},
163163
postprocess_options=entities.PostProcessOptions(),
164164
available_models={
165-
"default": entities.Models.MO_UM_UKV_2KM_LAEA,
165+
"default": entities.Models.MO_UM_GLOBAL_10KM.with_region("india"),
166+
"um-global-10km-india": entities.Models.MO_UM_GLOBAL_10KM.with_region("india"),
167+
"um-global-10km-uk": entities.Models.MO_UM_GLOBAL_10KM.with_region("uk"),
166168
"um-ukv-2km": entities.Models.MO_UM_UKV_2KM_LAEA,
167169
},
168170
)
@@ -515,29 +517,3 @@ def _convert_ukv(path: pathlib.Path) -> ResultE[list[xr.DataArray]]:
515517
)
516518

517519
return Success([da])
518-
519-
520-
class MetOfficeDatahubGlobalRawRepository(MetOfficeDatahubRawRepository):
521-
"""Repository implementation for data from MetOffice's Global DataHub service.
522-
523-
See above for more information.
524-
"""
525-
@staticmethod
526-
@override
527-
def repository() -> entities.RawRepositoryMetadata:
528-
return entities.RawRepositoryMetadata(
529-
name="MetOffice-Weather-Datahub",
530-
is_archive=False,
531-
is_order_based=True,
532-
delay_minutes=60*5,
533-
max_connections=10,
534-
required_env=["METOFFICE_API_KEY", "METOFFICE_ORDER_ID"],
535-
optional_env={"METOFFICE_DATASPEC": "1.1.0"},
536-
postprocess_options=entities.PostProcessOptions(),
537-
available_models={
538-
"default": entities.Models.MO_UM_GLOBAL_10KM.with_region("india"),
539-
"um-global-10km-india": entities.Models.MO_UM_GLOBAL_10KM.with_region("india"),
540-
"um-global-10km-uk": entities.Models.MO_UM_GLOBAL_10KM.with_region("uk"),
541-
},
542-
)
543-

0 commit comments

Comments
 (0)