ReMe/experiencemaker/utils/registry.py
2025-07-10 20:39:58 +08:00

33 lines
929 B
Python

from typing import List
from loguru import logger
from experiencemaker.utils.common_utils import camel_to_snake
class Registry(object):
def __init__(self):
self._registry = {}
def register(self, name: str = ""):
def decorator(cls):
class_name = name if name else camel_to_snake(cls.__name__)
if class_name in self._registry:
logger.warning(f"name={class_name} is already registered, will be overwritten.")
self._registry[class_name] = cls
return cls
return decorator
def __getitem__(self, name: str):
if name not in self._registry:
raise KeyError(f"name={name} is not registered!")
return self._registry[name]
def __contains__(self, name: str):
return name in self._registry
@property
def registered_names(self) -> List[str]:
return sorted(self._registry.keys())