Skip to content

Commit 7a3452d

Browse files
committed
Add support for filter name as filter_id argument for
from_filter_options
1 parent ab7ce2f commit 7a3452d

File tree

2 files changed

+19
-2
lines changed

2 files changed

+19
-2
lines changed

src/hdf5plugin/_utils.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,14 +230,22 @@ def get_filters(
230230
return tuple(filter_classes)
231231

232232

233-
def from_filter_options(filter_id: int, filter_options: tuple[int, ...]) -> FilterBase:
233+
def from_filter_options(
234+
filter_id: int | str, filter_options: tuple[int, ...]
235+
) -> FilterBase:
234236
"""Returns corresponding compression filter configuration instance.
235237
236238
:param filter_id: HDF5 compression filter ID
237239
:param filter_options: Compression filter configuration as stored in HDF5 datasets
238240
:raises ValueError: Unsupported or invalid filter_id, filter_options combination
239241
:raises NotImplementedError: Given filter or version of the filter is not supported
240242
"""
243+
if isinstance(filter_id, str):
244+
try:
245+
filter_id = FILTERS[filter_id]
246+
except KeyError:
247+
raise ValueError(f"Unsupported filter id: {filter_id}")
248+
241249
for filter_cls in FILTER_CLASSES:
242250
if filter_id == filter_cls.filter_id:
243251
return filter_cls._from_filter_options(filter_options)

src/hdf5plugin/test.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -499,7 +499,7 @@ def testStringsZstd(self):
499499
self._test_strings("zstd")
500500

501501

502-
class TestFromFilterOptions(unittest.TestCase):
502+
class TestFromFilterOptionsMethods(unittest.TestCase):
503503
"""Test _from_filter_options methods"""
504504

505505
def testBitshuffle(self):
@@ -690,6 +690,14 @@ def testZstd(self):
690690
self.assertEqual(compression_filter.filter_options, expected_options)
691691

692692

693+
class TestFromFilterOptions(unittest.TestCase):
694+
"""Test from_filter_options function"""
695+
696+
def test_filter_name(self):
697+
compression_filter = hdf5plugin.from_filter_options("bzip2", (5,))
698+
self.assertEqual(compression_filter, hdf5plugin.BZip2(blocksize=5))
699+
700+
693701
class TestFromFilterOptionsRoundtrip(unittest.TestCase):
694702
"""Test from_filter_options function roundtrip"""
695703

@@ -1027,6 +1035,7 @@ def suite() -> unittest.TestSuite:
10271035
for cls in (
10281036
TestHDF5PluginRW,
10291037
TestStrings,
1038+
TestFromFilterOptionsMethods,
10301039
TestFromFilterOptions,
10311040
TestFromFilterOptionsRoundtrip,
10321041
TestPackage,

0 commit comments

Comments
 (0)