diff options
| author | Tres Seaver <tseaver@palladion.com> | 2008-07-16 15:32:03 +0000 |
|---|---|---|
| committer | Tres Seaver <tseaver@palladion.com> | 2008-07-16 15:32:03 +0000 |
| commit | a15e35f5f0978f3d524aea5eafc648fc220311d6 (patch) | |
| tree | c21db5151b4345524b8031a68e4f72b2d7e6de16 | |
| parent | d62151ed86b65b6f980bc64f666defed376d7354 (diff) | |
| download | pyramid-a15e35f5f0978f3d524aea5eafc648fc220311d6.tar.gz pyramid-a15e35f5f0978f3d524aea5eafc648fc220311d6.tar.bz2 pyramid-a15e35f5f0978f3d524aea5eafc648fc220311d6.zip | |
Added 'repoze.bfg.push:pushpage' decorator
o Creates BFG views from callables which take (context, request) and return
a mapping of top-level names.
| -rw-r--r-- | CHANGES.txt | 8 | ||||
| -rw-r--r-- | repoze/bfg/push.py | 25 | ||||
| -rw-r--r-- | repoze/bfg/tests/pp.pt | 3 | ||||
| -rw-r--r-- | repoze/bfg/tests/test_push.py | 37 |
4 files changed, 72 insertions, 1 deletions
diff --git a/CHANGES.txt b/CHANGES.txt index cf765f3a0..7e4a48ccf 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,10 @@ +After 0.1 + + - Added 'repoze.bfg.push:pushpage' decorator, which creates BFG views + from callables which take (context, request) and return a mapping of + top-level names. + 0.1 - Initial release. + - Initial release. diff --git a/repoze/bfg/push.py b/repoze/bfg/push.py new file mode 100644 index 000000000..205c7f26e --- /dev/null +++ b/repoze/bfg/push.py @@ -0,0 +1,25 @@ +import os.path +from repoze.bfg.template import render_template + +class pushpage(object): + """ Decorator for functions which return template namespaces. + + E.g.: + + @pushpage('www/my_template.pt') + def my_view(context, request): + return {'a': 1, 'b': ()} + """ + def __init__(self, template): + self.template = template + + def __call__(self, wrapped): + prefix = os.path.dirname(wrapped.func_globals['__file__']) + path = os.path.join(prefix, self.template) + + def _curried(context, request): + kw = wrapped(context, request) + return render_template(path, **kw) + _curried.__name__ = wrapped.__name__ + + return _curried diff --git a/repoze/bfg/tests/pp.pt b/repoze/bfg/tests/pp.pt new file mode 100644 index 000000000..9df7d22da --- /dev/null +++ b/repoze/bfg/tests/pp.pt @@ -0,0 +1,3 @@ +<p xmlns="http://www.w3.org/1999/xhtml" + xmlns:tal="http://xml.zope.org/namespaces/tal" + tal:content="wrapped">WRAPPED</p> diff --git a/repoze/bfg/tests/test_push.py b/repoze/bfg/tests/test_push.py new file mode 100644 index 000000000..907503983 --- /dev/null +++ b/repoze/bfg/tests/test_push.py @@ -0,0 +1,37 @@ +import unittest + +from zope.component.testing import PlacelessSetup + +class Test_pushpage(unittest.TestCase, PlacelessSetup): + def setUp(self): + PlacelessSetup.setUp(self) + + def tearDown(self): + PlacelessSetup.tearDown(self) + + def _zcmlConfigure(self): + import repoze.bfg + import zope.configuration.xmlconfig + zope.configuration.xmlconfig.file('configure.zcml', package=repoze.bfg) + + def _getTargetClass(self): + from repoze.bfg.push import pushpage + return pushpage + + def _makeOne(self, template): + return self._getTargetClass()(template) + + def test_decorated_has_same_name_as_wrapped(self): + pp = self._makeOne('pp.pt') + wrapped = pp(to_wrap) + self.assertEqual(wrapped.__name__, 'to_wrap') + + def test___call___passes_names_from_wrapped(self): + self._zcmlConfigure() + pp = self._makeOne('pp.pt') + wrapped = pp(to_wrap) + response = wrapped(object(), object()) + self.assertEqual(response.body, '<p>WRAPPED</p>') + +def to_wrap(context, request): + return {'wrapped': 'WRAPPED'} |
