summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES.txt10
-rw-r--r--TODO.txt2
-rw-r--r--docs/narr/environment.rst18
-rw-r--r--pyramid/mako_templating.py6
-rw-r--r--pyramid/tests/test_mako_templating.py31
-rw-r--r--setup.py2
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
---------
diff --git a/TODO.txt b/TODO.txt
index c5584d3cc..0033eb3b3 100644
--- a/TODO.txt
+++ b/TODO.txt
@@ -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):
diff --git a/setup.py b/setup.py
index c1939f73c..75f5b13dd 100644
--- a/setup.py
+++ b/setup.py
@@ -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',