registry.py 831 B

1234567891011121314151617181920212223242526272829
  1. # -*- coding: utf-8 -*-
  2. __all__ = ['Registry']
  3. def _register_generic(module_dict, module_name, module):
  4. assert module_name not in module_dict
  5. module_dict[module_name] = module
  6. class Registry(dict):
  7. def __init__(self, *args, **kwargs):
  8. super(Registry, self).__init__(*args, **kwargs)
  9. def register(self, module_name=None, module=None):
  10. # used as function call
  11. if module is not None:
  12. name = module_name if module_name else module.__name__
  13. _register_generic(self, name, module)
  14. return
  15. # used as decorator
  16. def register_fn(fn):
  17. name = module_name if module_name else fn.__name__
  18. _register_generic(self, name, fn)
  19. return fn
  20. return register_fn
  21. def list(self):
  22. return list(self.keys())