Mercurial > piecrust2
comparison piecrust/templating/jinja/environment.py @ 907:3e69f18912f5
jinja: Remove Twig compatibility, add timer, improve code.
- Add a timer for keeping track of extensions' performance.
- Use the `select_template` function from Jinja to cut down on a few lines
of code.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Sun, 23 Jul 2017 08:30:47 -0700 |
parents | 41b0c94f9833 |
children |
comparison
equal
deleted
inserted
replaced
906:1c6a4d2ec16e | 907:3e69f18912f5 |
---|---|
18 def __init__(self, app, *args, **kwargs): | 18 def __init__(self, app, *args, **kwargs): |
19 self.app = app | 19 self.app = app |
20 | 20 |
21 # Before we create the base Environement, let's figure out the options | 21 # Before we create the base Environement, let's figure out the options |
22 # we want to pass to it. | 22 # we want to pass to it. |
23 twig_compatibility_mode = app.config.get('jinja/twig_compatibility') | 23 # |
24 | |
25 # Disable auto-reload when we're baking. | 24 # Disable auto-reload when we're baking. |
26 if app.config.get('baker/is_baking'): | 25 if app.config.get('baker/is_baking'): |
27 kwargs.setdefault('auto_reload', False) | 26 kwargs.setdefault('auto_reload', False) |
27 | |
28 # Don't unload templates from the cache. | |
29 kwargs.setdefault('cache_size', -1) | |
28 | 30 |
29 # Let the user override most Jinja options via the site config. | 31 # Let the user override most Jinja options via the site config. |
30 for name in ['block_start_string', 'block_end_string', | 32 for name in ['block_start_string', 'block_end_string', |
31 'variable_start_string', 'variable_end_string', | 33 'variable_start_string', 'variable_end_string', |
32 'comment_start_string', 'comment_end_string', | 34 'comment_start_string', 'comment_end_string', |
44 kwargs.setdefault('undefined', | 46 kwargs.setdefault('undefined', |
45 make_logging_undefined(logger)) | 47 make_logging_undefined(logger)) |
46 elif undef == 'strict': | 48 elif undef == 'strict': |
47 from jinja2 import StrictUndefined | 49 from jinja2 import StrictUndefined |
48 kwargs.setdefault('undefined', StrictUndefined) | 50 kwargs.setdefault('undefined', StrictUndefined) |
49 | |
50 # Twig trims blocks. | |
51 if twig_compatibility_mode is True: | |
52 kwargs['trim_blocks'] = True | |
53 | 51 |
54 # All good! Create the Environment. | 52 # All good! Create the Environment. |
55 super(PieCrustEnvironment, self).__init__(*args, **kwargs) | 53 super(PieCrustEnvironment, self).__init__(*args, **kwargs) |
56 | 54 |
57 # Now add globals and filters. | 55 # Now add globals and filters. |
76 'atomdate': get_xml_date, | 74 'atomdate': get_xml_date, |
77 'xmldate': get_xml_date, | 75 'xmldate': get_xml_date, |
78 'emaildate': get_email_date, | 76 'emaildate': get_email_date, |
79 'date': get_date}) | 77 'date': get_date}) |
80 | 78 |
81 # Backwards compatibility with Twig. | 79 self.filters['raw'] = self.filters['safe'] |
82 if twig_compatibility_mode is True: | |
83 self.filters['raw'] = self.filters['safe'] | |
84 self.globals['pcfail'] = raise_exception | |
85 | 80 |
86 def _paginate(self, value, items_per_page=5): | 81 def _paginate(self, value, items_per_page=5): |
87 ctx = self.app.env.render_ctx_stack.current_ctx | 82 ctx = self.app.env.render_ctx_stack.current_ctx |
88 if ctx is None or ctx.page is None: | 83 if ctx is None or ctx.page is None: |
89 raise Exception("Can't paginate when no page has been pushed " | 84 raise Exception("Can't paginate when no page has been pushed " |