from django.conf import settings from django.utils.importlib import import_module from misago.thread import local __all__ = ('merge_contexts', 'process_context', 'process_templates') def load_middlewares(): """ Populate _middlewares with list of template middlewares instances """ middlewares = [] for extension in settings.TEMPLATE_MIDDLEWARES: module = '.'.join(extension.split('.')[:-1]) extension = extension.split('.')[-1] module = import_module(module) middleware = getattr(module, extension) middlewares += (middleware(), ) return tuple(middlewares) _middlewares = load_middlewares() def merge_contexts(dictionary=None, context_instance=None): dictionary = dictionary or {} if not context_instance: return dictionary context_instance.update(dictionary) return context_instance _thread_local = local() def process_context(templates, dictionary=None, context_instance=None): context = merge_contexts(dictionary, context_instance) """ Put template context trough template middlewares """ if _thread_local.template_mutex: return context _thread_local.template_mutex = True for middleware in _middlewares: try: new_context = middleware.process_context(templates, context) if new_context: context = new_context except AttributeError: pass _thread_local.template_mutex = None return context def process_templates(templates, context): for middleware in _middlewares: try: new_templates = middleware.process_template(templates, context) if new_templates: return new_templates except AttributeError: pass return templates