|
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. creating 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): |
|
|
|
if module is not None: |
|
_register_generic(self, module_name, module) |
|
return |
|
|
|
|
|
def register_fn(fn): |
|
_register_generic(self, module_name, fn) |
|
return fn |
|
|
|
return register_fn |
|
|