]> git.ipfire.org Git - thirdparty/jinja.git/commit
Change cache key definitiion in environment 583/head
authorpgjones <philip.graham.jones@googlemail.com>
Sun, 8 May 2016 15:10:35 +0000 (16:10 +0100)
committerpgjones <philip.graham.jones@googlemail.com>
Thu, 19 May 2016 18:42:16 +0000 (19:42 +0100)
commit7d8ec0f3e8c731c835f59825c1ad5b92c9339886
tree37eeadb5f3b73246f371693edbc7cbda211e903d
parentb927c9f27115de078f143ea23f6fb25e7ae204cd
Change cache key definitiion in environment

In 6671b973e6de5abc46829a27fd3bbb989d68ca3a the load_template method
was altered to use a cache key other than the template name. The key
chosen was the abs path as returned from the loader get_source
method. Unless there is no path in which case the name is
used. Unfortunately this introduced a performance regression, #485, as
the get_source method (in the FileStoreLoader) loads the template
(causing IO).

The purpose of #332 was to allow the loader to change whilst ensuring
the correct template was loaded, i.e. to fix this case

    env.loader = loader1
    env.get_template('index.html') # return loader1/index.html
    env.loader = loader2
    env.get_template('index.html') # also return loader1/index.html because of cache

This commit changes the cache key to be a tuple of the id(loader) and
the template name. Therefore fixing the above case without calling the
get_source method and thereby avoiding the IO load.

A test has been added to ensure the above case works as expected, this
required a minor refactor of the caching tests.
jinja2/environment.py
tests/test_loader.py