Skip to content

Commit b68e967

Browse files
committed
fix for getFilters
1 parent 678025b commit b68e967

File tree

4 files changed

+58
-1
lines changed

4 files changed

+58
-1
lines changed

src/h5json/filters.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,9 @@ def getFiltersJson(create_props, supported_filters=None):
148148
msg = f"filter {filter} not recognized"
149149
raise ValueError(msg)
150150

151+
# will replace options list with specified options
152+
del item["options"]
153+
151154
# copy any filter specified options
152155
filter_class = item["class"]
153156
if filter_class == "H5Z_FILTER_DEFLATE":

src/h5json/hdf5db.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -838,7 +838,7 @@ def createDataset(
838838
if cpl:
839839
if "filters" in cpl:
840840
if self.writer:
841-
supported_filters = self.writer.getSupportedFilters()
841+
supported_filters = self.writer.getFilters()
842842
else:
843843
supported_filters = ()
844844
# validate and normalize supplied filter property list

test/unit/dset_util_test.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,15 @@ def testFilterValidation(self):
134134
except ValueError:
135135
pass # invalid filter name
136136

137+
deflate_filter = {'class': 'H5Z_FILTER_DEFLATE', 'id': 1, 'level': 9, 'name': 'deflate'}
138+
fletcher_filter = {'class': 'H5Z_FILTER_FLETCHER32', 'id': 3, 'name': 'fletcher32'}
139+
filters = [fletcher_filter, deflate_filter]
140+
cpl["filters"] = filters
141+
try:
142+
validateDatasetCreationProps(cpl, type_json, dset_json["shape"])
143+
except ValueError:
144+
self.assertTrue(False) # shouldn't raise exception
145+
137146
def testGuessChunk(self):
138147

139148
typesize = "H5T_VARIABLE"

test/unit/h5py_writer_test.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -635,6 +635,51 @@ def testReaderWithUpdate(self):
635635
else:
636636
self.assertEqual(data[i, j], 0)
637637

638+
def testCompression(self):
639+
640+
filepath = "test/unit/out/h5py_writer_test_testCompression.h5"
641+
if os.path.isfile(filepath):
642+
os.remove(filepath) # cleanup any previous run
643+
644+
db = Hdf5db(app_logger=self.log)
645+
db.writer = H5pyWriter(filepath, no_data=False)
646+
root_id = db.open()
647+
self.assertEqual(db.getObjectIdByPath("/"), root_id)
648+
g1_id = db.createGroup()
649+
db.createHardLink(root_id, "g1", g1_id)
650+
651+
layout = {"class": "H5D_CHUNKED", "dims": (10, 1)}
652+
gzip_filter = {
653+
"class": "H5Z_FILTER_DEFLATE",
654+
"id": 1,
655+
"level": 9,
656+
"name": "deflate",
657+
}
658+
cpl = {"layout": layout, "filters": [gzip_filter, ]}
659+
dset_id = db.createDataset(shape=(10, 10), dtype=np.int32, cpl=cpl)
660+
arr = np.zeros((10, 10), dtype=np.int32)
661+
for i in range(10):
662+
for j in range(10):
663+
arr[i, j] = i * j
664+
sel_all = selections.select((10, 10), ...)
665+
db.setDatasetValues(dset_id, sel_all, arr)
666+
db.createHardLink(g1_id, "dset1.1.1", dset_id)
667+
db.close()
668+
669+
# open file with h5py and verify changes
670+
with h5py.File(filepath) as f:
671+
672+
self.assertTrue("g1" in f)
673+
674+
g1 = f["g1"]
675+
self.assertEqual(len(g1), 1)
676+
self.assertTrue("dset1.1.1" in g1)
677+
dset = g1["dset1.1.1"]
678+
self.assertEqual(dset.shape, (10, 10))
679+
for i in range(10):
680+
for j in range(10):
681+
self.assertEqual(dset[i, j], i * j)
682+
638683

639684
if __name__ == "__main__":
640685
# setup test files

0 commit comments

Comments
 (0)