| # -*- coding: utf-8 -*- | 
 | """ | 
 |     jinja2 | 
 |     ~~~~~~ | 
 |  | 
 |     Jinja2 is a template engine written in pure Python.  It provides a | 
 |     Django inspired non-XML syntax but supports inline expressions and | 
 |     an optional sandboxed environment. | 
 |  | 
 |     Nutshell | 
 |     -------- | 
 |  | 
 |     Here a small example of a Jinja2 template:: | 
 |  | 
 |         {% extends 'base.html' %} | 
 |         {% block title %}Memberlist{% endblock %} | 
 |         {% block content %} | 
 |           <ul> | 
 |           {% for user in users %} | 
 |             <li><a href="{{ user.url }}">{{ user.username }}</a></li> | 
 |           {% endfor %} | 
 |           </ul> | 
 |         {% endblock %} | 
 |  | 
 |  | 
 |     :copyright: (c) 2017 by the Jinja Team. | 
 |     :license: BSD, see LICENSE for more details. | 
 | """ | 
 | __docformat__ = 'restructuredtext en' | 
 | __version__ = '2.10' | 
 |  | 
 | # high level interface | 
 | from jinja2.environment import Environment, Template | 
 |  | 
 | # loaders | 
 | from jinja2.loaders import BaseLoader, FileSystemLoader, PackageLoader, \ | 
 |      DictLoader, FunctionLoader, PrefixLoader, ChoiceLoader, \ | 
 |      ModuleLoader | 
 |  | 
 | # bytecode caches | 
 | from jinja2.bccache import BytecodeCache, FileSystemBytecodeCache, \ | 
 |      MemcachedBytecodeCache | 
 |  | 
 | # undefined types | 
 | from jinja2.runtime import Undefined, DebugUndefined, StrictUndefined, \ | 
 |      make_logging_undefined | 
 |  | 
 | # exceptions | 
 | from jinja2.exceptions import TemplateError, UndefinedError, \ | 
 |      TemplateNotFound, TemplatesNotFound, TemplateSyntaxError, \ | 
 |      TemplateAssertionError, TemplateRuntimeError | 
 |  | 
 | # decorators and public utilities | 
 | from jinja2.filters import environmentfilter, contextfilter, \ | 
 |      evalcontextfilter | 
 | from jinja2.utils import Markup, escape, clear_caches, \ | 
 |      environmentfunction, evalcontextfunction, contextfunction, \ | 
 |      is_undefined, select_autoescape | 
 |  | 
 | __all__ = [ | 
 |     'Environment', 'Template', 'BaseLoader', 'FileSystemLoader', | 
 |     'PackageLoader', 'DictLoader', 'FunctionLoader', 'PrefixLoader', | 
 |     'ChoiceLoader', 'BytecodeCache', 'FileSystemBytecodeCache', | 
 |     'MemcachedBytecodeCache', 'Undefined', 'DebugUndefined', | 
 |     'StrictUndefined', 'TemplateError', 'UndefinedError', 'TemplateNotFound', | 
 |     'TemplatesNotFound', 'TemplateSyntaxError', 'TemplateAssertionError', | 
 |     'TemplateRuntimeError', | 
 |     'ModuleLoader', 'environmentfilter', 'contextfilter', 'Markup', 'escape', | 
 |     'environmentfunction', 'contextfunction', 'clear_caches', 'is_undefined', | 
 |     'evalcontextfilter', 'evalcontextfunction', 'make_logging_undefined', | 
 |     'select_autoescape', | 
 | ] | 
 |  | 
 |  | 
 | def _patch_async(): | 
 |     from jinja2.utils import have_async_gen | 
 |     if have_async_gen: | 
 |         from jinja2.asyncsupport import patch_all | 
 |         patch_all() | 
 |  | 
 |  | 
 | _patch_async() | 
 | del _patch_async |