middlewares.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. from django.conf import settings
  2. from django.utils.importlib import import_module
  3. from misago.thread import local
  4. __all__ = ('merge_contexts', 'process_context', 'process_templates')
  5. def load_middlewares():
  6. """
  7. Populate _middlewares with list of template middlewares instances
  8. """
  9. middlewares = []
  10. for extension in settings.TEMPLATE_MIDDLEWARES:
  11. module = '.'.join(extension.split('.')[:-1])
  12. extension = extension.split('.')[-1]
  13. module = import_module(module)
  14. middleware = getattr(module, extension)
  15. middlewares += (middleware(), )
  16. return tuple(middlewares)
  17. _middlewares = load_middlewares()
  18. def merge_contexts(dictionary=None, context_instance=None):
  19. dictionary = dictionary or {}
  20. if not context_instance:
  21. return dictionary
  22. context_instance.update(dictionary)
  23. return context_instance
  24. _thread_local = local()
  25. def process_context(templates, dictionary=None, context_instance=None):
  26. context = merge_contexts(dictionary, context_instance)
  27. """
  28. Put template context trough template middlewares
  29. """
  30. print _thread_local.__dict__.keys()
  31. if _thread_local.misago_template_mutex:
  32. return context
  33. _thread_local.misago_template_mutex = True
  34. for middleware in _middlewares:
  35. try:
  36. new_context = middleware.process_context(templates, context)
  37. if new_context:
  38. context = new_context
  39. except AttributeError:
  40. pass
  41. _thread_local.misago_template_mutex = None
  42. return context
  43. def process_templates(templates, context):
  44. for middleware in _middlewares:
  45. try:
  46. new_templates = middleware.process_template(templates, context)
  47. if new_templates:
  48. return new_templates
  49. except AttributeError:
  50. pass
  51. return templates