Shokoufehhh's picture
Upload 40 files
05b4fca verified
raw
history blame
1.25 kB
import warnings
from typing import Callable
class Registry:
def __init__(self, managed_thing: str):
"""
Create a new registry.
Args:
managed_thing: A string describing what type of thing is managed by this registry. Will be used for
warnings and errors, so it's a good idea to keep this string globally unique and easily understood.
"""
self.managed_thing = managed_thing
self._registry = {}
def register(self, name: str) -> Callable:
def inner_wrapper(wrapped_class) -> Callable:
if name in self._registry:
warnings.warn(f"{self.managed_thing} with name '{name}' doubly registered, old class will be replaced.")
self._registry[name] = wrapped_class
return wrapped_class
return inner_wrapper
def get_by_name(self, name: str):
"""Get a managed thing by name."""
if name in self._registry:
return self._registry[name]
else:
raise ValueError(f"{self.managed_thing} with name '{name}' unknown.")
def get_all_names(self):
"""Get the list of things' names registered to this registry."""
return list(self._registry.keys())