From c5628232e4082d529c8df5349320e2fe1c8107e7 Mon Sep 17 00:00:00 2001 From: Thomas A Caswell Date: Fri, 16 Jun 2017 22:04:42 -0400 Subject: [PATCH] API: raise if kwds are ignored in require_dataset This raises if user kwds will be silently ignored. --- h5py/_hl/group.py | 5 ++++- h5py/tests/old/test_dataset.py | 6 ++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/h5py/_hl/group.py b/h5py/_hl/group.py index 4328d7c1b..64f1bbc47 100644 --- a/h5py/_hl/group.py +++ b/h5py/_hl/group.py @@ -123,9 +123,12 @@ def require_dataset(self, name, shape, dtype, exact=False, **kwds): shape or dtype don't match according to the above rules. """ with phil: - if not name in self: + if name not in self: return self.create_dataset(name, *(shape, dtype), **kwds) + if kwds: + raise RuntimeError('Keyword arguments are ignored') + dset = self[name] if not isinstance(dset, dataset.Dataset): raise TypeError("Incompatible object (%s) already exists" % dset.__class__.__name__) diff --git a/h5py/tests/old/test_dataset.py b/h5py/tests/old/test_dataset.py index 193b22e30..945c77459 100644 --- a/h5py/tests/old/test_dataset.py +++ b/h5py/tests/old/test_dataset.py @@ -170,6 +170,12 @@ def test_create_existing(self): dset2 = self.f.require_dataset('foo', (10, 3), 'f') self.assertEqual(dset, dset2) + def test_kwds_fail(self): + """ require_dataset yields existing dataset """ + self.f.require_dataset('foo', (10, 3), 'f', data=np.ones((10, 3))) + with self.assertRaises(RuntimeError): + self.f.require_dataset('foo', (10, 3), 'f', data=np.ones((10, 3))) + def test_shape_conflict(self): """ require_dataset with shape conflict yields TypeError """ self.f.create_dataset('foo', (10, 3), 'f')