mirror of
https://github.com/agentscope-ai/ReMe.git
synced 2026-09-23 00:43:18 +00:00
33 lines
929 B
Python
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())
|