@@ -99,7 +99,9 @@ def rename(self, name) -> Dimension:
9999
100100class 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
133139class 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
0 commit comments