Skip to content

Commit 123e7a3

Browse files
Fix lazy open bug (#858)
* hopefully fix lazy loading bug * forgot DataArrays don't have a ._variable attribute * same problem but for Dataset variables * another fix * missing .items() * Access `_data` via xarray `variable` --------- Co-authored-by: Tom White <tom.e.white@gmail.com>
1 parent 42181d3 commit 123e7a3

1 file changed

Lines changed: 6 additions & 6 deletions

File tree

cubed/utils.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -238,16 +238,16 @@ def extract_array_names(frame: FrameType) -> dict[str, str]:
238238
type(obj).__module__.split(".")[0] == "xarray"
239239
and obj.__class__.__name__ == "DataArray"
240240
):
241-
if isinstance(obj.data, Array):
242-
array_names_to_variable_names[obj.data.name] = name
241+
# Note: We use ._data here instead of .data to avoid eager loading inside xarray.open_dataset internals - see https://github.com/cubed-dev/cubed/issues/855
242+
if isinstance(obj.variable._data, Array):
243+
array_names_to_variable_names[obj.variable._data.name] = name
243244
elif (
244245
type(obj).__module__.split(".")[0] == "xarray"
245246
and obj.__class__.__name__ == "Dataset"
246247
):
247-
for var in obj.data_vars:
248-
da = obj[var]
249-
if isinstance(da.data, Array):
250-
array_names_to_variable_names[da.data.name] = f"{name}.{var}"
248+
for var_name, var in obj.variables.items():
249+
if isinstance(var._data, Array):
250+
array_names_to_variable_names[var._data.name] = f"{name}.{var_name}"
251251
return array_names_to_variable_names
252252

253253

0 commit comments

Comments
 (0)