Skip to content
Snippets Groups Projects
Select Git revision
  • 380a0056f3ab05cac0a453abfef5f7edce6823ad
  • main default protected
2 results

cache_extension.py

Blame
    • Jaemin Shin's avatar
      380a0056
      Update 236 files · 380a0056
      Jaemin Shin authored
      - /jinja-main/.devcontainer/devcontainer.json
      - /jinja-main/.devcontainer/on-create-command.sh
      - /jinja-main/.editorconfig
      - /jinja-main/.github/ISSUE_TEMPLATE/bug-report.md
      - /jinja-main/.github/ISSUE_TEMPLATE/config.yml
      - /jinja-main/.github/ISSUE_TEMPLATE/feature-request.md
      - /jinja-main/.github/pull_request_template.md
      - /jinja-main/.github/workflows/lock.yaml
      - /jinja-main/.github/workflows/pre-commit.yaml
      - /jinja-main/.github/workflows/publish.yaml
      - /jinja-main/.github/workflows/tests.yaml
      - /jinja-main/.gitignore
      - /jinja-main/.pre-commit-config.yaml
      - /jinja-main/.readthedocs.yaml
      - /jinja-main/CHANGES.rst
      - /jinja-main/CONTRIBUTING.rst
      - /jinja-main/LICENSE.txt
      - /jinja-main/README.md
      - /jinja-main/artwork/jinjalogo.svg
      - /jinja-main/docs/Makefile
      - /jinja-main/docs/_static/jinja-logo-sidebar.png
      - /jinja-main/docs/_static/jinja-logo.png
      - /jinja-main/docs/api.rst
      - /jinja-main/docs/changes.rst
      - /jinja-main/docs/conf.py
      - /jinja-main/docs/examples/cache_extension.py
      - /jinja-main/docs/examples/inline_gettext_extension.py
      - /jinja-main/docs/extensions.rst
      - /jinja-main/docs/faq.rst
      - /jinja-main/docs/index.rst
      - /jinja-main/docs/integration.rst
      - /jinja-main/docs/intro.rst
      - /jinja-main/docs/license.rst
      - /jinja-main/docs/make.bat
      - /jinja-main/docs/nativetypes.rst
      - /jinja-main/docs/sandbox.rst
      - /jinja-main/docs/switching.rst
      - /jinja-main/docs/templates.rst
      - /jinja-main/docs/tricks.rst
      - /jinja-main/examples/basic/cycle.py
      - /jinja-main/examples/basic/debugger.py
      - /jinja-main/examples/basic/inheritance.py
      - /jinja-main/examples/basic/templates/broken.html
      - /jinja-main/examples/basic/templates/subbroken.html
      - /jinja-main/examples/basic/test.py
      - /jinja-main/examples/basic/test_filter_and_linestatements.py
      - /jinja-main/examples/basic/test_loop_filter.py
      - /jinja-main/examples/basic/translate.py
      - /jinja-main/pyproject.toml
      - /jinja-main/requirements/build.in
      - /jinja-main/requirements/build.txt
      - /jinja-main/requirements/dev.in
      - /jinja-main/requirements/dev.txt
      - /jinja-main/requirements/docs.in
      - /jinja-main/requirements/docs.txt
      - /jinja-main/requirements/tests.in
      - /jinja-main/requirements/tests.txt
      - /jinja-main/requirements/typing.in
      - /jinja-main/requirements/typing.txt
      - /jinja-main/scripts/generate_identifier_pattern.py
      - /jinja-main/src/jinja2/__init__.py
      - /jinja-main/src/jinja2/_identifier.py
      - /jinja-main/src/jinja2/async_utils.py
      - /jinja-main/src/jinja2/bccache.py
      - /jinja-main/src/jinja2/compiler.py
      - /jinja-main/src/jinja2/constants.py
      - /jinja-main/src/jinja2/debug.py
      - /jinja-main/src/jinja2/defaults.py
      - /jinja-main/src/jinja2/environment.py
      - /jinja-main/src/jinja2/exceptions.py
      - /jinja-main/src/jinja2/ext.py
      - /jinja-main/src/jinja2/filters.py
      - /jinja-main/src/jinja2/idtracking.py
      - /jinja-main/src/jinja2/lexer.py
      - /jinja-main/src/jinja2/loaders.py
      - /jinja-main/src/jinja2/meta.py
      - /jinja-main/src/jinja2/nativetypes.py
      - /jinja-main/src/jinja2/nodes.py
      - /jinja-main/src/jinja2/optimizer.py
      - /jinja-main/src/jinja2/parser.py
      - /jinja-main/src/jinja2/py.typed
      - /jinja-main/src/jinja2/runtime.py
      - /jinja-main/src/jinja2/sandbox.py
      - /jinja-main/src/jinja2/tests.py
      - /jinja-main/src/jinja2/utils.py
      - /jinja-main/src/jinja2/visitor.py
      - /jinja-main/tests/conftest.py
      - /jinja-main/tests/res/__init__.py
      - /jinja-main/tests/res/package.zip
      - /jinja-main/tests/res/templates/broken.html
      - /jinja-main/tests/res/templates/foo/test.html
      - /jinja-main/tests/res/templates/mojibake.txt
      - /jinja-main/tests/res/templates/syntaxerror.html
      - /jinja-main/tests/res/templates/test.html
      - /jinja-main/tests/res/templates2/foo
      - /jinja-main/tests/test_api.py
      - /jinja-main/tests/test_async.py
      - /jinja-main/tests/test_async_filters.py
      - /jinja-main/tests/test_bytecode_cache.py
      - /jinja-main/tests/test_compile.py
      - /jinja-main/tests/test_core_tags.py
      - /jinja-main/tests/test_debug.py
      - /jinja-main/tests/test_ext.py
      - /jinja-main/tests/test_filters.py
      - /jinja-main/tests/test_idtracking.py
      - /jinja-main/tests/test_imports.py
      - /jinja-main/tests/test_inheritance.py
      - /jinja-main/tests/test_lexnparse.py
      - /jinja-main/tests/test_loader.py
      - /jinja-main/tests/test_nativetypes.py
      - /jinja-main/tests/test_nodes.py
      - /jinja-main/tests/test_pickle.py
      - /jinja-main/tests/test_regression.py
      - /jinja-main/tests/test_runtime.py
      - /jinja-main/tests/test_security.py
      - /jinja-main/tests/test_tests.py
      - /jinja-main/tests/test_utils.py
      - /jinja-main/tox.ini
      - /jinja-kr/.devcontainer/devcontainer.json
      - /jinja-kr/.devcontainer/on-create-command.sh
      - /jinja-kr/.github/ISSUE_TEMPLATE/feature-request.md
      - /jinja-kr/.github/ISSUE_TEMPLATE/bug-report.md
      - /jinja-kr/.github/ISSUE_TEMPLATE/config.yml
      - /jinja-kr/.github/workflows/tests.yaml
      - /jinja-kr/.github/workflows/lock.yaml
      - /jinja-kr/.github/workflows/pre-commit.yaml
      - /jinja-kr/.github/workflows/publish.yaml
      - /jinja-kr/.github/pull_request_template.md
      - /jinja-kr/artwork/jinjalogo.svg
      - /jinja-kr/docs/_static/jinja-logo-sidebar.png
      - /jinja-kr/docs/_static/jinja-logo.png
      - /jinja-kr/docs/examples/cache_extension.py
      - /jinja-kr/docs/examples/inline_gettext_extension.py
      - /jinja-kr/docs/Makefile
      - /jinja-kr/docs/changes.rst
      - /jinja-kr/docs/license.rst
      - /jinja-kr/docs/make.bat
      - /jinja-kr/docs/integration.rst
      - /jinja-kr/docs/index.rst
      - /jinja-kr/docs/api.rst
      - /jinja-kr/docs/sandbox.rst
      - /jinja-kr/docs/intro.rst
      - /jinja-kr/docs/tricks.rst
      - /jinja-kr/docs/conf.py
      - /jinja-kr/docs/nativetypes.rst
      - /jinja-kr/docs/templates.rst
      - /jinja-kr/docs/extensions.rst
      - /jinja-kr/docs/faq.rst
      - /jinja-kr/docs/switching.rst
      - /jinja-kr/examples/basic/templates/subbroken.html
      - /jinja-kr/examples/basic/templates/broken.html
      - /jinja-kr/examples/basic/cycle.py
      - /jinja-kr/examples/basic/debugger.py
      - /jinja-kr/examples/basic/test_loop_filter.py
      - /jinja-kr/examples/basic/translate.py
      - /jinja-kr/examples/basic/inheritance.py
      - /jinja-kr/examples/basic/test.py
      - /jinja-kr/examples/basic/test_filter_and_linestatements.py
      - /jinja-kr/requirements/typing.in
      - /jinja-kr/requirements/tests.txt
      - /jinja-kr/requirements/docs.in
      - /jinja-kr/requirements/docs.txt
      - /jinja-kr/requirements/tests.in
      - /jinja-kr/requirements/build.in
      - /jinja-kr/requirements/build.txt
      - /jinja-kr/requirements/dev.in
      - /jinja-kr/requirements/dev.txt
      - /jinja-kr/requirements/typing.txt
      - /jinja-kr/scripts/generate_identifier_pattern.py
      - /jinja-kr/src/jinja2/utils.py
      - /jinja-kr/src/jinja2/visitor.py
      - /jinja-kr/src/jinja2/runtime.py
      - /jinja-kr/src/jinja2/sandbox.py
      - /jinja-kr/src/jinja2/tests.py
      - /jinja-kr/src/jinja2/constants.py
      - /jinja-kr/src/jinja2/filters.py
      - /jinja-kr/src/jinja2/idtracking.py
      - /jinja-kr/src/jinja2/lexer.py
      - /jinja-kr/src/jinja2/loaders.py
      - /jinja-kr/src/jinja2/meta.py
      - /jinja-kr/src/jinja2/nativetypes.py
      - /jinja-kr/src/jinja2/nodes.py
      - /jinja-kr/src/jinja2/bccache.py
      - /jinja-kr/src/jinja2/compiler.py
      - /jinja-kr/src/jinja2/debug.py
      - /jinja-kr/src/jinja2/defaults.py
      - /jinja-kr/src/jinja2/environment.py
      - /jinja-kr/src/jinja2/__init__.py
      - /jinja-kr/src/jinja2/_identifier.py
      - /jinja-kr/src/jinja2/async_utils.py
      - /jinja-kr/src/jinja2/exceptions.py
      - /jinja-kr/src/jinja2/ext.py
      - /jinja-kr/src/jinja2/optimizer.py
      - /jinja-kr/src/jinja2/parser.py
      - /jinja-kr/src/jinja2/py.typed
      - /jinja-kr/tests/res/templates/foo/test.html
      - /jinja-kr/tests/res/templates/syntaxerror.html
      - /jinja-kr/tests/res/templates/broken.html
      - /jinja-kr/tests/res/templates/mojibake.txt
      - /jinja-kr/tests/res/templates/test.html
      - /jinja-kr/tests/res/templates2/foo
      - /jinja-kr/tests/res/__init__.py
      - /jinja-kr/tests/res/package.zip
      - /jinja-kr/tests/conftest.py
      - /jinja-kr/tests/test_api.py
      - /jinja-kr/tests/test_runtime.py
      - /jinja-kr/tests/test_security.py
      - /jinja-kr/tests/test_compile.py
      - /jinja-kr/tests/test_core_tags.py
      - /jinja-kr/tests/test_debug.py
      - /jinja-kr/tests/test_utils.py
      - /jinja-kr/tests/test_async.py
      - /jinja-kr/tests/test_async_filters.py
      - /jinja-kr/tests/test_bytecode_cache.py
      - /jinja-kr/tests/test_ext.py
      - /jinja-kr/tests/test_filters.py
      - /jinja-kr/tests/test_idtracking.py
      - /jinja-kr/tests/test_imports.py
      - /jinja-kr/tests/test_inheritance.py
      - /jinja-kr/tests/test_lexnparse.py
      - /jinja-kr/tests/test_loader.py
      - /jinja-kr/tests/test_nativetypes.py
      - /jinja-kr/tests/test_nodes.py
      - /jinja-kr/tests/test_pickle.py
      - /jinja-kr/tests/test_regression.py
      - /jinja-kr/tests/test_tests.py
      - /jinja-kr/.editorconfig
      - /jinja-kr/.readthedocs.yaml
      - /jinja-kr/CHANGES.rst
      - /jinja-kr/README.md
      - /jinja-kr/tox.ini
      - /jinja-kr/LICENSE.txt
      - /jinja-kr/.gitignore
      - /jinja-kr/.pre-commit-config.yaml
      - /jinja-kr/pyproject.toml
      - /jinja-kr/CONTRIBUTING.rst
      380a0056
      History
      Update 236 files
      Jaemin Shin authored
      - /jinja-main/.devcontainer/devcontainer.json
      - /jinja-main/.devcontainer/on-create-command.sh
      - /jinja-main/.editorconfig
      - /jinja-main/.github/ISSUE_TEMPLATE/bug-report.md
      - /jinja-main/.github/ISSUE_TEMPLATE/config.yml
      - /jinja-main/.github/ISSUE_TEMPLATE/feature-request.md
      - /jinja-main/.github/pull_request_template.md
      - /jinja-main/.github/workflows/lock.yaml
      - /jinja-main/.github/workflows/pre-commit.yaml
      - /jinja-main/.github/workflows/publish.yaml
      - /jinja-main/.github/workflows/tests.yaml
      - /jinja-main/.gitignore
      - /jinja-main/.pre-commit-config.yaml
      - /jinja-main/.readthedocs.yaml
      - /jinja-main/CHANGES.rst
      - /jinja-main/CONTRIBUTING.rst
      - /jinja-main/LICENSE.txt
      - /jinja-main/README.md
      - /jinja-main/artwork/jinjalogo.svg
      - /jinja-main/docs/Makefile
      - /jinja-main/docs/_static/jinja-logo-sidebar.png
      - /jinja-main/docs/_static/jinja-logo.png
      - /jinja-main/docs/api.rst
      - /jinja-main/docs/changes.rst
      - /jinja-main/docs/conf.py
      - /jinja-main/docs/examples/cache_extension.py
      - /jinja-main/docs/examples/inline_gettext_extension.py
      - /jinja-main/docs/extensions.rst
      - /jinja-main/docs/faq.rst
      - /jinja-main/docs/index.rst
      - /jinja-main/docs/integration.rst
      - /jinja-main/docs/intro.rst
      - /jinja-main/docs/license.rst
      - /jinja-main/docs/make.bat
      - /jinja-main/docs/nativetypes.rst
      - /jinja-main/docs/sandbox.rst
      - /jinja-main/docs/switching.rst
      - /jinja-main/docs/templates.rst
      - /jinja-main/docs/tricks.rst
      - /jinja-main/examples/basic/cycle.py
      - /jinja-main/examples/basic/debugger.py
      - /jinja-main/examples/basic/inheritance.py
      - /jinja-main/examples/basic/templates/broken.html
      - /jinja-main/examples/basic/templates/subbroken.html
      - /jinja-main/examples/basic/test.py
      - /jinja-main/examples/basic/test_filter_and_linestatements.py
      - /jinja-main/examples/basic/test_loop_filter.py
      - /jinja-main/examples/basic/translate.py
      - /jinja-main/pyproject.toml
      - /jinja-main/requirements/build.in
      - /jinja-main/requirements/build.txt
      - /jinja-main/requirements/dev.in
      - /jinja-main/requirements/dev.txt
      - /jinja-main/requirements/docs.in
      - /jinja-main/requirements/docs.txt
      - /jinja-main/requirements/tests.in
      - /jinja-main/requirements/tests.txt
      - /jinja-main/requirements/typing.in
      - /jinja-main/requirements/typing.txt
      - /jinja-main/scripts/generate_identifier_pattern.py
      - /jinja-main/src/jinja2/__init__.py
      - /jinja-main/src/jinja2/_identifier.py
      - /jinja-main/src/jinja2/async_utils.py
      - /jinja-main/src/jinja2/bccache.py
      - /jinja-main/src/jinja2/compiler.py
      - /jinja-main/src/jinja2/constants.py
      - /jinja-main/src/jinja2/debug.py
      - /jinja-main/src/jinja2/defaults.py
      - /jinja-main/src/jinja2/environment.py
      - /jinja-main/src/jinja2/exceptions.py
      - /jinja-main/src/jinja2/ext.py
      - /jinja-main/src/jinja2/filters.py
      - /jinja-main/src/jinja2/idtracking.py
      - /jinja-main/src/jinja2/lexer.py
      - /jinja-main/src/jinja2/loaders.py
      - /jinja-main/src/jinja2/meta.py
      - /jinja-main/src/jinja2/nativetypes.py
      - /jinja-main/src/jinja2/nodes.py
      - /jinja-main/src/jinja2/optimizer.py
      - /jinja-main/src/jinja2/parser.py
      - /jinja-main/src/jinja2/py.typed
      - /jinja-main/src/jinja2/runtime.py
      - /jinja-main/src/jinja2/sandbox.py
      - /jinja-main/src/jinja2/tests.py
      - /jinja-main/src/jinja2/utils.py
      - /jinja-main/src/jinja2/visitor.py
      - /jinja-main/tests/conftest.py
      - /jinja-main/tests/res/__init__.py
      - /jinja-main/tests/res/package.zip
      - /jinja-main/tests/res/templates/broken.html
      - /jinja-main/tests/res/templates/foo/test.html
      - /jinja-main/tests/res/templates/mojibake.txt
      - /jinja-main/tests/res/templates/syntaxerror.html
      - /jinja-main/tests/res/templates/test.html
      - /jinja-main/tests/res/templates2/foo
      - /jinja-main/tests/test_api.py
      - /jinja-main/tests/test_async.py
      - /jinja-main/tests/test_async_filters.py
      - /jinja-main/tests/test_bytecode_cache.py
      - /jinja-main/tests/test_compile.py
      - /jinja-main/tests/test_core_tags.py
      - /jinja-main/tests/test_debug.py
      - /jinja-main/tests/test_ext.py
      - /jinja-main/tests/test_filters.py
      - /jinja-main/tests/test_idtracking.py
      - /jinja-main/tests/test_imports.py
      - /jinja-main/tests/test_inheritance.py
      - /jinja-main/tests/test_lexnparse.py
      - /jinja-main/tests/test_loader.py
      - /jinja-main/tests/test_nativetypes.py
      - /jinja-main/tests/test_nodes.py
      - /jinja-main/tests/test_pickle.py
      - /jinja-main/tests/test_regression.py
      - /jinja-main/tests/test_runtime.py
      - /jinja-main/tests/test_security.py
      - /jinja-main/tests/test_tests.py
      - /jinja-main/tests/test_utils.py
      - /jinja-main/tox.ini
      - /jinja-kr/.devcontainer/devcontainer.json
      - /jinja-kr/.devcontainer/on-create-command.sh
      - /jinja-kr/.github/ISSUE_TEMPLATE/feature-request.md
      - /jinja-kr/.github/ISSUE_TEMPLATE/bug-report.md
      - /jinja-kr/.github/ISSUE_TEMPLATE/config.yml
      - /jinja-kr/.github/workflows/tests.yaml
      - /jinja-kr/.github/workflows/lock.yaml
      - /jinja-kr/.github/workflows/pre-commit.yaml
      - /jinja-kr/.github/workflows/publish.yaml
      - /jinja-kr/.github/pull_request_template.md
      - /jinja-kr/artwork/jinjalogo.svg
      - /jinja-kr/docs/_static/jinja-logo-sidebar.png
      - /jinja-kr/docs/_static/jinja-logo.png
      - /jinja-kr/docs/examples/cache_extension.py
      - /jinja-kr/docs/examples/inline_gettext_extension.py
      - /jinja-kr/docs/Makefile
      - /jinja-kr/docs/changes.rst
      - /jinja-kr/docs/license.rst
      - /jinja-kr/docs/make.bat
      - /jinja-kr/docs/integration.rst
      - /jinja-kr/docs/index.rst
      - /jinja-kr/docs/api.rst
      - /jinja-kr/docs/sandbox.rst
      - /jinja-kr/docs/intro.rst
      - /jinja-kr/docs/tricks.rst
      - /jinja-kr/docs/conf.py
      - /jinja-kr/docs/nativetypes.rst
      - /jinja-kr/docs/templates.rst
      - /jinja-kr/docs/extensions.rst
      - /jinja-kr/docs/faq.rst
      - /jinja-kr/docs/switching.rst
      - /jinja-kr/examples/basic/templates/subbroken.html
      - /jinja-kr/examples/basic/templates/broken.html
      - /jinja-kr/examples/basic/cycle.py
      - /jinja-kr/examples/basic/debugger.py
      - /jinja-kr/examples/basic/test_loop_filter.py
      - /jinja-kr/examples/basic/translate.py
      - /jinja-kr/examples/basic/inheritance.py
      - /jinja-kr/examples/basic/test.py
      - /jinja-kr/examples/basic/test_filter_and_linestatements.py
      - /jinja-kr/requirements/typing.in
      - /jinja-kr/requirements/tests.txt
      - /jinja-kr/requirements/docs.in
      - /jinja-kr/requirements/docs.txt
      - /jinja-kr/requirements/tests.in
      - /jinja-kr/requirements/build.in
      - /jinja-kr/requirements/build.txt
      - /jinja-kr/requirements/dev.in
      - /jinja-kr/requirements/dev.txt
      - /jinja-kr/requirements/typing.txt
      - /jinja-kr/scripts/generate_identifier_pattern.py
      - /jinja-kr/src/jinja2/utils.py
      - /jinja-kr/src/jinja2/visitor.py
      - /jinja-kr/src/jinja2/runtime.py
      - /jinja-kr/src/jinja2/sandbox.py
      - /jinja-kr/src/jinja2/tests.py
      - /jinja-kr/src/jinja2/constants.py
      - /jinja-kr/src/jinja2/filters.py
      - /jinja-kr/src/jinja2/idtracking.py
      - /jinja-kr/src/jinja2/lexer.py
      - /jinja-kr/src/jinja2/loaders.py
      - /jinja-kr/src/jinja2/meta.py
      - /jinja-kr/src/jinja2/nativetypes.py
      - /jinja-kr/src/jinja2/nodes.py
      - /jinja-kr/src/jinja2/bccache.py
      - /jinja-kr/src/jinja2/compiler.py
      - /jinja-kr/src/jinja2/debug.py
      - /jinja-kr/src/jinja2/defaults.py
      - /jinja-kr/src/jinja2/environment.py
      - /jinja-kr/src/jinja2/__init__.py
      - /jinja-kr/src/jinja2/_identifier.py
      - /jinja-kr/src/jinja2/async_utils.py
      - /jinja-kr/src/jinja2/exceptions.py
      - /jinja-kr/src/jinja2/ext.py
      - /jinja-kr/src/jinja2/optimizer.py
      - /jinja-kr/src/jinja2/parser.py
      - /jinja-kr/src/jinja2/py.typed
      - /jinja-kr/tests/res/templates/foo/test.html
      - /jinja-kr/tests/res/templates/syntaxerror.html
      - /jinja-kr/tests/res/templates/broken.html
      - /jinja-kr/tests/res/templates/mojibake.txt
      - /jinja-kr/tests/res/templates/test.html
      - /jinja-kr/tests/res/templates2/foo
      - /jinja-kr/tests/res/__init__.py
      - /jinja-kr/tests/res/package.zip
      - /jinja-kr/tests/conftest.py
      - /jinja-kr/tests/test_api.py
      - /jinja-kr/tests/test_runtime.py
      - /jinja-kr/tests/test_security.py
      - /jinja-kr/tests/test_compile.py
      - /jinja-kr/tests/test_core_tags.py
      - /jinja-kr/tests/test_debug.py
      - /jinja-kr/tests/test_utils.py
      - /jinja-kr/tests/test_async.py
      - /jinja-kr/tests/test_async_filters.py
      - /jinja-kr/tests/test_bytecode_cache.py
      - /jinja-kr/tests/test_ext.py
      - /jinja-kr/tests/test_filters.py
      - /jinja-kr/tests/test_idtracking.py
      - /jinja-kr/tests/test_imports.py
      - /jinja-kr/tests/test_inheritance.py
      - /jinja-kr/tests/test_lexnparse.py
      - /jinja-kr/tests/test_loader.py
      - /jinja-kr/tests/test_nativetypes.py
      - /jinja-kr/tests/test_nodes.py
      - /jinja-kr/tests/test_pickle.py
      - /jinja-kr/tests/test_regression.py
      - /jinja-kr/tests/test_tests.py
      - /jinja-kr/.editorconfig
      - /jinja-kr/.readthedocs.yaml
      - /jinja-kr/CHANGES.rst
      - /jinja-kr/README.md
      - /jinja-kr/tox.ini
      - /jinja-kr/LICENSE.txt
      - /jinja-kr/.gitignore
      - /jinja-kr/.pre-commit-config.yaml
      - /jinja-kr/pyproject.toml
      - /jinja-kr/CONTRIBUTING.rst
    cache_extension.py 2.00 KiB
    from jinja2 import nodes
    from jinja2.ext import Extension
    
    
    class FragmentCacheExtension(Extension):
        # a set of names that trigger the extension.
        tags = {"cache"}
    
        def __init__(self, environment):
            super().__init__(environment)
    
            # add the defaults to the environment
            environment.extend(fragment_cache_prefix="", fragment_cache=None)
    
        def parse(self, parser):
            # the first token is the token that started the tag.  In our case
            # we only listen to ``'cache'`` so this will be a name token with
            # `cache` as value.  We get the line number so that we can give
            # that line number to the nodes we create by hand.
            lineno = next(parser.stream).lineno
    
            # now we parse a single expression that is used as cache key.
            args = [parser.parse_expression()]
    
            # if there is a comma, the user provided a timeout.  If not use
            # None as second parameter.
            if parser.stream.skip_if("comma"):
                args.append(parser.parse_expression())
            else:
                args.append(nodes.Const(None))
    
            # now we parse the body of the cache block up to `endcache` and
            # drop the needle (which would always be `endcache` in that case)
            body = parser.parse_statements(["name:endcache"], drop_needle=True)
    
            # now return a `CallBlock` node that calls our _cache_support
            # helper method on this extension.
            return nodes.CallBlock(
                self.call_method("_cache_support", args), [], [], body
            ).set_lineno(lineno)
    
        def _cache_support(self, name, timeout, caller):
            """Helper callback."""
            key = self.environment.fragment_cache_prefix + name
    
            # try to load the block from the cache
            # if there is no fragment in the cache, render it and store
            # it in the cache.
            rv = self.environment.fragment_cache.get(key)
            if rv is not None:
                return rv
            rv = caller()
            self.environment.fragment_cache.add(key, rv, timeout)
            return rv