searchproviders.py 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. from django.core.exceptions import PermissionDenied
  2. from django.utils.module_loading import import_string
  3. from ..conf import settings
  4. class SearchProviders:
  5. def __init__(self, search_providers):
  6. self._initialized = False
  7. self._providers = []
  8. self.providers = search_providers
  9. def initialize_providers(self):
  10. if self._initialized:
  11. return
  12. self._initialized = True
  13. self._providers = list(map(import_string, self.providers))
  14. def get_providers(self, request):
  15. if not self._initialized:
  16. self.initialize_providers()
  17. providers = []
  18. for provider in self._providers:
  19. providers.append(provider(request))
  20. return providers
  21. def get_allowed_providers(self, request):
  22. allowed_providers = []
  23. for provider in self.get_providers(request):
  24. try:
  25. provider.allow_search()
  26. allowed_providers.append(provider)
  27. except PermissionDenied:
  28. pass
  29. return allowed_providers
  30. searchproviders = SearchProviders(settings.MISAGO_SEARCH_EXTENSIONS)