Registry which support registering modules and group them by a keyname If group name is not provided, modules will be registered to default group.
| 12 | |
| 13 | |
| 14 | class Registry(object): |
| 15 | """ Registry which support registering modules and group them by a keyname |
| 16 | |
| 17 | If group name is not provided, modules will be registered to default group. |
| 18 | """ |
| 19 | |
| 20 | def __init__(self, name: str): |
| 21 | self._name = name |
| 22 | self._modules = {default_group: {}} |
| 23 | |
| 24 | def __repr__(self): |
| 25 | format_str = self.__class__.__name__ + f' ({self._name})\n' |
| 26 | for group_name, group in self._modules.items(): |
| 27 | format_str += f'group_name={group_name}, '\ |
| 28 | f'modules={list(group.keys())}\n' |
| 29 | |
| 30 | return format_str |
| 31 | |
| 32 | @property |
| 33 | def name(self): |
| 34 | return self._name |
| 35 | |
| 36 | @property |
| 37 | def modules(self): |
| 38 | return self._modules |
| 39 | |
| 40 | def list(self): |
| 41 | """ logging the list of module in current registry |
| 42 | """ |
| 43 | for group_name, group in self._modules.items(): |
| 44 | logger.info(f'group_name={group_name}') |
| 45 | for m in group.keys(): |
| 46 | logger.info(f'\t{m}') |
| 47 | logger.info('') |
| 48 | |
| 49 | def get(self, module_key, group_key=default_group): |
| 50 | if group_key not in self._modules: |
| 51 | return None |
| 52 | else: |
| 53 | return self._modules[group_key].get(module_key, None) |
| 54 | |
| 55 | def _register_module(self, |
| 56 | group_key=default_group, |
| 57 | module_name=None, |
| 58 | module_cls=None, |
| 59 | force=False): |
| 60 | assert isinstance(group_key, |
| 61 | str), 'group_key is required and must be str' |
| 62 | |
| 63 | if group_key not in self._modules: |
| 64 | self._modules[group_key] = dict() |
| 65 | |
| 66 | # Some registered module_cls can be function type. |
| 67 | # if not inspect.isclass(module_cls): |
| 68 | # raise TypeError(f'module is not a class type: {type(module_cls)}') |
| 69 | |
| 70 | if module_name is None: |
| 71 | module_name = module_cls.__name__ |
no outgoing calls
searching dependent graphs…