anchorxia's picture
add musev
96d7ad8
raw
history blame
1.22 kB
import logging
logger = logging.getLogger(__name__)
class Register:
def __init__(self, registry_name):
self._dict = {}
self._name = registry_name
def __setitem__(self, key, value):
if not callable(value):
raise Exception(f"Value of a Registry must be a callable!\nValue: {value}")
# 优先使用自定义的name,其次使用类名或者函数名。
if "name" in value.__dict__:
key = value.name
elif key is None:
key = value.__name__
if key in self._dict:
logger.warning("Key %s already in registry %s." % (key, self._name))
self._dict[key] = value
def register(self, target):
"""Decorator to register a function or class."""
def add(key, value):
self[key] = value
return value
if callable(target):
# @reg.register
return add(None, target)
# @reg.register('alias')
return lambda x: add(target, x)
def __getitem__(self, key):
return self._dict[key]
def __contains__(self, key):
return key in self._dict
def keys(self):
"""key"""
return self._dict.keys()