registry.py 1022 B

123456789101112131415161718192021222324252627282930313233
  1. import collections
  2. from extras.constants import EXTRAS_FEATURES
  3. class Registry(dict):
  4. """
  5. Central registry for registration of functionality. Once a store (key) is defined, it cannot be overwritten or
  6. deleted (although its value may be manipulated).
  7. """
  8. def __getitem__(self, key):
  9. try:
  10. return super().__getitem__(key)
  11. except KeyError:
  12. raise KeyError(f"Invalid store: {key}")
  13. def __setitem__(self, key, value):
  14. if key in self:
  15. raise KeyError(f"Store already set: {key}")
  16. super().__setitem__(key, value)
  17. def __delitem__(self, key):
  18. raise TypeError("Cannot delete stores from registry")
  19. # Initialize the global registry
  20. registry = Registry()
  21. registry['model_features'] = {
  22. feature: collections.defaultdict(set) for feature in EXTRAS_FEATURES
  23. }
  24. registry['denormalized_fields'] = collections.defaultdict(list)
  25. registry['search'] = collections.defaultdict(dict)
  26. registry['views'] = collections.defaultdict(dict)