From d8cd78e8e536fcf73d662bbe5840b87c7d943c3d Mon Sep 17 00:00:00 2001 From: Axel Bocciarelli Date: Thu, 29 Aug 2024 16:19:31 +0200 Subject: [PATCH] Support fetching boolean data as binary --- h5grove/utils.py | 2 +- test/base_test.py | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/h5grove/utils.py b/h5grove/utils.py index e3094e9..65b9093 100644 --- a/h5grove/utils.py +++ b/h5grove/utils.py @@ -212,7 +212,7 @@ def _sanitize_dtype(dtype: np.dtype) -> np.dtype: :raises ValueError: If trying to sanitize a non-numeric numpy dtype """ - if dtype.kind not in ("f", "i", "u"): + if dtype.kind not in ("f", "i", "u", "b"): raise ValueError(f"Unsupported numpy dtype `{dtype}`. Expected numeric dtype.") # Convert to little endian diff --git a/test/base_test.py b/test/base_test.py index 582aefa..e263225 100644 --- a/test/base_test.py +++ b/test/base_test.py @@ -140,6 +140,27 @@ def test_data_on_slice_with_format_and_flatten(self, server, format_arg): assert retrieved_data - data[100, 0] < 1e-8 + def test_data_on_bool(self, server): + """Test /data/ endpoint on boolean dataset with format=bin""" + tested_h5entity_path = "/bool" + data = np.array([True, False, True, True]) + + filename = "test.h5" + with h5py.File(server.served_directory / filename, mode="w") as h5file: + dset = h5file.create_dataset(tested_h5entity_path, data=data) + dtype = dset.dtype + shape = dset.shape + + response = server.get( + f"/data/?{urlencode({'file': filename, 'path': tested_h5entity_path, 'format': 'bin'})}" + ) + + content_type = response.find_header_value("content-type") + assert content_type == "application/octet-stream" + + retrieved_data = decode_array_response(response, "bin", dtype.str, shape) + assert np.array_equal(retrieved_data, data) + def test_data_on_opaque(self, server): """Test /data/ endpoint on opaque dataset with format=bin""" tested_h5entity_path = "/opaque"