summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBlaise Laflamme <blaise@laflamme.org>2012-06-19 16:32:41 -0400
committerBlaise Laflamme <blaise@laflamme.org>2012-06-19 16:32:41 -0400
commitf71ed59edb74e9a13362521918e2660e4e4263ba (patch)
treeacccbd03f61a810d1c4aff99912500d30082a3b4
parent5b1f04fb91b2da701c9ea913883874eda5c3dafb (diff)
downloadpyramid-f71ed59edb74e9a13362521918e2660e4e4263ba.tar.gz
pyramid-f71ed59edb74e9a13362521918e2660e4e4263ba.tar.bz2
pyramid-f71ed59edb74e9a13362521918e2660e4e4263ba.zip
added a new makodef renderer to call a def inside a mako template, fixed tests and removed old tuple way of calling def. Based on zzzeek example of client/server templating.
-rw-r--r--pyramid/config/rendering.py1
-rw-r--r--pyramid/mako_templating.py19
-rw-r--r--pyramid/tests/test_mako_templating.py21
3 files changed, 22 insertions, 19 deletions
diff --git a/pyramid/config/rendering.py b/pyramid/config/rendering.py
index 926511b7b..bfa41ee03 100644
--- a/pyramid/config/rendering.py
+++ b/pyramid/config/rendering.py
@@ -21,6 +21,7 @@ DEFAULT_RENDERERS = (
('.pt', chameleon_zpt.renderer_factory),
('.mak', mako_renderer_factory),
('.mako', mako_renderer_factory),
+ ('.makodef', mako_renderer_factory),
('json', renderers.json_renderer_factory),
('string', renderers.string_renderer_factory),
)
diff --git a/pyramid/mako_templating.py b/pyramid/mako_templating.py
index 208e54bf5..48288c930 100644
--- a/pyramid/mako_templating.py
+++ b/pyramid/mako_templating.py
@@ -1,4 +1,5 @@
import os
+import re
import sys
import threading
@@ -76,7 +77,11 @@ class MakoRendererFactoryHelper(object):
self.settings_prefix = settings_prefix
def __call__(self, info):
- path = info.name
+ p = re.compile(
+ r'(?P<path>[\w_.:/]+)'
+ r'(?:\#(?P<defname>[\w_]+))?'
+ )
+ path, defname = p.match(info.name).group("path", "defname")
registry = info.registry
settings = info.settings
settings_prefix = self.settings_prefix
@@ -141,7 +146,7 @@ class MakoRendererFactoryHelper(object):
finally:
registry_lock.release()
- return MakoLookupTemplateRenderer(path, lookup)
+ return MakoLookupTemplateRenderer(path, defname, lookup)
renderer_factory = MakoRendererFactoryHelper('mako.')
@@ -156,8 +161,9 @@ class MakoRenderingException(Exception):
@implementer(ITemplateRenderer)
class MakoLookupTemplateRenderer(object):
- def __init__(self, path, lookup):
+ def __init__(self, path, defname, lookup):
self.path = path
+ self.defname = defname
self.lookup = lookup
def implementation(self):
@@ -167,16 +173,13 @@ class MakoLookupTemplateRenderer(object):
context = system.pop('context', None)
if context is not None:
system['_context'] = context
- def_name = None
- if isinstance(value, tuple):
- def_name, value = value
try:
system.update(value)
except (TypeError, ValueError):
raise ValueError('renderer was passed non-dictionary as value')
template = self.implementation()
- if def_name is not None:
- template = template.get_def(def_name)
+ if self.defname is not None:
+ template = template.get_def(self.defname)
try:
result = template.render_unicode(**system)
except:
diff --git a/pyramid/tests/test_mako_templating.py b/pyramid/tests/test_mako_templating.py
index 8b738c21d..cd7b140d6 100644
--- a/pyramid/tests/test_mako_templating.py
+++ b/pyramid/tests/test_mako_templating.py
@@ -315,7 +315,7 @@ class MakoLookupTemplateRendererTests(Base, unittest.TestCase):
def test_instance_implements_ITemplate(self):
from zope.interface.verify import verifyObject
from pyramid.interfaces import ITemplateRenderer
- verifyObject(ITemplateRenderer, self._makeOne(None, None))
+ verifyObject(ITemplateRenderer, self._makeOne(None, None, None))
def test_class_implements_ITemplate(self):
from zope.interface.verify import verifyClass
@@ -324,7 +324,7 @@ class MakoLookupTemplateRendererTests(Base, unittest.TestCase):
def test_call(self):
lookup = DummyLookup()
- instance = self._makeOne('path', lookup)
+ instance = self._makeOne('path', None, lookup)
result = instance({}, {'system':1})
self.assertTrue(isinstance(result, text_type))
self.assertEqual(result, text_('result'))
@@ -332,29 +332,28 @@ class MakoLookupTemplateRendererTests(Base, unittest.TestCase):
def test_call_with_system_context(self):
# lame
lookup = DummyLookup()
- instance = self._makeOne('path', lookup)
+ instance = self._makeOne('path', None, lookup)
result = instance({}, {'context':1})
self.assertTrue(isinstance(result, text_type))
self.assertEqual(result, text_('result'))
self.assertEqual(lookup.values, {'_context':1})
- def test_call_with_tuple_value(self):
+ def test_call_with_defname(self):
lookup = DummyLookup()
- instance = self._makeOne('path', lookup)
- result = instance(('fub', {}), {'context':1})
- self.assertEqual(lookup.deffed, 'fub')
+ instance = self._makeOne('path', 'defname', lookup)
+ result = instance({}, {'system':1})
+ self.assertTrue(isinstance(result, text_type))
self.assertEqual(result, text_('result'))
- self.assertEqual(lookup.values, {'_context':1})
def test_call_with_nondict_value(self):
lookup = DummyLookup()
- instance = self._makeOne('path', lookup)
+ instance = self._makeOne('path', None, lookup)
self.assertRaises(ValueError, instance, None, {})
def test_call_render_raises(self):
from pyramid.mako_templating import MakoRenderingException
lookup = DummyLookup(exc=NotImplementedError)
- instance = self._makeOne('path', lookup)
+ instance = self._makeOne('path', None, lookup)
try:
instance({}, {})
except MakoRenderingException as e:
@@ -364,7 +363,7 @@ class MakoLookupTemplateRendererTests(Base, unittest.TestCase):
def test_implementation(self):
lookup = DummyLookup()
- instance = self._makeOne('path', lookup)
+ instance = self._makeOne('path', None, lookup)
result = instance.implementation().render_unicode()
self.assertTrue(isinstance(result, text_type))
self.assertEqual(result, text_('result'))