Spaces:
Runtime error
Runtime error
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() | |