diff --git a/xarray/core/datatree.py b/xarray/core/datatree.py index 2b3179cb79d..bd583ac86cb 100644 --- a/xarray/core/datatree.py +++ b/xarray/core/datatree.py @@ -895,6 +895,8 @@ def __setitem__( # TODO should possibly deal with hashables in general? # path-like: a name of a node/variable, or path to a node/variable path = NodePath(key) + if isinstance(value, Dataset): + value = DataTree(dataset=value) return self._set_item(path, value, new_nodes_along_path=True) else: raise ValueError("Invalid format for key") diff --git a/xarray/tests/test_datatree.py b/xarray/tests/test_datatree.py index 22c2cae7d02..4e22ba57e2e 100644 --- a/xarray/tests/test_datatree.py +++ b/xarray/tests/test_datatree.py @@ -513,14 +513,12 @@ def test_setitem_dataset_on_this_node(self): results["."] = data assert_identical(results.to_dataset(), data) - @pytest.mark.xfail(reason="assigning Datasets doesn't yet create new nodes") def test_setitem_dataset_as_new_node(self): data = xr.Dataset({"temp": [0, 50]}) folder1 = DataTree(name="folder1") folder1["results"] = data assert_identical(folder1["results"].to_dataset(), data) - @pytest.mark.xfail(reason="assigning Datasets doesn't yet create new nodes") def test_setitem_dataset_as_new_node_requiring_intermediate_nodes(self): data = xr.Dataset({"temp": [0, 50]}) folder1 = DataTree(name="folder1")