registry.py 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import collections
  2. from django.utils.translation import gettext as _
  3. class Registry(dict):
  4. """
  5. Central registry for registration of functionality. Once a Registry is initialized, keys cannot be added or
  6. removed (though the value of each key is mutable).
  7. """
  8. def __getitem__(self, key):
  9. try:
  10. return super().__getitem__(key)
  11. except KeyError:
  12. raise KeyError(_("Invalid store: {key}").format(key=key))
  13. def __setitem__(self, key, value):
  14. raise TypeError(_("Cannot add stores to registry after initialization"))
  15. def __delitem__(self, key):
  16. raise TypeError(_("Cannot delete stores from registry"))
  17. # Initialize the global registry
  18. registry = Registry({
  19. 'counter_fields': collections.defaultdict(dict),
  20. 'data_backends': dict(),
  21. 'denormalized_fields': collections.defaultdict(list),
  22. 'event_types': dict(),
  23. 'model_features': dict(),
  24. 'models': collections.defaultdict(set),
  25. 'plugins': dict(),
  26. 'request_processors': list(),
  27. 'search': dict(),
  28. 'system_jobs': dict(),
  29. 'tables': collections.defaultdict(dict),
  30. 'views': collections.defaultdict(dict),
  31. 'webhook_callbacks': list(),
  32. 'widgets': dict(),
  33. })