Skip to content

Commit 6a2aae7

Browse files
Fix issue with wildcards in timerange after introducing data sources (#2900)
Co-authored-by: Valeriu Predoi <[email protected]>
1 parent d34b25c commit 6a2aae7

File tree

4 files changed

+32
-7
lines changed

4 files changed

+32
-7
lines changed

esmvalcore/_recipe/check.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -239,8 +239,9 @@ def data_availability(dataset: Dataset, log: bool = True) -> None:
239239
msg = f"Missing data for {dataset.summary(True)}"
240240
raise InputFilesNotFound(msg)
241241

242-
if "timerange" not in facets or any(
243-
"timerange" not in f.facets for f in input_files
242+
if (
243+
"*" in facets.get("timerange", "*") # type: ignore[operator]
244+
or any("timerange" not in f.facets for f in input_files)
244245
):
245246
return
246247

esmvalcore/dataset.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -230,10 +230,6 @@ def _get_available_datasets(self) -> Iterator[Dataset]:
230230
"""
231231
dataset_template = self.copy()
232232
dataset_template.supplementaries = []
233-
if _isglob(dataset_template.facets.get("timerange")):
234-
# Remove wildcard `timerange` facet, because data finding cannot
235-
# handle it
236-
dataset_template.facets.pop("timerange")
237233

238234
seen = set()
239235
partially_defined = []
@@ -960,6 +956,7 @@ def _update_timerange(self) -> None:
960956
dataset.supplementaries = []
961957
dataset.augment_facets()
962958
if "timerange" not in dataset.facets:
959+
# timerange facet may be removed in augment_facets for time-independent data.
963960
self.facets.pop("timerange", None)
964961
return
965962

esmvalcore/local.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -594,7 +594,7 @@ def find_data(self, **facets: FacetValue) -> list[LocalFile]:
594594
file.facets.update(
595595
self._path2facets(
596596
file,
597-
add_timerange="timerange" in facets,
597+
add_timerange=facets.get("frequency", "fx") != "fx",
598598
),
599599
)
600600
file.ignore_warnings = self.ignore_warnings

tests/integration/dataset/test_dataset.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,33 @@ def example_data_source(tmp_path: Path) -> dict[str, str]:
6161
}
6262

6363

64+
@pytest.mark.parametrize("timerange", ["1850/185002", "*", "*/P2M", "1860/*"])
65+
def test_find_data(
66+
example_data_source: dict[str, str],
67+
session: Session,
68+
timerange: str,
69+
) -> None:
70+
tas = Dataset(
71+
short_name="tas",
72+
mip="Amon",
73+
project="CMIP5",
74+
dataset="CanESM2",
75+
ensemble="r1i1p1",
76+
exp="historical",
77+
timerange=timerange,
78+
)
79+
tas.add_supplementary(short_name="areacella", mip="fx", ensemble="r0i0p0")
80+
tas.session = session
81+
tas.session["projects"]["CMIP5"]["data"] = {
82+
"example-data-source": example_data_source,
83+
}
84+
85+
assert len(tas.files) == 1
86+
assert "timerange" in tas.files[0].facets
87+
assert len(tas.supplementaries[0].files) == 1
88+
assert "timerange" not in tas.supplementaries[0].files
89+
90+
6491
def test_load(example_data_source: dict[str, str], session: Session) -> None:
6592
tas = Dataset(
6693
short_name="tas",

0 commit comments

Comments
 (0)