diff options
| -rw-r--r-- | CHANGES.txt | 10 | ||||
| -rw-r--r-- | TODO.txt | 2 | ||||
| -rw-r--r-- | docs/narr/environment.rst | 18 | ||||
| -rw-r--r-- | pyramid/mako_templating.py | 6 | ||||
| -rw-r--r-- | pyramid/tests/test_mako_templating.py | 31 | ||||
| -rw-r--r-- | setup.py | 2 |
6 files changed, 64 insertions, 5 deletions
diff --git a/CHANGES.txt b/CHANGES.txt index 3c6b8e010..1675ab9fc 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -19,6 +19,16 @@ Features - The Mako renderer now accepts a resource specification for ``mako.module_directory``. +- New boolean Mako settings variable ``mako.strict_undefined``. See `Mako + Context Variables + <http://www.makotemplates.org/docs/runtime.html#context-variables>`_ for + its meaning. + +Dependencies +------------ + +- Depend on Mako 0.3.6+ (we now require the ``strict_undefined`` feature). + Bug Fixes --------- @@ -20,8 +20,6 @@ Should-Have - Add docs for httpexceptions module for each webob.exc class that inherits from WSGIHTTPException. -- Create a ``docs`` directory for each paster template. - - Remove "BFG" from Pyramid-specific environ variables. - translationdir ZCML directive use of ``path_spec`` should maybe die. diff --git a/docs/narr/environment.rst b/docs/narr/environment.rst index ecf85e464..c3fe401ec 100644 --- a/docs/narr/environment.rst +++ b/docs/narr/environment.rst @@ -249,6 +249,24 @@ will be placed into the module level preamble of all generated Python modules. | | +-----------------------------+ + +Mako Strict Undefined ++++++++++++++++++++++ + +``true`` or ``false``, representing the "strict undefined" behavior of Mako +(see `Mako Context Variables +<http://www.makotemplates.org/docs/runtime.html#context-variables>`_). By +default, this is ``false``. + ++-----------------------------+ +| Config File Setting Name | ++=============================+ +| ``mako.strict_undefined`` | +| | +| | +| | ++-----------------------------+ + Examples -------- diff --git a/pyramid/mako_templating.py b/pyramid/mako_templating.py index 3ef2868a5..a5f9b0f68 100644 --- a/pyramid/mako_templating.py +++ b/pyramid/mako_templating.py @@ -8,6 +8,7 @@ from pyramid.interfaces import ITemplateRenderer from pyramid.exceptions import ConfigurationError from pyramid.resource import resolve_resource_spec from pyramid.resource import abspath_from_resource_spec +from pyramid.settings import asbool from pyramid.util import DottedNameResolver from mako.lookup import TemplateLookup @@ -68,6 +69,7 @@ def renderer_factory(info): error_handler = settings.get('mako.error_handler', None) default_filters = settings.get('mako.default_filters', None) imports = settings.get('mako.imports', None) + strict_undefined = settings.get('mako.strict_undefined', 'false') if directories is None: raise ConfigurationError( 'Mako template used without a ``mako.directories`` setting') @@ -85,6 +87,7 @@ def renderer_factory(info): if imports is not None: if not hasattr(imports, '__iter__'): imports = filter(None, imports.splitlines()) + strict_undefined = asbool(strict_undefined) lookup = PkgResourceTemplateLookup(directories=directories, module_directory=module_directory, @@ -92,7 +95,8 @@ def renderer_factory(info): error_handler=error_handler, default_filters=default_filters, imports=imports, - filesystem_checks=reload_templates) + filesystem_checks=reload_templates, + strict_undefined=strict_undefined) registry_lock.acquire() try: registry.registerUtility(lookup, IMakoLookup) diff --git a/pyramid/tests/test_mako_templating.py b/pyramid/tests/test_mako_templating.py index 4b75e1a28..506dc18cd 100644 --- a/pyramid/tests/test_mako_templating.py +++ b/pyramid/tests/test_mako_templating.py @@ -190,6 +190,34 @@ class Test_renderer_factory(Base, unittest.TestCase): lookup = self.config.registry.getUtility(IMakoLookup) self.assertEqual(lookup.template_args['imports'], ['one', 'two']) + def test_with_strict_undefined_true(self): + from pyramid.mako_templating import IMakoLookup + settings = {'mako.directories':self.templates_dir, + 'mako.strict_undefined':'true'} + info = DummyRendererInfo({ + 'name':'helloworld.mak', + 'package':None, + 'registry':self.config.registry, + 'settings':settings, + }) + self._callFUT(info) + lookup = self.config.registry.getUtility(IMakoLookup) + self.assertEqual(lookup.template_args['strict_undefined'], True) + + def test_with_strict_undefined_false(self): + from pyramid.mako_templating import IMakoLookup + settings = {'mako.directories':self.templates_dir, + 'mako.strict_undefined':'false'} + info = DummyRendererInfo({ + 'name':'helloworld.mak', + 'package':None, + 'registry':self.config.registry, + 'settings':settings, + }) + self._callFUT(info) + lookup = self.config.registry.getUtility(IMakoLookup) + self.assertEqual(lookup.template_args['strict_undefined'], False) + def test_with_lookup(self): from pyramid.mako_templating import IMakoLookup lookup = dict() @@ -301,7 +329,8 @@ class TestIntegration(unittest.TestCase): def test_render_to_response_pkg_spec(self): from pyramid.renderers import render_to_response - result = render_to_response('pyramid.tests:fixtures/helloworld.mak', {'a':1}) + result = render_to_response('pyramid.tests:fixtures/helloworld.mak', + {'a':1}) self.assertEqual(result.ubody, u'\nHello föö\n') def test_render_with_abs_path(self): @@ -29,7 +29,7 @@ except IOError: install_requires=[ 'Chameleon >= 1.2.3', - 'Mako', + 'Mako >= 0.3.6', # strict_undefined 'Paste > 1.7', # temp version pin to prevent PyPi install failure :-( 'PasteDeploy', 'PasteScript', |
