|
19 | 19 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
20 | 20 | # SOFTWARE. |
21 | 21 |
|
22 | | -from typing import Any, List, Tuple, Container, Union, Iterator, Dict |
23 | | - |
24 | 22 | import logging |
25 | | -import xarray as xr |
| 23 | +from typing import Any, Container, Dict, Iterator, List, Optional, Tuple |
| 24 | + |
26 | 25 | import numpy as np |
27 | 26 | import pandas as pd |
28 | | - |
| 27 | +import xarray as xr |
29 | 28 | from xarray.core.dataset import DataVariables |
30 | 29 | from xcube.core.gridmapping import GridMapping |
31 | 30 | from xcube.core.store import ( |
32 | 31 | DATASET_TYPE, |
33 | 32 | DataDescriptor, |
34 | 33 | DataOpener, |
| 34 | + DatasetDescriptor, |
35 | 35 | DataStore, |
36 | 36 | DataStoreError, |
37 | 37 | DataType, |
38 | 38 | DataTypeLike, |
39 | | - DatasetDescriptor, |
40 | 39 | VariableDescriptor, |
41 | 40 | ) |
42 | 41 | from xcube.util.assertions import assert_not_none |
@@ -87,19 +86,18 @@ def _get_var_descriptors( |
87 | 86 | return var_descriptors |
88 | 87 |
|
89 | 88 | @staticmethod |
90 | | - def _determine_time_period(data: xr.Dataset): |
| 89 | + def _determine_time_period(data: xr.Dataset) -> Optional[str]: |
91 | 90 | if "time" in data and len(data["time"].values) > 1: |
92 | | - time_diff = ( |
93 | | - data["time"].diff(dim=data["time"].dims[0]).values.astype(np.float64) |
94 | | - ) |
| 91 | + time_diff = data["time"].diff(dim=data["time"].dims[0]).values |
95 | 92 | time_res = time_diff[0] |
96 | | - time_regular = np.allclose(time_res, time_diff, 1e-8) |
| 93 | + time_regular = np.allclose(time_diff, time_res, rtol=1e-8, atol=0) |
97 | 94 | if time_regular: |
98 | 95 | time_period = pd.to_timedelta(time_res).isoformat() |
99 | 96 | # remove leading P |
100 | 97 | time_period = time_period[1:] |
101 | 98 | # removing sub-day precision |
102 | 99 | return time_period.split("T")[0] |
| 100 | + return None |
103 | 101 |
|
104 | 102 | def describe_data(self, data_id: str) -> DatasetDescriptor: |
105 | 103 | xr_ds = self.cmems.open_dataset(data_id) |
@@ -228,11 +226,21 @@ def _get_opener( |
228 | 226 | return self._dataset_opener |
229 | 227 |
|
230 | 228 | def get_data_ids( |
231 | | - self, data_type: DataTypeLike = None, include_attrs: Container[str] = None |
232 | | - ) -> Union[Iterator[str], Iterator[Tuple[str, Dict[str, Any]]]]: |
| 229 | + self, |
| 230 | + data_type: DataTypeLike = None, |
| 231 | + include_attrs: Container[str] | bool = False, |
| 232 | + ) -> Iterator[str] | Iterator[Tuple[str, Dict[str, Any]]]: |
| 233 | + |
233 | 234 | dataset_ids_with_titles = self._dataset_opener.cmems.get_datasets_with_titles() |
234 | | - return_tuples = include_attrs is not None |
235 | | - include_titles = return_tuples and "title" in include_attrs |
| 235 | + |
| 236 | + if isinstance(include_attrs, bool): |
| 237 | + return_tuples = include_attrs |
| 238 | + include_titles = include_attrs |
| 239 | + elif isinstance(include_attrs, Container): |
| 240 | + return_tuples = True |
| 241 | + include_titles = "title" in include_attrs |
| 242 | + else: |
| 243 | + raise ValueError(f"Invalid type {type(include_attrs)} for include_attrs") |
236 | 244 |
|
237 | 245 | for dataset in dataset_ids_with_titles: |
238 | 246 | data_id = dataset["dataset_id"] |
|
0 commit comments