def _get_template_engine(ctx): """ Initialize the template engine environment """ global engine_cache if engine_cache is not None: return engine_cache loader_map = {} loader_map[""] = FileSystemLoader( os.path.join(Project.get().project_path, "templates")) for name, module in Project.get().modules.items(): template_dir = os.path.join(module._path, "templates") if os.path.isdir(template_dir): loader_map[name] = FileSystemLoader(template_dir) # init the environment env = Environment(loader=PrefixLoader(loader_map), undefined=jinja2.StrictUndefined) env.context_class = ResolverContext # register all plugins as filters for name, cls in ctx.get_compiler().get_plugins().items(): def curywrapper(func): def safewrapper(*args): return JinjaDynamicProxy.return_value(func(*args)) return safewrapper env.filters[name.replace("::", ".")] = curywrapper(cls) engine_cache = env return env