Spaces:
Runtime error
Runtime error
| # Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. | |
| 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 | |