From e3fe04bb3bff91f46857b2fee4d698875ef18d22 Mon Sep 17 00:00:00 2001 From: vitous Date: Thu, 30 Jul 2026 15:23:23 +0200 Subject: [PATCH] =?UTF-8?q?`JCAMPDX`=20has=20`keys()`=20and=20`=5F=5Fgetit?= =?UTF-8?q?em=5F=5F`=20but=20no=20`=5F=5Fiter=5F=5F`=20=E2=80=94=20`for=20?= =?UTF-8?q?key=20in=20jcampdx`=20raises=20`KeyError:=200`=20Fixes=20#184?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- brukerapi/jcampdx.py | 6 ++++++ test/test_jcampdx.py | 20 ++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/brukerapi/jcampdx.py b/brukerapi/jcampdx.py index 1fc89e8..8b41a81 100644 --- a/brukerapi/jcampdx.py +++ b/brukerapi/jcampdx.py @@ -704,6 +704,12 @@ def __add__(self, other): def __getitem__(self, key): return self.params[key] + def __iter__(self): + return iter(self.params) + + def __len__(self): + return len(self.params) + def __contains__(self, item): return item in self.params diff --git a/test/test_jcampdx.py b/test/test_jcampdx.py index 8a0e0b0..3717fca 100644 --- a/test/test_jcampdx.py +++ b/test/test_jcampdx.py @@ -48,6 +48,26 @@ def test_jcampdx(test_jcampdx_data): assert value_ref == value_test +def test_jcampdx_iteration_and_length_follow_its_mapping_interface(tmp_path): + path = tmp_path / "visu_pars" + path.write_text( + "##TITLE=Parameter List\n" + "##JCAMPDX=4.24\n" + "##DATATYPE=Parameter Values\n" + "##$VisuCoreDim=2\n" + "##END=\n" + ) + jcamp = JCAMPDX(path) + + assert list(jcamp) == list(jcamp.keys()) + assert len(jcamp) == len(jcamp.keys()) + assert dict(jcamp) == {key: jcamp[key] for key in jcamp} + + jcamp.unload() + assert list(jcamp) == [] + assert len(jcamp) == 0 + + def test_a_string_is_read_without_its_delimiters(): """Spec 2.2: `<...>` delimits a string, so the brackets are not its value.