Skip to content

Commit e34c663

Browse files
committed
fixup! fixup! fixup! WIP attempt to shoehorn filter_temporal in TermporalDimension
1 parent 2e763db commit e34c663

4 files changed

Lines changed: 23 additions & 13 deletions

File tree

‎openeo/metadata/__init__.py‎

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,9 @@ def rename(self, name) -> Dimension:
9999

100100
class TemporalDimension(Dimension):
101101
def __init__(
102-
self, name: str, extent: Tuple[str | None, str | None] | List[str | None] | _NonConcreteExtent | _EmptyExtent
102+
self,
103+
name: str,
104+
extent: Tuple[str | None, str | None] | List[str | None] | _NonConcreteExtent | _EmptyExtent | None,
103105
):
104106
super().__init__(type="temporal", name=name)
105107
# TODO: ideally we do some validation/normalization of the extent, but this is an existing public API with not much wiggle room
@@ -118,16 +120,20 @@ def filter_temporal(self, extent: Tuple[str | None, str | None] | List[str | Non
118120
based on given temporal extent (start, end)
119121
"""
120122
if (interval1 := DateTimeInterval.try_from(self.extent)) and (interval2 := DateTimeInterval.try_from(extent)):
121-
intersection = interval1.intersection(interval2)
122-
if intersection:
123-
intersection = intersection.as_rfc3339()
123+
if intersection := interval1.intersection(interval2):
124+
new_extent = intersection.as_rfc3339()
124125
else:
125-
intersection = _EmptyExtent()
126+
new_extent = _EmptyExtent()
126127
elif isinstance(self.extent, _EmptyExtent) or isinstance(extent, _EmptyExtent):
127-
intersection = _EmptyExtent()
128+
new_extent = _EmptyExtent()
129+
elif extent is None:
130+
new_extent = self.extent
131+
elif self.extent is None:
132+
new_extent = extent
128133
else:
129-
intersection = _NonConcreteExtent()
130-
return TemporalDimension(name=self.name, extent=intersection)
134+
# As fallback, handle the extent as non-concrete
135+
new_extent = _NonConcreteExtent()
136+
return TemporalDimension(name=self.name, extent=new_extent)
131137

132138

133139
class Band(NamedTuple):
@@ -412,7 +418,9 @@ def get_band_index(self, band: Union[int, str]) -> int:
412418
return self.band_dimension.band_index(band)
413419

414420
def filter_temporal(self, extent: Tuple[str | None, str | None] | List[str | None] | Any) -> CubeMetadata:
415-
assert self.has_temporal_dimension()
421+
if not self.has_temporal_dimension():
422+
_log.warning("filter_temporal on cube metadata without temporal dimension. Returning unchanged metadata.")
423+
return self
416424
return self._clone_and_update(
417425
dimensions=[
418426
d.filter_temporal(extent=extent) if isinstance(d, TemporalDimension) else d for d in self._dimensions

‎openeo/metadata/_extents.py‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ class _NonConcreteExtent:
1717
- an empty extent
1818
"""
1919

20-
pass
20+
def __repr__(self) -> str:
21+
return "<_NonConcreteExtent>"
2122

2223

2324
class _EmptyExtent:
@@ -33,4 +34,5 @@ class _EmptyExtent:
3334
- a non-concrete extent (which is known to have coverage, but the actual bounds are unknown, dynamic, etc.)
3435
"""
3536

36-
pass
37+
def __repr__(self) -> str:
38+
return "<_EmptyExtent>"

‎openeo/metadata/_jupyter.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ def repr_html_dimensions(dimensions: List[Dimension]) -> str:
2727
header = ["Dimension", "Type", "Size", "Labels / Extent"]
2828
rows = []
2929
for dim in dimensions:
30-
row = [dim.name, dim.type]
30+
row = [dim.name, str(dim.type)]
3131
if isinstance(dim, BandDimension):
3232
row.extend([str(len(dim.bands)), "bands: " + ", ".join(dim.band_names)])
3333
elif isinstance(dim, SpatialDimension):

‎openeo/utils/datetime.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import datetime
55
from typing import Any, Tuple, Union
66

7-
import dateutil
7+
import dateutil.parser
88

99
from openeo.util import rfc3339
1010

0 commit comments

Comments
 (0)