From 5743bcd45965b36ad80dd6a954cbb01bbdcaf694 Mon Sep 17 00:00:00 2001 From: russlan23 Date: Sun, 9 Aug 2026 07:07:03 +0400 Subject: [PATCH] Improve ModelRegistry item assignment error Signed-off-by: russlan23 --- ccflow/base.py | 4 ++++ ccflow/tests/test_base_registry.py | 9 +++++++++ 2 files changed, 13 insertions(+) diff --git a/ccflow/base.py b/ccflow/base.py index 5df0a3c..11e7a7c 100644 --- a/ccflow/base.py +++ b/ccflow/base.py @@ -584,6 +584,10 @@ def __getitem__(self, item) -> ModelType: else: raise KeyError(f"No registered model found by the name '{item}' in registry '{self._debug_name}'") + def __setitem__(self, name: str, model: BaseModel) -> None: + """Reject item assignment in favor of the registry's controlled API.""" + raise TypeError("ModelRegistry does not support item assignment; use the 'add' method instead.") + def __iter__(self): for key, model in self._models.items(): yield key diff --git a/ccflow/tests/test_base_registry.py b/ccflow/tests/test_base_registry.py index 36e8288..1e5e73e 100644 --- a/ccflow/tests/test_base_registry.py +++ b/ccflow/tests/test_base_registry.py @@ -197,6 +197,15 @@ def test_add_twice(self): self.assertListEqual(m.get_registrations(), [(r, "foo"), (r, "bar"), (r2, "foo2"), (r2, "bar2")]) self.assertListEqual(m.get_registered_names(), ["/foo", "/bar"]) + def test_setitem_directs_users_to_add(self): + registry = ModelRegistry(name="test") + model = MyTestModel(a="test", b=0.0) + + with self.assertRaisesRegex(TypeError, "use the 'add' method"): + registry["foo"] = model + + self.assertEqual(registry.models, {}) + def test_add_two_places(self): m = MyTestModel(a="test", b=0.0) r1 = ModelRegistry(name="test")