def _get_or_build_default_environment(registry): environment = registry.queryUtility(IJinja2Environment) if environment is not None: return environment settings = registry.settings kw = {} package = _caller_package(('pyramid_jinja2', 'jinja2', 'pyramid.config')) reload_templates = asbool(settings.get('reload_templates', False)) autoescape = asbool(settings.get('jinja2.autoescape', True)) domain = settings.get('jinja2.i18n.domain', 'messages') debug = asbool(settings.get('debug_templates', False)) input_encoding = settings.get('jinja2.input_encoding', 'utf-8') extensions = parse_multiline(settings.get('jinja2.extensions', '')) if 'jinja2.ext.i18n' not in extensions: extensions.append('jinja2.ext.i18n') directories = parse_multiline(settings.get('jinja2.directories') or '') directories = [abspath_from_resource_spec(d, package) for d in directories] loader = SmartAssetSpecLoader( directories, encoding=input_encoding, debug=debug) # bytecode caching bytecode_caching = asbool(settings.get('jinja2.bytecode_caching', True)) bytecode_caching_directory = settings.get('jinja2.bytecode_caching_directory', None) if bytecode_caching: kw['bytecode_cache'] = FileSystemBytecodeCache(bytecode_caching_directory) defaults_prefix = 'jinja2.defaults.' for k, v in settings.items(): if k.startswith(defaults_prefix): kw[k[len(defaults_prefix):]] = v environment = Environment(loader=loader, auto_reload=reload_templates, autoescape=autoescape, extensions=extensions, **kw) # register pyramid i18n functions wrapper = GetTextWrapper(domain=domain) environment.install_gettext_callables(wrapper.gettext, wrapper.ngettext) # register global repository for templates if package is not None: environment._default_package = package.__name__ filters = parse_filters(settings.get('jinja2.filters', '')) environment.filters.update(filters) registry.registerUtility(environment, IJinja2Environment) return registry.queryUtility(IJinja2Environment)
def _get_or_build_default_environment(registry): environment = registry.queryUtility(IJinja2Environment) if environment is not None: return environment settings = registry.settings kw = {} package = _caller_package(('pyramid_jinja2', 'jinja2', 'pyramid.config')) reload_templates = asbool(settings.get('reload_templates', False)) autoescape = asbool(settings.get('jinja2.autoescape', True)) domain = settings.get('jinja2.i18n.domain', 'messages') debug = asbool(settings.get('debug_templates', False)) input_encoding = settings.get('jinja2.input_encoding', 'utf-8') extensions = parse_multiline(settings.get('jinja2.extensions', '')) if 'jinja2.ext.i18n' not in extensions: extensions.append('jinja2.ext.i18n') undefined = parse_undefined(settings.get('jinja2.undefined', '')) directories = parse_multiline(settings.get('jinja2.directories') or '') directories = [abspath_from_resource_spec(d, package) for d in directories] loader = SmartAssetSpecLoader(directories, encoding=input_encoding, debug=debug) # bytecode caching bytecode_caching = asbool(settings.get('jinja2.bytecode_caching', True)) bytecode_caching_directory = settings.get( 'jinja2.bytecode_caching_directory', None) if bytecode_caching: kw['bytecode_cache'] = FileSystemBytecodeCache( bytecode_caching_directory) environment = Environment(loader=loader, auto_reload=reload_templates, autoescape=autoescape, extensions=extensions, undefined=undefined, **kw) # register pyramid i18n functions wrapper = GetTextWrapper(domain=domain) environment.install_gettext_callables(wrapper.gettext, wrapper.ngettext) # register global repository for templates if package is not None: environment._default_package = package.__name__ filters = parse_filters(settings.get('jinja2.filters', '')) environment.filters.update(filters) registry.registerUtility(environment, IJinja2Environment) return registry.queryUtility(IJinja2Environment)
def _setup_environment(registry): settings = registry.settings reload_templates = asbool(settings.get('reload_templates', False)) autoescape = asbool(settings.get('jinja2.autoescape', True)) extensions = _get_extensions(registry) filters = parse_filters(settings.get('jinja2.filters', '')) environment = Environment(loader=directory_loader_factory(settings), auto_reload=reload_templates, autoescape=autoescape, extensions=extensions) hook = GetTextHook() environment.install_gettext_callables(hook.gettext, hook.ngettext) environment.pyramid_jinja2_extensions = extensions package = _caller_package(('pyramid_jinja2', 'jinja2', 'pyramid.config')) if package is not None: environment._default_package = package.__name__ environment.filters.update(filters) registry.registerUtility(environment, IJinja2Environment)
def _get_or_build_default_environment(registry): environment = registry.queryUtility(IJinja2Environment) if environment is not None: return environment settings = registry.settings kw = {} package = _caller_package(('pyramid_jinja2', 'jinja2', 'pyramid.config')) debug = asbool(settings.get('debug_templates', False)) # get basic environment jinja2 settings kw.update(_parse_config_for_settings(settings)) reload_templates = settings.get('reload_templates', None) if reload_templates is None: # since version 1.5, both settings are supported reload_templates = settings.get('pyramid.reload_templates', False) reload_templates = asbool(reload_templates) undefined = parse_undefined(settings.get('jinja2.undefined', '')) # get supplementary junja2 settings input_encoding = settings.get('jinja2.input_encoding', 'utf-8') domain = settings.get('jinja2.i18n.domain', package and package.__name__ or 'messages') # get jinja2 extensions extensions = parse_multiline(settings.get('jinja2.extensions', '')) if 'jinja2.ext.i18n' not in extensions: extensions.append('jinja2.ext.i18n') # get jinja2 directories directories = parse_multiline(settings.get('jinja2.directories') or '') directories = [abspath_from_resource_spec(d, package) for d in directories] loader = SmartAssetSpecLoader( directories, encoding=input_encoding, debug=debug) # get jinja2 bytecode caching settings and set up bytecaching bytecode_caching = asbool(settings.get('jinja2.bytecode_caching', True)) bytecode_caching_directory = \ settings.get('jinja2.bytecode_caching_directory', None) if bytecode_caching: kw['bytecode_cache'] = \ FileSystemBytecodeCache(bytecode_caching_directory) # clear cache on exit atexit.register(kw['bytecode_cache'].clear) # should newstyle gettext calls be enabled? newstyle = asbool(settings.get('jinja2.newstyle', False)) environment = Environment(loader=loader, auto_reload=reload_templates, extensions=extensions, undefined=undefined, **kw) # register pyramid i18n functions wrapper = GetTextWrapper(domain=domain) environment.install_gettext_callables(wrapper.gettext, wrapper.ngettext, newstyle=newstyle) # register global repository for templates if package is not None: environment._default_package = package.__name__ #add custom jinja2 filters filters = parse_config(settings.get('jinja2.filters', '')) environment.filters.update(filters) #add custom jinja2 tests tests = parse_config(settings.get('jinja2.tests', '')) environment.tests.update(tests) # add custom jinja2 functions jinja_globals = parse_config(settings.get('jinja2.globals', '')) environment.globals.update(jinja_globals) registry.registerUtility(environment, IJinja2Environment) return registry.queryUtility(IJinja2Environment)
def _get_or_build_default_environment(registry): environment = registry.queryUtility(IJinja2Environment) if environment is not None: return environment settings = registry.settings kw = {} package = _caller_package(('pyramid_jinja2', 'jinja2', 'pyramid.config')) debug = asbool(settings.get('debug_templates', False)) # get basic environment jinja2 settings kw.update(_parse_config_for_settings(settings)) reload_templates = settings.get('reload_templates', None) if reload_templates is None: # since version 1.5, both settings are supported reload_templates = settings.get('pyramid.reload_templates', False) reload_templates = asbool(reload_templates) undefined = parse_undefined(settings.get('jinja2.undefined', '')) # get supplementary junja2 settings input_encoding = settings.get('jinja2.input_encoding', 'utf-8') domain = settings.get('jinja2.i18n.domain', package and package.__name__ or 'messages') # get jinja2 extensions extensions = parse_multiline(settings.get('jinja2.extensions', '')) if 'jinja2.ext.i18n' not in extensions: extensions.append('jinja2.ext.i18n') # get jinja2 directories directories = parse_multiline(settings.get('jinja2.directories') or '') directories = [abspath_from_resource_spec(d, package) for d in directories] loader = SmartAssetSpecLoader(directories, encoding=input_encoding, debug=debug) # get jinja2 bytecode caching settings and set up bytecaching bytecode_caching = asbool(settings.get('jinja2.bytecode_caching', True)) bytecode_caching_directory = \ settings.get('jinja2.bytecode_caching_directory', None) if bytecode_caching: kw['bytecode_cache'] = \ FileSystemBytecodeCache(bytecode_caching_directory) # clear cache on exit atexit.register(kw['bytecode_cache'].clear) # should newstyle gettext calls be enabled? newstyle = asbool(settings.get('jinja2.newstyle', False)) environment = Environment(loader=loader, auto_reload=reload_templates, extensions=extensions, undefined=undefined, **kw) # register pyramid i18n functions wrapper = GetTextWrapper(domain=domain) environment.install_gettext_callables(wrapper.gettext, wrapper.ngettext, newstyle=newstyle) # register global repository for templates if package is not None: environment._default_package = package.__name__ #add custom jinja2 filters filters = parse_config(settings.get('jinja2.filters', '')) environment.filters.update(filters) #add custom jinja2 tests tests = parse_config(settings.get('jinja2.tests', '')) environment.tests.update(tests) # add custom jinja2 functions jinja_globals = parse_config(settings.get('jinja2.globals', '')) environment.globals.update(jinja_globals) registry.registerUtility(environment, IJinja2Environment) return registry.queryUtility(IJinja2Environment)