aboutsummaryrefslogtreecommitdiff
path: root/src/mlia/utils/registry.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/mlia/utils/registry.py')
-rw-r--r--src/mlia/utils/registry.py31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/mlia/utils/registry.py b/src/mlia/utils/registry.py
new file mode 100644
index 0000000..9b25a81
--- /dev/null
+++ b/src/mlia/utils/registry.py
@@ -0,0 +1,31 @@
+# SPDX-FileCopyrightText: Copyright 2022, Arm Limited and/or its affiliates.
+# SPDX-License-Identifier: Apache-2.0
+"""Generic registry class."""
+from __future__ import annotations
+
+from typing import Generic
+from typing import TypeVar
+
+T = TypeVar("T")
+
+
+class Registry(Generic[T]):
+ """Generic registry for name-config pairs."""
+
+ def __init__(self) -> None:
+ """Create an empty registry."""
+ self.items: dict[str, T] = {}
+
+ def __str__(self) -> str:
+ """List all registered items."""
+ return "\n".join(
+ f"- {name}: {item}"
+ for name, item in sorted(self.items.items(), key=lambda v: v[0])
+ )
+
+ def register(self, name: str, item: T) -> bool:
+ """Register an item: returns `False` if already registered."""
+ if name in self.items:
+ return False # already registered
+ self.items[name] = item
+ return True