[packet_interface] Reject a duplicate layer type name

Every module in layers/ is imported automatically, so two modules
registering the same name silently replaced one with the other, in an
order decided by pkgutil. Registration now raises, so the mistake is
found when the configuration is loaded.

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
clydebarrow
2026-10-19 14:40:33 +11:00
co-authored by Claude Code
parent 0fe7d81a56
commit 7f2cd1fe0d
2 changed files with 18 additions and 0 deletions
@@ -51,6 +51,10 @@ class LayerKind:
"""Register a type with its schema."""
def decorator(build: LayerBuilder) -> LayerBuilder:
if name in self.types:
raise ValueError(
f"{self.key} layer type '{name}' is already registered"
)
self.types[name] = LayerType(schema, build)
return build
+14
View File
@@ -103,3 +103,17 @@ def test_registered_type_selectable(setup_core) -> None:
assert RELIABILITY.get_type(config).build is build
finally:
del RELIABILITY.types["test"]
def test_duplicate_layer_type_rejected(setup_core) -> None:
"""Registering a type under a name already in use is an error, not a silent replacement."""
async def build(config: dict, lower: Any) -> Any:
return lower
RELIABILITY.register("test", schema=cv.Schema({}))(build)
try:
with pytest.raises(ValueError, match="already registered"):
RELIABILITY.register("test", schema=cv.Schema({}))(build)
finally:
del RELIABILITY.types["test"]