From e65943b017ab4a860c7d4ce1550cbe926e557ac0 Mon Sep 17 00:00:00 2001 From: Vivian Nguyen Date: Wed, 15 Jan 2025 08:55:18 -0800 Subject: [PATCH 1/3] [python] Throw error in `SOMAVFSFilebuf.open` if file DNE --- apis/python/src/tiledbsoma/soma_vfs.cc | 7 ++++++- apis/python/tests/test_basic_anndata_io.py | 5 +++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/apis/python/src/tiledbsoma/soma_vfs.cc b/apis/python/src/tiledbsoma/soma_vfs.cc index cc0211df72..b9b45a52af 100644 --- a/apis/python/src/tiledbsoma/soma_vfs.cc +++ b/apis/python/src/tiledbsoma/soma_vfs.cc @@ -106,7 +106,12 @@ void load_soma_vfs(py::module& m) { .def( "open", [](SOMAVFSFilebuf& buf, const std::string& uri) { - return buf.open(uri, std::ios::in); + auto fb = buf.open(uri, std::ios::in); + if (fb == nullptr) { + TPY_ERROR_LOC( + std::format("URI {} is not a valid file", uri)); + } + return fb; }, py::call_guard()) .def("read", &SOMAVFSFilebuf::read, "size"_a = -1) diff --git a/apis/python/tests/test_basic_anndata_io.py b/apis/python/tests/test_basic_anndata_io.py index 9ba7f15904..3e26a2b864 100644 --- a/apis/python/tests/test_basic_anndata_io.py +++ b/apis/python/tests/test_basic_anndata_io.py @@ -1528,3 +1528,8 @@ def test_decat_append(tmp_path): obs_table.column("bool_enum").to_pylist() == bool_enum_values_over + bool_enum_values_under ) + + +def test_from_h5ad_bad_uri(): + with pytest.raises(tiledbsoma.SOMAError, match="URI /nonesuch is not a valid file"): + next(tiledbsoma.io._util.read_h5ad("/nonesuch").gen) From 5635723e3a2535ea1083e5bcd887ec4b01295b65 Mon Sep 17 00:00:00 2001 From: nguyenv Date: Wed, 15 Jan 2025 11:51:21 -0600 Subject: [PATCH 2/3] Update apis/python/src/tiledbsoma/soma_vfs.cc Co-authored-by: John Kerl --- apis/python/src/tiledbsoma/soma_vfs.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apis/python/src/tiledbsoma/soma_vfs.cc b/apis/python/src/tiledbsoma/soma_vfs.cc index b9b45a52af..dd57bf17d1 100644 --- a/apis/python/src/tiledbsoma/soma_vfs.cc +++ b/apis/python/src/tiledbsoma/soma_vfs.cc @@ -109,7 +109,7 @@ void load_soma_vfs(py::module& m) { auto fb = buf.open(uri, std::ios::in); if (fb == nullptr) { TPY_ERROR_LOC( - std::format("URI {} is not a valid file", uri)); + std::format("URI {} is not a valid URI", uri)); } return fb; }, From da22da9bda4b37d3f9da205d1541ddea1f88ca7c Mon Sep 17 00:00:00 2001 From: nguyenv Date: Wed, 15 Jan 2025 16:58:58 -0600 Subject: [PATCH 3/3] Update test_basic_anndata_io.py --- apis/python/tests/test_basic_anndata_io.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apis/python/tests/test_basic_anndata_io.py b/apis/python/tests/test_basic_anndata_io.py index 3e26a2b864..b08ac714eb 100644 --- a/apis/python/tests/test_basic_anndata_io.py +++ b/apis/python/tests/test_basic_anndata_io.py @@ -1531,5 +1531,5 @@ def test_decat_append(tmp_path): def test_from_h5ad_bad_uri(): - with pytest.raises(tiledbsoma.SOMAError, match="URI /nonesuch is not a valid file"): + with pytest.raises(tiledbsoma.SOMAError, match="URI /nonesuch is not a valid URI"): next(tiledbsoma.io._util.read_h5ad("/nonesuch").gen)