Skip to content

Commit

Permalink
Add specific error messages based on the mode the Array is opened (#2140
Browse files Browse the repository at this point in the history
)
  • Loading branch information
kounelisagis authored Jan 13, 2025
1 parent 610fd32 commit 7a22cc5
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 10 deletions.
30 changes: 26 additions & 4 deletions tiledb/dense_array.py
Original file line number Diff line number Diff line change
Expand Up @@ -165,8 +165,19 @@ def query(
... {"a1": np.zeros(5)})
"""
if not self.isopen or self.mode != "r":
raise tiledb.TileDBError("DenseArray must be opened in read mode")
if not self.isopen:
raise tiledb.TileDBError("Array is not opened")

if self.mode == "w":
raise tiledb.TileDBError(
"Write mode is not supported for queries on Dense Arrays"
)
elif self.mode == "d":
raise tiledb.TileDBError(
"Delete mode is not supported for queries on Dense Arrays"
)
elif self.mode != "r":
raise tiledb.TileDBError("Invalid mode for queries on Dense Arrays")

return Query(
self,
Expand Down Expand Up @@ -215,8 +226,19 @@ def subarray(self, selection, attrs=None, cond=None, coords=False, order=None):
... OrderedDict({'a1': np.zeros(5)}))
"""
if not self.isopen or self.mode != "r":
raise tiledb.TileDBError("DenseArray must be opened in read mode")
if not self.isopen:
raise tiledb.TileDBError("Array is not opened")

if self.mode == "w":
raise tiledb.TileDBError(
"Write mode is not supported for subarray queries on Dense Arrays"
)
elif self.mode == "d":
raise tiledb.TileDBError(
"Delete mode is not supported for subarray queries on Dense Arrays"
)
elif self.mode != "r":
raise tiledb.TileDBError("Invalid mode for subarray query on Dense Array")

layout = lt.LayoutType.UNORDERED
if order is None or order == "C":
Expand Down
20 changes: 16 additions & 4 deletions tiledb/sparse_array.py
Original file line number Diff line number Diff line change
Expand Up @@ -372,10 +372,15 @@ def query(
... OrderedDict({'a1': np.array([1, 2])}))
"""
if not self.isopen or self.mode not in ("r", "d"):
if not self.isopen:
raise tiledb.TileDBError("Array is not opened")

if self.mode == "w":
raise tiledb.TileDBError(
"SparseArray must be opened in read or delete mode"
"Write mode is not supported for queries on Sparse Arrays"
)
elif self.mode not in ("r", "d"):
raise tiledb.TileDBError("Invalid mode for queries on Sparse Arrays")

# backwards compatibility
_coords = coords
Expand Down Expand Up @@ -484,8 +489,15 @@ def subarray(self, selection, coords=True, attrs=None, cond=None, order=None):
"""
from .subarray import Subarray

if not self.isopen or self.mode not in ("r", "d"):
raise tiledb.TileDBError("SparseArray is not opened in read or delete mode")
if not self.isopen:
raise tiledb.TileDBError("Array is not opened")

if self.mode == "w":
raise tiledb.TileDBError(
"Write mode is not supported for subarray queries on Sparse Arrays"
)
elif self.mode not in ("r", "d"):
raise tiledb.TileDBError("Invalid mode for subarray query on Sparse Array")

layout = lt.LayoutType.UNORDERED
if order is None or order == "U":
Expand Down
4 changes: 2 additions & 2 deletions tiledb/tests/test_query_condition.py
Original file line number Diff line number Diff line change
Expand Up @@ -1022,7 +1022,7 @@ def test_basic_sparse(self):

with pytest.raises(
tiledb.TileDBError,
match="SparseArray must be opened in read or delete mode",
match="Write mode is not supported for queries on Sparse Arrays",
):
A.query(cond=qc).submit()

Expand Down Expand Up @@ -1052,7 +1052,7 @@ def test_basic_dense(self):
with tiledb.open(path, "d") as A:
with pytest.raises(
tiledb.TileDBError,
match="DenseArray must be opened in read mode",
match="Delete mode is not supported for queries on Dense Arrays",
):
A.query()

Expand Down

0 comments on commit 7a22cc5

Please sign in to comment.