diff --git a/doc/whats-new.rst b/doc/whats-new.rst index d1910a70523..cd7fc8795de 100644 --- a/doc/whats-new.rst +++ b/doc/whats-new.rst @@ -65,6 +65,8 @@ Bug fixes By `András Gunyhó `_. - Avoid use of random numbers in `test_weighted.test_weighted_operations_nonequal_coords` (:issue:`6504`, :pull:`6961`). By `Luke Conibear `_. +- ``Dataset.encoding['source']`` now exists when reading from a Path object (:issue:`5888`, :pull:`6974`) + By `Thomas Coleman `_. Documentation ~~~~~~~~~~~~~ diff --git a/xarray/backends/api.py b/xarray/backends/api.py index ca040306bf0..d2929519852 100644 --- a/xarray/backends/api.py +++ b/xarray/backends/api.py @@ -358,9 +358,9 @@ def _dataset_from_backend_dataset( ds.set_close(backend_ds._close) - # Ensure source filename always stored in dataset object (GH issue #2550) - if "source" not in ds.encoding and isinstance(filename_or_obj, str): - ds.encoding["source"] = filename_or_obj + # Ensure source filename always stored in dataset object + if "source" not in ds.encoding and isinstance(filename_or_obj, (str, os.PathLike)): + ds.encoding["source"] = _normalize_path(filename_or_obj) return ds diff --git a/xarray/tests/test_backends.py b/xarray/tests/test_backends.py index 4f5434ec05e..e9ea8608b81 100644 --- a/xarray/tests/test_backends.py +++ b/xarray/tests/test_backends.py @@ -5068,6 +5068,17 @@ def test_source_encoding_always_present() -> None: assert ds.encoding["source"] == tmp +@requires_scipy_or_netCDF4 +def test_source_encoding_always_present_with_pathlib() -> None: + # Test for GH issue #5888. + rnddata = np.random.randn(10) + original = Dataset({"foo": ("x", rnddata)}) + with create_tmp_file() as tmp: + original.to_netcdf(tmp) + with open_dataset(Path(tmp)) as ds: + assert ds.encoding["source"] == tmp + + def _assert_no_dates_out_of_range_warning(record): undesired_message = "dates out of range" for warning in record: