| | 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 |
| |
|