Last commit not found
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()) | |