Skip to content

Commit 19061e7

Browse files
committed
Move call to _ensure_time_compatible
Move the call to xcube.core.tile._ensure_time_compatible from _get_var_2d_array to parse_non_spatial_labels.
1 parent 87942e9 commit 19061e7

File tree

3 files changed

+24
-9
lines changed

3 files changed

+24
-9
lines changed

test/core/test_tile.py

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,17 @@ def test_invalid(self):
105105
self.assertEqual("'jetzt' is not a valid value for dimension 'time'",
106106
f'{cm.exception}')
107107

108+
def test_ensure_timezone_naive(self):
109+
da_tznaive = xr.DataArray(
110+
np.zeros((3,3,3)),
111+
coords=self.coords,
112+
dims=self.dims)
113+
labels = parse_non_spatial_labels(dict(time='2000-01-02T00:00:00Z'),
114+
dims=da_tznaive.dims,
115+
coords=da_tznaive.coords,
116+
var=da_tznaive)
117+
self.assertIsNone(pd.Timestamp(labels['time']).tzinfo)
118+
108119

109120
class EnsureTimeCompatibleTest(unittest.TestCase):
110121
da_tznaive = xr.DataArray(
@@ -131,11 +142,11 @@ def test_both_tzaware(self):
131142

132143
def test_tznaive_array_tzaware_indexer(self):
133144
self.assertTrue(
134-
self._are_times_equal(
145+
_are_times_equal(
135146
self.labels_tznaive,
136147
_ensure_time_compatible(self.da_tznaive,
137148
self.labels_tzaware)))
138149

139-
@staticmethod
140-
def _are_times_equal(labels1, labels2):
141-
return pd.Timestamp(labels1['time']) == pd.Timestamp(labels2['time'])
150+
151+
def _are_times_equal(labels1, labels2):
152+
return pd.Timestamp(labels1['time']) == pd.Timestamp(labels2['time'])

xcube/core/tile.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -242,8 +242,7 @@ def _get_var_2d_array(var: xr.DataArray,
242242
if labels_are_indices:
243243
array = var.isel(**labels)
244244
else:
245-
labels_safe_time = _ensure_time_compatible(var, labels)
246-
array = var.sel(method='nearest', **labels_safe_time)
245+
array = var.sel(method='nearest', **labels)
247246
else:
248247
raise exception_type(f'Variable "{var.name}" of dataset "{ds_id}" '
249248
'must be an N-D Dataset with N >= 2, '
@@ -328,7 +327,8 @@ def parse_non_spatial_labels(
328327
dims: Sequence[Hashable],
329328
coords: Mapping[Hashable, xr.DataArray],
330329
allow_slices: bool = False,
331-
exception_type: type = ValueError
330+
exception_type: type = ValueError,
331+
var: xr.DataArray = None
332332
) -> Mapping[str, Any]:
333333
xy_var_names = get_dataset_xy_var_names(coords, must_exist=False)
334334
if xy_var_names is None:
@@ -384,4 +384,7 @@ def to_datetime(datetime_str: str, dim_var: xr.DataArray):
384384
raise exception_type(f'{label_str!r} is not a valid'
385385
f' value for dimension {dim!r}') from e
386386

387-
return parsed_labels
387+
if var is not None:
388+
return _ensure_time_compatible(var, parsed_labels)
389+
else:
390+
return parsed_labels

xcube/webapi/controllers/tiles.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,8 @@ def get_dataset_tile(ctx: ServiceContext,
7979
var.dims,
8080
var.coords,
8181
allow_slices=False,
82-
exception_type=ServiceBadRequestError)
82+
exception_type=ServiceBadRequestError,
83+
var=var)
8384

8485
return get_ml_dataset_tile(ml_dataset,
8586
var_name,

0 commit comments

Comments
 (0)