39 lines
1.3 KiB
Python
39 lines
1.3 KiB
Python
def _register_generic(module_dict, module_name, module):
|
|
assert module_name not in module_dict
|
|
module_dict[module_name] = module
|
|
|
|
|
|
class Registry(dict):
|
|
'''
|
|
A helper class for managing registering modules, it extends a dictionary
|
|
and provides a register functions.
|
|
Eg. creeting a registry:
|
|
some_registry = Registry({"default": default_module})
|
|
There're two ways of registering new modules:
|
|
1): normal way is just calling register function:
|
|
def foo():
|
|
...
|
|
some_registry.register("foo_module", foo)
|
|
2): used as decorator when declaring the module:
|
|
@some_registry.register("foo_module")
|
|
@some_registry.register("foo_modeul_nickname")
|
|
def foo():
|
|
...
|
|
Access of module is just like using a dictionary, eg:
|
|
f = some_registry["foo_modeul"]
|
|
'''
|
|
def __init__(self, *args, **kwargs):
|
|
super(Registry, self).__init__(*args, **kwargs)
|
|
|
|
def register(self, module_name, module=None):
|
|
# used as function call
|
|
if module is not None:
|
|
_register_generic(self, module_name, module)
|
|
return
|
|
|
|
# used as decorator
|
|
def register_fn(fn):
|
|
_register_generic(self, module_name, fn)
|
|
return fn
|
|
|
|
return register_fn |