Source code for claf.config.registry


import logging

from claf.config.pattern import Singleton

logger = logging.getLogger(__name__)


[docs]class Registry(metaclass=Singleton): """ Registry class (Singleton) """ def __init__(self): self._name_to_subclass = { "component": {}, "reader": {}, "machine": {}, "model": {}, "token": {}, }
[docs] def add(self, name, obj): component_type, component_name = self._split_component_type_and_name(name) if component_name in self._name_to_subclass[component_type]: logger.info( f"{component_name} is already included in Registry. It override with {obj}." ) self._name_to_subclass[component_type][component_name] = obj
[docs] def get(self, name): component_type, component_name = self._split_component_type_and_name(name) if component_type not in self._name_to_subclass: raise ValueError(f"There is no {component_type} in _name_to_subclass.") if component_name not in self._name_to_subclass[component_type]: raise ValueError(f"There is no {component_name} object in {component_type}.") return self._name_to_subclass[component_type][component_name]
def _split_component_type_and_name(self, name): if ":" in name: names = name.split(":") return names[0], names[1] else: raise ValueError("do not recognize component_type.")